Цвет фона по умолчанию для корневого элемента SVG

Я хотел бы установить цвет фона по умолчанию для всего документа SVG, например, красным.

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

Решение выше работает, но свойство фона атрибута стиля, к сожалению, не является стандартным: http://www.w3.org/TR/SVG/styling.html#SVGStylingProperties, и поэтому он удаляется во время процесса очистки с помощью SVG Cleaner.

Есть ли другой способ объявить этот цвет фона?

Ответ 1

SVG 1.2 Tiny имеет viewport-fill Я не уверен, насколько широко реализовано это свойство, так как большинство браузеров в настоящее время ориентируются на SVG 1.1. Опера реализует это FWIW.

В настоящее время более кросс-браузерным решением было бы вставить элемент <rect> с шириной и высотой 100% и заполнить = "красный" в качестве первого дочернего элемента элемента <svg>, например:

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

Ответ 2

Найдено, что это работает в Safari. SVG только цвета в фоновом цвете, где охватывает ограничивающий элемент. Итак, дайте ему границу (ход) с нулевой границей пикселя. Он заполняет все для вас своим фоном.

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

Ответ 3

Это ответ @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>

Ответ 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>

Ответ 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.

Поэтому я предлагаю использовать "rect" решение, предоставленное Робертом Лонгсоном, потому что я предполагаю, что это не простой "взлом". Кажется, что стандартный способ установить фон с помощью SVG.

Ответ 6

Другим обходным решением может быть использование <div> того же размера, чтобы обернуть <svg>. После этого вы сможете применить "background-color" и "background-image", которые повлияют на svg.

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

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