在:before或:after CSS中更改SVG填充颜色。
在:before或:after CSS中更改SVG填充颜色。
我有一个像这样的SVG图形:
a::before { content: url(filename.svg); }
当我将鼠标悬停在标签上时,我真的希望SVG的填充颜色发生变化,而不用加载一个新的SVG文件,就像我现在做的一样:
a:hover::before { content: url(filename_white.svg); }
是否有可能使用JavaScript、jQuery或者我不知道的纯CSS来实现这个效果?
谢谢。
问题的出现原因是:用户想要通过CSS中的:before或:after伪元素来改变SVG图像的填充颜色,但是默认的方式并不能实现这个效果。
解决方法是:通过使用SVG遮罩和背景颜色的技巧来实现。具体实现方式是在:before或:after伪元素的样式中添加一个SVG遮罩属性,并将SVG图像作为遮罩的背景。然后通过设置伪元素的背景颜色来改变SVG图像的填充颜色。这样就可以实现改变SVG图像填充颜色的效果。同时,还可以使用图片或渐变作为背景。
需要注意的是,这种方法并不是直接修改SVG DOM本身,而是通过改变背景颜色来实现的。因此,需要注意浏览器的兼容性。这种方法在大部分浏览器中都能正常工作,但是在部分浏览器中可能不被支持。因此,在使用这种方法时需要注意浏览器的兼容性,并根据需要决定是否放弃一些不支持的浏览器。
在更新部分中,提到了该方法的浏览器支持情况。经过六年的时间,这种方法在大部分浏览器中的支持率已经达到了97%。然而,仍然有一些浏览器不支持这种方法,比如Firefox。因此,在使用这种方法时,仍然需要考虑浏览器的兼容性,并根据需要决定是否放弃一些不支持的浏览器。
通过在:before或:after伪元素的样式中添加SVG遮罩属性,并通过设置背景颜色来改变SVG图像的填充颜色,可以实现改变SVG图像填充颜色的效果。然而,需要注意浏览器的兼容性,并根据需要决定是否放弃一些不支持的浏览器。
问题的原因:在CSS中,无法直接更改使用:after或:before伪元素的SVG填充颜色。
解决方法:可以通过使用-webkit-mask-image和mask-image属性,将SVG图像作为掩码来更改填充颜色。同时,使用clip-path属性来防止背景色在Safari中泄漏。
以下是解决问题的代码示例:
a[target="_blank"]:after { background-color: currentColor; content: ""; padding: 0 0.5em; margin: 0 0.125rem; -webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2048 2048'%3E%3Cpath d='M1792 256v640h-128V475l-851 850-90-90 850-851h-421V256h640zm-512 1007h128v529H256V640h529v128H384v896h896v-401z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2048 2048'%3E%3Cpath d='M1792 256v640h-128V475l-851 850-90-90 850-851h-421V256h640zm-512 1007h128v529H256V640h529v128H384v896h896v-401z'/%3E%3C/svg%3E"); -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; clip-path: padding-box inset(0.28125em 0); }
Lorem ipsum sumit dolar <a href="#" target="_blank">hello world</a>
以上代码可以在使用标签时,在其后添加一个填充颜色可以改变的图标。