SVG kök öğesinin varsayılan arka plan rengi


134

Örneğin, tüm SVG belgesi için varsayılan bir arka plan rengini kırmızı olarak ayarlamak istiyorum.

<svg viewBox="0 0 500 600" style="background: red">/* content */</svg>

Yukarıdaki çözüm işe yarıyor ancak stil özniteliğinin arka plan özelliği maalesef standart bir özellik değil: http://www.w3.org/TR/SVG/styling.html#SVGStylingProperties ve bu nedenle, SVG ile temizleme işlemi sırasında kaldırılır Temizleyici.

Bu arka plan rengini belirtmenin başka bir yolu var mı?


1
Muhtemelen SVG Cleaner'da da bir hata var mı? Standart olmalarına rağmen satır içi stil bloklarını da kaldırır: w3.org/TR/SVG/styling.html#StylingWithCSS
Volker E.

Yanıtlar:


120

SVG 1.2 Tiny görüntü alanı dolgusuna sahiptir . Çoğu tarayıcı şu anda SVG 1.1'i hedeflediğinden, bu özelliğin ne kadar geniş bir şekilde uygulandığından emin değilim. Opera bunu FWIW uygular.

Şu anda tarayıcılar arası daha iyi bir çözüm <rect>, genişliği ve yüksekliği% 100 olan bir <svg>öğeyi öğenin ilk alt öğesi olarak doldurmak = "kırmızı" olarak yapıştırmak olacaktır , örneğin:

<rect width="100%" height="100%" fill="red"/>

24
Rect hack türü işe yarar, ancak svg'nin en-boy oranının her zaman aldığı görüntü alanına uyduğunu varsayar, bu nedenle tüm durumlarda tüm görüntü alanını doldurmaz.
Erik Dahlström

1
en boy oranı görüntü alanına uymadığında, kullanılması width="10000%" height="10000%"onu düzeltebilir. değilse o zaman biraz sıfır ekleyin
mulllhausen

1
@ mulllhausen maalesef% 10000000 gibi yüksek bir değer eklemek işe yaramadı. başka bir öneriniz var mı?
Crashalot

Terk edilmiş bir viewport-fillcaniuse çekme isteği: github.com/Fyrd/caniuse/issues/2186 Neden neden SVG'nin ölmesine izin verdiler?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

47

Bu çalışmayı Safari'de buldum. SVG, yalnızca bir öğenin sınırlayıcı kutusunun kapladığı yerde arka plan rengiyle renklendirir. Öyleyse, sıfır piksel sınırına sahip bir sınır (kontur) verin. Arka plan renginizle sizin için her şeyi doldurur.

<svg style='stroke-width: 0px; background-color: blue;'> </svg>


5
Bu, tüm alt öğe konturlarının da sıfır genişlikte olmasına neden olur, bu nedenle iyi bir "arka plan" seçeneği değildir.
duanev


20

Bulduğum, önceki cevaplarda yazılmayan çok basit bir çözümü rapor edeyim. Ayrıca bir SVG'de arka plan ayarlamak istedim, ancak bunun bağımsız bir SVG dosyasında da çalışmasını istiyorum.

Bu çözüm gerçekten çok basit, aslında SVG stil etiketlerini destekliyor, böylece

<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
  <style>svg { background-color: red; }</style>
  <text>hello</text>
</svg>

Güzel ve basit bir çözüm!
conceptdeluxe

1
Bu ayar, tüm tarayıcılarda genel olarak çalışır rağmen background-colorbir <svg>elemanın IE11 dışında da arka plan rengini ile tanımlanan bölgeyi hale yapacak viewBoxözniteliği. Bu, kullanırken widthve heightözniteliklerde önemli değildir .
conceptdeluxe

@conceptdeluxe ilginç gözlem, teoride svg içinde kodlanan stil yalnızca svg içinde geçerli olmalıdır. Bununla birlikte, genişliği ve yüksekliği ayarlamak neredeyse her zaman gereklidir.
Gianluca Casati

Arasında bir fark var mı <svg style"...."></svg>ve <svg><style>...</style></svg>varsayarak <style>etiket üst düzeydedir? Değilse, bu yanıt OP'nin farklı bir sözdizimi altında yeniden paketlenmiş orijinal çözümü gibi görünüyor. (Ama belki bu çözüm SVG Cleaner'dan sağ çıkarken <svg style="..."></svg>, sağlamıyor mu?)
Labrador

@Labrador Bir çözüm arıyordum, bu soruyu gördüm, sonra çözmenin bir yolunu buldum ve paylaştım. Bilmiyorum, bu w3.org/TR/SVG/styling.html#SVGStylingProperties'de bildirilen tek öznitelikler destekleniyor gibi görünüyor . Öte yandan, önerdiğim çözüm işe yarıyor ve hoşuma giden yol, rect vb. Gibi diğer SVG etiketlerini de biçimlendirebilmenize neden oluyor. Benim için temel özellik, bağımsız SVG'ler için de çalışması.
Gianluca Casati

10

Şu anda bunun gibi bir dosya üzerinde çalışıyorum:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/css" href="style.css" ?>
<svg
  xmlns="http://www.w3.org/2000/svg"
  version="1.1"
  width="100%"
  height="100%"
  viewBox="0 0 600 600">
...

Ve bunu içine koymaya çalıştım style.css:

svg {
  background: #bf1f1f;
}

Bu oluyor çalışan Krom ve Firefox'ta ama bunun iyi bir uygulama olduğunu düşünmüyorum . EyeOfGnome resim görüntüleyici onu oluşturmaz ve Inkscape böyle bir arka planı saklamak için özel bir ad alanı kullanır:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
    xmlns="http://www.w3.org/2000/svg"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    version="1.1"
    ...
  <sodipodi:namedview
     pagecolor="#480000" ... >

Görünüşe göre SVG kök öğesi, SVG önerilerindeki boyanabilir öğelerin bir parçası değil .

Bu nedenle , Robert Longson tarafından sağlanan "rect" çözümünü kullanmanızı öneririm çünkü sanırım bu basit bir "hack" değil. SVG ile bir arka plan oluşturmanın standart yolu gibi görünüyor .


4
<rect width = "100%" height = "100%" fill = "white" /> başlangıçta
eog

2

Başka bir geçici çözüm kullanmak olabilir <div>sarmak için aynı büyüklükte <svg>. Bundan sonra, başvuruda bulunabileceksiniz "background-color"ve "background-image"bu svg.

<div class="background">
  <svg></svg>
</div>

<style type="text/css">
.background{
  background-color: black; 
  /*background-image: */
}
</style>

12
Bu çözüm bir HTML saldırısıdır. Ve yalnızca bir web sayfasında SVG kullanıyorsanız işe yarayabilir. Bu gerçek bir SVG çözümü değil.
Charles-Édouard Coste

SVG'nin arka plan rengi, içinde bulunduğu bileşenden ödünç alınır. (Svg'nin sayfa rengini ödünç alması ve varsayılan sayfa renginin beyaz olması gibi). Bir şekilde bunun bir hack olduğunu düşünmüyorum.
Clinux

@clinux: Charles'ın söylemeye çalıştığı şey, web sayfası oluşturma için mükemmel bir şekilde çalışıyor ancak farz edelim ki aynı svg'yi başka bir yerde oluşturmak için .svg uzantılı bir resim olarak kullanmak istiyorsunuz, işe yaramayabilir.
Arunkumar Srisailapathi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.