【问题标题】:Default background color of SVG root elementSVG 根元素的默认背景颜色
【发布时间】:2012-07-02 19:54:00
【问题描述】:

我想为整个 SVG 文档设置一个默认的背景颜色,例如红色。

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

上述解决方案有效,但不幸的是样式属性的背景属性不是标准属性:http://www.w3.org/TR/SVG/styling.html#SVGStylingProperties,因此在使用 SVG Cleaner 进行清理过程中将其删除。

还有其他方式来声明这种背景颜色吗?

【问题讨论】:

标签: svg


【解决方案1】:

backgroundbackground-color 未得到广泛支持

没有的最短代码是绘制一个半径为 10000 的圆,这也适用于不同于 viewBox 的宽高纵横比。

<circle r="1e5" fill="red"/>

<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
 <circle r="1e5" fill="red"/>
</svg>

【讨论】:

    【解决方案2】:

    是@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>

    这个答案使用:

    【讨论】:

      【解决方案3】:

      SVG 1.2 Tiny 有viewport-fill 虽然目前大多数浏览器都针对 SVG 1.1,但我不确定这个属性的实现范围有多广。 Opera 实现了 FWIW。

      目前更跨浏览器的解决方案是粘贴一个宽度和高度为 100% 的 &lt;rect&gt; 元素,并将 fill="red" 作为 &lt;svg&gt; 元素的第一个子元素,例如:

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

      【讨论】:

      • rect hack 的工作方式,但它假定 svg 的纵横比总是与它获得的视口相匹配,因此它不会在所有情况下填满整个视口。
      • 当纵横比与视口不匹配时,使用width="10000%" height="10000%" 可能会修复它。如果没有,则添加一些零
      • @mulllhausen 不幸的是,添加高达 10000000% 的值不起作用。还有其他建议吗?
      • 一个废弃的viewport-fill caniuse 拉取请求:github.com/Fyrd/caniuse/issues/2186 为什么他们为什么让 SVG 死掉。
      • @ErikDahlström 请在stackoverflow.com/a/69899106/6747994查看解决方案
      【解决方案4】:

      让我报告一个我发现的非常简单的解决方案,它没有写在以前的答案中。我还想在 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>
      

      【讨论】:

      • 不错的简单解决方案!
      • 虽然这通常适用于所有浏览器,但设置&lt;svg&gt; 元素的background-color 将使IE11 渲染背景颜色也在viewBox 属性定义的区域之外。不过,在使用 widthheight 属性时,这并不重要。
      • @conceptdeluxe 有趣的观察,理论上 svg 中编码的样式应该只适用于 svg 中。但是,几乎总是需要设置宽度和高度。
      • 假设&lt;style&gt;标签在顶层,&lt;svg style"...."&gt;&lt;/svg&gt;&lt;svg&gt;&lt;style&gt;...&lt;/style&gt;&lt;/svg&gt;有区别吗?如果不是,那么这个答案似乎就像 OP 的原始解决方案,以不同的语法重新打包。 (但也许这个解决方案在 SVG Cleaner 中存在,而 &lt;svg style="..."&gt;&lt;/svg&gt; 没有?)
      • @Labrador 我一直在寻找解决方案,看到了这个问题,然后找到了解决方法并分享了它。我不知道,似乎只支持此w3.org/TR/SVG/styling.html#SVGStylingProperties 中报告的属性。另一方面,我提出的解决方案很有效,我也喜欢它,因为您可以设置其他 SVG 标记的样式,如路径、矩形等。对我来说,主要特点是它也适用于独立的 SVG。
      【解决方案5】:

      我目前正在处理这样的文件:

      <?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;
      }
      

      它在 Chromium 和 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 根元素似乎不是 paintable elements 的一部分。

      所以我建议使用"rect" solution provided by Robert Longson,因为我猜这不是一个简单的“黑客”。这似乎是使用 SVG 设置背景的标准方式

      【讨论】:

      • 开头的解决了eog的问题
      【解决方案6】:

      发现这在 Safari 中有效。 SVG 仅在元素的边界框覆盖的背景颜色中着色。因此,给它一个具有零像素边界的边界(笔划)。它用你的背景颜色为你填充了整个东西。

      &lt;svg style='stroke-width: 0px; background-color: blue;'&gt; &lt;/svg&gt;

      【讨论】:

      • 这会导致所有子元素的笔划也为零宽度,因此它不是一个好的“背景”选项。
      【解决方案7】:

      另一种解决方法可能是使用相同大小的&lt;div&gt; 来包装&lt;svg&gt;。之后,你就可以申请"background-color""background-image"会影响svg

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

      【讨论】:

      • 这个解决方案是一个 HTML hack。并且仅当您在网页中使用 SVG 时才可能起作用。这不是真正的 SVG 解决方案。
      • SVG 的背景颜色是从它所在的组件借来的。(有点像 svg 借用页面颜色,默认页面颜色是白色)。不知何故,我不认为这是一个 hack。
      • @clinux:Charles 想说的是,它非常适合网页渲染,但假设您想使用与带有 .svg 扩展名的图像相同的 svg 在其他地方渲染它,它可能不会工作。
      猜你喜欢
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      相关资源
      最近更新 更多