Default background color of SVG root element

后端 未结 6 1106
一生所求
一生所求 2020-11-29 17:30

I\'d like to set a default background color for the entire SVG document, to red for example.

/*          


        
相关标签:
6条回答
  • 2020-11-29 18:12

    Another workaround might be to use <div> of the same size to wrap the <svg>. After that, you will be able to apply "background-color", and "background-image" that will affect thesvg.

    <div class="background">
      <svg></svg>
    </div>
    
    <style type="text/css">
    .background{
      background-color: black; 
      /*background-image: */
    }
    </style>
    
    0 讨论(0)
  • 2020-11-29 18:14

    SVG 1.2 Tiny has viewport-fill I'm not sure how widely implemented this property is though as most browsers are targetting SVG 1.1 at this time. Opera implements it FWIW.

    A more cross-browser solution currently would be to stick a <rect> element with width and height of 100% and fill="red" as the first child of the <svg> element, for example:

    <rect width="100%" height="100%" fill="red"/>
    
    0 讨论(0)
  • 2020-11-29 18:14

    Found this works in Safari. SVG only colors in with background-color where an element's bounding box covers. So, give it a border (stroke) with a zero pixel boundary. It fills in the whole thing for you with your background-color.

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

    0 讨论(0)
  • 2020-11-29 18:16

    Let me report a very simple solution I found, that is not written in previous answers. I also wanted to set background in an SVG, but I also want that this works in a standalone SVG file.

    Well, this solution is really simple, in fact SVG supports style tags, so you can do something like

    <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
      <style>svg { background-color: red; }</style>
      <text>hello</text>
    </svg>
    
    0 讨论(0)
  • 2020-11-29 18:17

    I'm currently working on a file like this:

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

    And I tried to put this into style.css:

    svg {
      background: #bf1f1f;
    }
    

    It's working on Chromium and Firefox, but I don't think that it's a good practice. EyeOfGnome image viewer doesn't render it, and Inkscape uses a special namespace to store such a background:

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

    Well, it seems that SVG root element is not part of paintable elements in SVG recommandations.

    So I'd suggest to use the "rect" solution provided by Robert Longson because I guess that it is not a simple "hack". It seems to be the standard way to set a background with SVG.

    0 讨论(0)
  • 2020-11-29 18:19

    It is the answer of @Robert Longson, now with code (there was originally no code, it was added later):

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

    This answer uses:

    • https://stackoverflow.com/a/11293812/6747994
    • https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Fills_and_Strokes
    0 讨论(0)
提交回复
热议问题