SVGルート要素のデフォルトの背景色


134

たとえば、SVGドキュメント全体のデフォルトの背景色を赤に設定したいと思います。

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

上記の解決策は機能しますが、スタイル属性のbackgroundプロパティは残念ながら標準のものではありません:http : //www.w3.org/TR/SVG/styling.html#SVGStylingProperties、そしてそれはSVGでのクリーニングプロセス中に削除されますクリーナー。

この背景色を宣言する別の方法はありますか?


1
SVG Cleanerにもバグがあるのでしょうか?標準ではありますが、インラインスタイルブロックも削除されます:w3.org/TR/SVG/styling.html#StylingWithCSS
Volker E.

回答:


120

SVG 1.2 Tinyにはビューポートフィルがありますが、現時点ではほとんどのブラウザがSVG 1.1をターゲットにしているため、このプロパティがどれだけ広く実装されているかはわかりません。OperaはFWIWを実装しています。

よりクロスブラウザなソリューションは現在<rect>、幅と高さが100%で、<svg>要素の最初の子としてfill = "red"を持つ要素を貼り付けることです。次に例を示します。

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

24
正解は一種のハックですが、svgのアスペクト比は常に取得するビューポートと一致すると想定しているため、すべての状況でビューポート全体を埋めることはありません。
ErikDahlström12年

1
アスペクト比がビューポートと一致しない場合、を使用width="10000%" height="10000%"すると修正されることがあります。そうでない場合は、ゼロを追加します
mulllhausen '10 / 10/19

1
@mulllhausenは残念ながら10000000%という高い値を追加しても機能しませんでした。他の提案はありますか?
Crashalot

放棄されたviewport-fillcaniuseプルリクエスト:github.com/Fyrd/caniuse/issues/2186なぜ、なぜSVGを停止させたのか。
Ciro Santilli郝海东冠状病六四事件法轮功

47

これはSafariで動作します。SVGは要素の境界ボックスがカバーするbackground-colorでのみ色を付けます。そのため、ピクセル境界がゼロのボーダー(ストローク)を設定します。それはあなたのためにあなたの背景色ですべてを塗りつぶします。

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


5
これにより、すべてのサブ要素のストロークも幅がゼロになるため、適切な「背景」オプションではありません。
duanev 2014年

35

これは@Robert Longsonの答えであり、コードが追加されています(元々はコードがありませんでしたが、後で追加されました)。

<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
 <rect width="100%" height="100%" fill="red"/>
</svg>

この回答は以下を使用します:


20

私が見つけた非常に単純な解決策を報告させてください、それは以前の答えには書かれていません。また、SVGで背景を設定したいのですが、これがスタンドアロンのSVGファイルでも機能することを望んでいます。

まあ、このソリューションは本当にシンプルです。実際、SVGはスタイルタグをサポートしているため、次のようなことができます

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

素敵でシンプルなソリューション!
conceptdeluxe 2018年

1
これはすべてのブラウザで一般的に機能しますbackground-colorが、<svg>要素のを設定すると、IE11はviewBox属性で定義された領域の外側にも背景色をレンダリングします。widthheight属性を使用する場合、これは問題ではありません。
conceptdeluxe 2018年

@conceptdeluxe興味深い観察。理論的には、svg内にコーディングされたスタイルはsvg内にのみ適用されるはずです。ただし、ほとんどの場合、幅と高さの設定が必要です。
ジャンルカカサティ2018年

間に差がある<svg style"...."></svg>とは<svg><style>...</style></svg>想定して、<style>タグがトップレベルにありますか?そうでない場合、この答えはOPの元のソリューションのように見え、別の構文で再パッケージ化されています。(しかし、おそらくこのソリューションはSVG Cleanerを存続させますが、そうではあり<svg style="..."></svg>ませんか?)
Labrador

@Labrador私は解決策を探していて、この質問を見て、それを解決する方法を見つけて共有しました。わかりません。このw3.org/TR/SVG/styling.html#SVGStylingPropertiesで報告されている属性のみがサポートされているようです。一方、私が提案したソリューションは機能し、それが気に入っているので、パスや四角などの他のSVGタグのスタイルを設定できます。私にとっての主な機能は、スタンドアロンSVGでも機能することです。
ジャンルカカ

10

私は現在、このようなファイルに取り組んでいます:

<?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">
...

そして私はこれを入れようとしましたstyle.css

svg {
  background: #bf1f1f;
}

それはだ作業クロムとFirefox上で、しかし、私はそれは良い習慣だとは思いません。EyeOfGnome画像ビューアはそれをレンダリングせず、Inkscapeはそのような背景を格納するために特別な名前空間を使用します:

<?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" ... >

さて、SVGルート要素はSVG推奨のペイント可能な要素の一部ではないようです。

だから私はそれが単純な「ハック」ではないと思いますので、私はロバート・ロングソンによって提供された「正しい」解決策を使うことを勧めます。あると思われる標準的な方法 SVGと背景を設定します。


4
<rect width = "100%" height = "100%" fill = "white" />を最初に実行すると、eogの問題が解決されます
nvrandow

2

別の回避策<div>は、同じサイズを使用してをラップすること<svg>です。その後、あなたは適用することができるように"background-color"なり、"background-image"それはに影響を与えますsvg

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

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

12
このソリューションはHTMLハックです。また、SVGをWebページに使用している場合にのみ機能する場合があります。これは真のSVGソリューションではありません。
シャルル・エドゥアール・コステ

SVGの背景色は、それが置かれているコンポーネントから借用されます(svgのようなちょっとしたものはページの色を借用し、デフォルトのページの色は白です)。どういうわけかそれはハックだとは思いません。
clinux 2015年

@clinux:Charlesが言っていたのは、Webページのレンダリングに完全に機能することですが、.svg拡張子の付いた画像と同じsvgを他の場所にレンダリングする場合、機能しない可能性があります。
Arunkumar Srisailapathi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.