SVG根元素的默认背景色


134

我想将整个SVG文档的默认背景色设置为红色。

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

上面的解决方案有效,但是不幸的是,style属性的bac​​kground属性不是标准的:http : //www.w3.org/TR/SVG/styling.html#SVGStylingProperties,因此在使用SVG进行清理过程中将其删除。清洁器。

还有另一种方法来声明此背景色吗?


1
SVG Cleaner中是否也可能存在错误?即使它们是标准样式,它也删除了内联样式块:w3.org/TR/SVG/styling.html#StylingWithCSS
Volker E.

Answers:


120

SVG 1.2 Tiny具有视口填充功能,虽然目前大多数浏览器都将SVG 1.1作为目标,但我不确定该属性的实现范围如何。Opera实施FWIW。

当前,跨浏览器的另一种解决方案是将<rect>宽度和高度为100%的元素粘贴并以fill =“ red”作为该<svg>元素的第一个子元素,例如:

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

24
rect hack可以正常工作,但是它假定svg的纵横比始终与它获得的视口匹配,因此它不会在所有情况下都占据整个视口。
ErikDahlström'12年

1
当宽高比与视口不匹配时,width="10000%" height="10000%"可以使用对其进行修复。如果不是,则添加一些零
穆尔豪森

1
不幸的是,@ mulllhausen添加高达10000000%的值无效。还有其他建议吗?
Crashalot

废弃的viewport-fillCaniuse拉取请求:github.com/Fyrd/caniuse/issues/2186为什么为什么让SVG死亡。
Ciro Santilli郝海东冠状病六四事件法轮功

47

发现这在Safari中有效。SVG仅使用元素边框包围的背景颜色进行着色。因此,给它一个边界(笔划),像素边界为零。它用背景色为您填充整个内容。

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


5
这也会导致所有子元素笔划也为零宽度,因此它不是一个好的“背景”选项。
duanev 2014年


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

1
虽然这个工作一般在所有浏览器,设置background-color了的<svg>元素将使IE11渲染的背景色外还与定义的区域viewBox属性。不过,在使用widthheight属性时,这并不重要。
conceptdeluxe

@conceptdeluxe有趣的观察,理论上,在svg内编码的样式应仅在svg内应用。但是,几乎总是需要设置宽度和高度。
Gianluca Casati

<svg style"...."></svg><svg><style>...</style></svg>假设<style>标签位于顶层,两者之间有区别吗?如果不是,则此答案似乎是OP的原始解决方案,使用不同的语法重新包装。(但也许该解决方案可以在SVG Cleaner中生存,但<svg style="..."></svg>不是吗?)
Labrador

@Labrador我一直在寻找解决方案,看到了这个问题,然后找到了解决问题的方法并与他人分享。我不知道,它似乎仅支持此w3.org/TR/SVG/styling.html#SVGStylingProperties中报告的属性。另一方面,我提出的解决方案很有效,而且我喜欢它还可以使您设置其他SVG标签的样式,例如path,rect等。对我来说,主要功能是它也适用于独立SVG。
Gianluca Casati

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命令中可绘画元素的一部分。

因此,我建议使用Robert Longson提供“ rect”解决方案,因为我认为这不是一个简单的“ hack”。这似乎是使用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 hack。并且仅在将SVG用于网页中时才有效。这不是真正的SVG解决方案。
2014年

SVG的背景色是从它所在的组件中借用的。(有点像svg一样借用了页面颜色,默认页面颜色是白色)。不知何故,我认为这不是hack。
clinux

@clinux:Charles试图说的是,它非常适合网页渲染,但是假设您要使用与具有.svg扩展名的图像相同的svg来在其他位置渲染它,则可能无法正常工作。
Arunkumar Srisailapathi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.