Как применить стиль к встроенному SVG?
когда SVG непосредственно включен в документ с помощью <svg> тег, вы можете применить стили CSS к SVG через таблицу стилей документа. Тем не менее, я пытаюсь применить стиль к SVG, который встроен (используя <object> tag).
можно ли использовать что-нибудь вроде следующего кода?
object svg {
fill: #fff;
}
3 ответов:
короткий ответ: нет, так как стили не действуют через границы документа.
однако, так как у вас есть
<object>тег вы можете вставить таблицу стилей в документ svg с помощью скрипта.что-то вроде этого, и обратите внимание, что этот код предполагает, что
<object>полностью загружена:var svgDoc = yourObjectElement.contentDocument; var styleElement = svgDoc.createElementNS("http://www.w3.org/2000/svg", "style"); styleElement.textContent = "svg { fill: #fff }"; // add whatever you need here svgDoc.getElementById("where-to-insert").appendChild(styleElement);кроме того, возможно, чтобы вставить
<link>элемент для ссылки на внешние таблицы стилей:var svgDoc = yourObjectElement.contentDocument; var linkElm = svgDoc.createElementNS("http://www.w3.org/1999/xhtml", "link"); linkElm.setAttribute("href", "my-style.css"); linkElm.setAttribute("type", "text/css"); linkElm.setAttribute("rel", "stylesheet"); svgDoc.getElementById("where-to-insert").appendChild(linkElm);еще один вариант-использовать первый способ, чтобы вставьте элемент стиля, а затем добавьте правило @import, например
styleElement.textContent = "@import url(my-style.css)".конечно, вы можете напрямую ссылаться на таблицу стилей из файла svg, не делая никаких сценариев. Следующее должно работать:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="my-style.css" type="text/css"?> <svg xmlns="http://www.w3.org/2000/svg"> ... rest of document here ... </svg>или:
<svg xmlns="http://www.w3.org/2000/svg"> <defs> <link href="my-style.css" type="text/css" rel="stylesheet" xmlns="http://www.w3.org/1999/xhtml"/> </defs> ... rest of document here ... </svg>обновление 2015: Вы можете использовать jquery-svg плагин для применения сценариев js и стилей css к встроенному SVG.
вы можете сделать это без javsscrpt, поместив блок стиля с вашими стилями внутри самого файла SVG.
<style type="text/css"> path, circle, polygon { fill: #fff; } </style>
Если единственная причина использования тега для inlcude SVG заключается в том, что вы не хотите загромождать свой исходный код разметкой из SVG, вы должны взглянуть на инжекторы SVG, такие как SVGInject.
SVG injection использует Javascript для вставки SVG-файла в ваш HTML-документ. Это позволяет очистить исходный код HTML при Свгс полностью styleable с CSS. Основной пример выглядит так:
<html> <head> <script src="svg-inject.min.js"></script> </head> <body> <img src="image.svg" onload="SVGInject(this)" /> </body> </html>
Comments