与How do I have an SVG image inherit colors from the HTML document?相同的问题,但特别是当应用于用作:before
伪元素的内容的svg图像时。
(期望的行为是两个复选标记都从主体继承红色。目前只有内联SVG。)
<style type='text/css'>
body {
color: red;
}
.checkmark {
height: 2em;
width: 2em;
}
.checkmark:before {
content: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='100%' viewBox='-0.5 0 20 15'><rect fill='currentColor' stroke='none' transform='rotate(45 4.0033 8.87436)' height='5' width='6.32304' y='6.37436' x='0.84178'></rect><rect fill='currentColor' stroke='none' transform='rotate(45 11.1776 7.7066)' width='5' height='16.79756' y='-0.69218' x='8.67764'></rect></svg>");
}
</style>
<!-- Renders red -->
<svg xmlns='http://www.w3.org/2000/svg' width='2em' height='2em' viewBox='-0.5 0 20 15'><rect fill='currentColor' stroke='none' transform='rotate(45 4.0033 8.87436)' height='5' width='6.32304' y='6.37436' x='0.84178'></rect><rect fill='currentColor' stroke='none' transform='rotate(45 11.1776 7.7066)' width='5' height='16.79756' y='-0.69218' x='8.67764'></rect></svg>
<!-- Renders #000 -->
<div class="checkmark"></div>
答案 0 :(得分:2)
content: url(...)
使url部分成为一个图像,换句话说,svg成为它自己独立的文档。样式不适用于各种文档,因此在此方案中不可能使color
影响svg。
当svg是内联时,它是文档的OTOH部分,因此可以应用样式。
您可以制作(或动态生成)复选标记svg的多个版本并调整样式,以便选择适当的“预着色”版本。
答案 1 :(得分:1)
对于某些图标都具有相同颜色的用例,您可以在元素上使用css filter
而不用更改其颜色。
例如请勿在SVG网址中使用currentColor
,而应使用底色,例如red
然后,不要更改containing元素上的color
(出于说明目的,您的containing元素为<body>
,但我在这里想到的是<a href="#" class="checkmark">
),而是向元素添加过滤器:
.checkmark {
color: red; /* matches fill in the SVG */
}
.checkmark::before {
content: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='100%' viewBox='-0.5 0 20 15'><rect fill='red' stroke='none' transform='rotate(45 4.0033 8.87436)' height='5' width='6.32304' y='6.37436' x='0.84178'></rect><rect fill='red' stroke='none' transform='rotate(45 11.1776 7.7066)' width='5' height='16.79756' y='-0.69218' x='8.67764'></rect></svg>");
}
.checkmark::before:hover {
filter: hue-rotate(120deg); /* changes both text and tick from red to green */
}
您必须使用滤镜才能获得正确的颜色转换,例如您还可以更改亮度或将其设为灰度: https://css-tricks.com/almanac/properties/f/filter/