mns*_*sth 37 javascript css jquery svg pseudo-element
我有一个像这样的SVG图形:
a::before { content: url(filename.svg); }
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在标签上时,我真的希望SVG更改填充颜色,而不加载新的SVG文件,就像我现在一样:
a:hover::before { content: url(filename_white.svg); }
Run Code Online (Sandbox Code Playgroud)
这可能是使用JavaScript,jQuery或只是我不知道的纯CSS实现的吗?
谢谢.
lma*_*ooo 47
接受的答案是不正确的,这实际上可以通过应用SVG蒙版和背景颜色的变通方法来实现:
p:after {
width: 48px;
height: 48px;
display: inline-block;
content: '';
-webkit-mask: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/18515/heart.svg) no-repeat 50% 50%;
mask: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/18515/heart.svg) no-repeat 50% 50%;
-webkit-mask-size: cover;
mask-size: cover;
}
.red:after {
background-color: red;
}
.green:after {
background-color: green;
}
.blue:after {
background-color: blue;
}Run Code Online (Sandbox Code Playgroud)
<p class="red">red heart</p>
<p class="green">green heart</p>
<p class="blue">blue heart</p>Run Code Online (Sandbox Code Playgroud)
你实际上并没有修改SVG DOM本身,你只是改变了背景颜色.这样,您甚至可以使用图像或渐变作为背景.
正如MisterJ所提到的,遗憾的是这个功能得不到广泛支持.
三年后,对前缀使用的支持率已上升至89%.
类似于@lmaooooo's 答案的技术,无需设置display: inline-block。当您想要保留内容display: inline以确保:after内容不会换行到独立于前面的文本内容的新行时,这在措辞内容时非常有用。
还使用 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);
}Run Code Online (Sandbox Code Playgroud)
Lorem ipsum sumit dolar <a href="#" target="_blank">hello world</a>Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以做到这一点。您可以通过使用过滤器来实现这一点。
只需在内容中添加 svg url 并使用色调旋转来更改颜色。
根据CanIUse 的说法,它受到所有流行浏览器的支持。
p:after {
width: 48px;
height: 48px;
content: url(https://gh.max.ax/heart.svg);
}
.red:after {
filter: hue-rotate(14deg);
}
.green:after {
filter: hue-rotate(120deg);
}
.blue:after {
filter: hue-rotate(210deg);
}
.black:after {
filter: grayscale(100%);
}Run Code Online (Sandbox Code Playgroud)
<p class="red">red heart</p>
<p class="green">green heart</p>
<p class="blue">blue heart</p>
<p class="black">black heart</p>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25685 次 |
| 最近记录: |