Колір тла за замовчуванням кореневого елемента SVG


134

Я хотів би встановити колір тла за замовчуванням для всього документа SVG, наприклад, червоний.

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

Наведене вище рішення працює, але фонова властивість атрибуту style, на жаль, не є стандартною: 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>елемент елемента, наприклад:

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

24
Робота прямого хаку працює, але передбачається, що співвідношення сторін SVG завжди відповідає вікні перегляду, яку він отримує, тому він не заповнює весь огляд перегляду в усіх ситуаціях.
Ерік Дальстрем

1
коли співвідношення сторін не відповідає області перегляду, використовуючи його, width="10000%" height="10000%"можна виправити. якщо ні, то додайте кілька нулів
mulllhausen

1
@mulllhausen, на жаль, додавши значення до 10000000%, не вийшло. будь-які інші пропозиції?
Crashalot

Запит на viewport-fillзакинуту каніусу: github.com/Fyrd/caniuse/isissue/2186 Чому чому вони відпустили SVG померти.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

47

Знайшов це твори в Safari. SVG лише кольори в фоновому кольорі, де кришка обмежувача елемента. Отже, надайте їй межу (обведення) з межею нульового пікселя. Це наповнює все для вас вашим кольором фону.

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


5
Це призводить до того, що всі обведення піделемента також становлять нульову ширину, тому це не гарний варіант "фону".
дуанев

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

1
Хоча це працює взагалі у всіх браузерах, настройка background-colorна <svg>елементі буде зробити IE11 рендеринг кольору фону також за межами області , визначену з viewBoxатрибутом. Це не має значення при використанні widthта heightатрибутах.
conceptdeluxe

@conceptdeluxe цікаве спостереження, теоретично стиль, кодований всередині svg, повинен застосовуватися лише всередині svg. Однак налаштування ширини та висоти майже завжди необхідне.
Джанлука Касаті

Чи є різниця між <svg style"...."></svg>і <svg><style>...</style></svg>, якщо припустити, що <style>тег знаходиться на верхньому рівні? Якщо ні, то ця відповідь просто здається оригінальним рішенням ОП, перепакованим під інший синтаксис. (Але, можливо, це рішення пережило SVG Cleaner, поки <svg style="..."></svg>ні?)
Лабрадор,

@Labrador Я шукав рішення, бачив це питання, потім знайшов спосіб його вирішити і поділився ним. Я не знаю, схоже, що підтримуються лише атрибути, повідомлені в цій w3.org/TR/SVG/styling.html#SVGStylingProperties . З іншого боку, рішення, яке я запропонував, працює, і мені це подобається, що ви також можете створювати стилі інших тегів SVG, таких як path, rect і т.д.
Джанлука Касаті

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

Він працює над 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.


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 на веб-сторінці. Це не справжнє рішення SVG.
Шарль-Едуард Косте

Колір фону SVG запозичений з компонента, в якому він сидить. (Начебто SVG запозичує колір сторінки, а колір сторінки за замовчуванням - білий). Якось не думаю, що це хак.
clinux

@clinux: Що Чарльз намагався сказати, це прекрасно працює для візуалізації веб-сторінок, але, припустимо, ви хочете використовувати той же svg, що і зображення, з розширенням .svg для візуалізації його в іншому місці, це може не спрацювати.
Arunkumar Srisailapathi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.