麻烦的是,我无法在Chrome中的fill属性中设置值(颜色),但在Firefox中它可以正常工作。我尝试了很多方法,但没有结果。我看到改变SVG图标颜色的唯一方法是通过改变<symbol>
的id来通过jQuery(或JavaScript),如下所示。请帮我解决这个问题!
这是我在Chrome中需要的工作:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
span:hover .pathCrossBtn{
fill: blue;
}
</style>
</head>
<body>
<svg width="0" height="0" style='display: none;' xmlns="http://www.w3.org/2000/svg">
<symbol viewBox="0 0 2048 2048" id="crossBtn">
<path class="pathCrossBtn" fill="red" d="M1618 1450q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/>
</symbol>
</svg>
<span>
<svg class="crossBtn" viewBox="0 0 2048 2048" width="30" height="30">
<use xlink:href="#crossBtn"></use>
</svg>
</span>
</body>
</html>
这是解决我的问题的不好方法,对我来说并不合适。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<svg width="0" height="0" style='display: none;' xmlns="http://www.w3.org/2000/svg">
<symbol viewBox="0 0 2048 2048" id="crossBtnBlue">
<path class="pathCrossBtn" fill="blue" d="M1618 1450q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/>
</symbol>
<symbol viewBox="0 0 2048 2048" id="crossBtnRed">
<path class="pathCrossBtn" fill="red" d="M1618 1450q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/>
</symbol>
</svg>
<span>
<svg class="crossBtn" viewBox="0 0 2048 2048" width="30" height="30">
<use xlink:href="#crossBtnRed"></use>
</svg>
</span>
<script>
;(function(){
$('.crossBtn')
.mouseover(function(){
$('span svg use').attr('xlink:href','#crossBtnBlue');
})
.mouseleave(function(){
$('span svg use').attr('xlink:href','#crossBtnRed');
})
}());
</script>
</body>
</html>
答案 0 :(得分:4)
如果您在currentColor
path
属性中使用fill
,情况会更好。
然后在需要时在svg符号容器中添加一种颜色。你应该删除span元素,不需要添加它,它实际上对语义HTML不好。
.icon--blue {
color: blue;
}
.icon--red {
color: red;
}
&#13;
<svg width="0" height="0" style='display: none;' xmlns="http://www.w3.org/2000/svg">
<symbol viewBox="0 0 2048 2048" id="crossBtn">
<path class="pathCrossBtn" fill="currentColor" d="M1618 1450q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"
/>
</symbol>
</svg>
<svg class="icon icon--red" viewBox="0 0 2048 2048" width="30" height="30">
<use xlink:href="#crossBtn"></use>
</svg>
<svg class="icon icon--blue" viewBox="0 0 2048 2048" width="30" height="30">
<use xlink:href="#crossBtn"></use>
</svg>
&#13;
答案 1 :(得分:0)
不完全是上述问题的通用解决方案,但我来这里是为了解决类似的问题,svg 节点上的 fill="none"
在 Chrome 和 Firefox 中似乎并非在所有情况下都有效,并且可能其它浏览器。这段 SCSS 为我们修复了它,在我们的例子中是通过 feather icons 呈现的 react-svgr:
svg:global(.feather) {
// Fix for `fill="none"` not working properly in (at least) Chrome and Firefox
// Part 1: If there is a `fill` property, reset `fill-opacity`.
// This is for children of elements with `fill="none"`
&[fill], *[fill] {
fill-opacity: initial;
}
// Part 2: If the element uses `fill="none"`, set `fill-opacity` to 0.
&[fill='none'], *[fill='none'] {
fill-opacity: 0;
}
}
等价的 CSS,对于一般情况:
svg[fill], svg *[fill] {
fill-opacity: initial;
}
svg[fill='none'], svg *[fill='none'] {
fill-opacity: 0;
}
请注意,这可能无法涵盖具有填充属性的 SVG 元素和具有不同值属性的子元素的所有情况,因此请根据您的需要进行调整。