当前位置: 首页 > 知识库问答 >
问题:

CSS-具有颜色更改功能的伪元素中的SVG

郝杰
2023-03-14

主要思想是,我正在寻找将SVG添加到伪元素的最佳方法,该伪元素仍然保持其颜色变化(用于悬停)。所有这些最好没有HTML,而绝对不是JS。我正在寻找一个更简单的插件类,这是他们那种只使用CSS的解决方案

我在这里读到了一篇讨论:有没有办法在伪元素::before或::after中使用SVG作为内容

在这里,人们主要谈论的是将其添加为这样的内容:

内容:url(数据:图像/svg xml,xml版本=“1.0”en…)

这里的问题在于我无法更改SVG的颜色。

解决方案只是将其添加为内容或背景也是如此。

我能找到的唯一方法是通过高度:25px;宽度:30px;

-webkit-mask-size: contain;
mask-size: contain;

-webkit-mask-position: center;
mask-position: center;

-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;

background: #fff;

-webkit-mask-image: url('button.svg');
mask-image: url('button.svg');`

这是一段需要编写的样板代码。但它允许在背景字段中悬停时更改颜色。

在现代浏览器(不包括IE11)上是否有更好的方法来做到这一点,或者我应该坚持我久经考验的掩码做事方式。

我感谢任何和所有的投入。

共有1个答案

禄源
2023-03-14

如果您翻转逻辑-而不是在悬停时添加颜色-将其视为在不悬停时删除颜色,这很容易。

使用CSS过滤器-您可以将svg转换为灰度-这意味着彩色图像/SVG呈现为黑白图像。然后在悬停时-停止过滤器/转换,您的svg将拥有其实际颜色。

请注意,这只适用于一种颜色更改—您不能让不同的路径使用不同的颜色等—但通过反转颜色逻辑,您可以得到一个黑白svg,该svg在悬停时变为彩色。

下面的div有一个边框-只是为了显示尺寸(我可能会将svg作为div的背景图像,而不是::之前-但我按照要求保留了它。svg最初显示为黑色,悬停在div上-svg变为红色…神奇:)

div {
  height: 160px;
   width: 300px;
   border: solid 1px blue;
   position: relative
}

div::before {
  content: url('data:image/svg+xml;utf8,<svg version="1.1" id="" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" xmlns:xlink="http://www.w3.org/1999/xlink"  style="" xml:space="preserve"><path d="M150 0 L75 200 L225 200 Z" fill="red"></path></svg>');
  display: block;
    -webkit-filter: grayscale(100);
    filter: grayscale(100);
}

  
div:hover:before{
    -webkit-filter: grayscale(0);
    filter: grayscale(0);
}   
<div></div>
 类似资料:
  • 问题内容: 我想使用CSS 更改标签的颜色。我在下面尝试过的代码似乎不起作用: 问题答案: 我想如果您打算更改tag 产生的线条的颜色,则应该使用而不是。 虽然,在注释中已指出,如果您更改线条的大小,边框仍将与样式中指定的宽度一样,并且线条将被填充为默认颜色(大多数情况下这不是理想的效果)时间)。因此,在这种情况下,您似乎还需要指定(如@Ibu在其答案中建议的那样)。 HTML 5 Boilerp

  • 问题内容: 我想使用这项技术并更改svg颜色,但到目前为止我还没有做到这一点。我把它放在css中,但是无论如何我的图像总是黑色的。我的代码: 问题答案: 您不能以这种方式更改图像的颜色。如果将SVG加载为图像,则无法在浏览器中使用CSS或Javascript更改其显示方式。 如果你想改变你的SVG图像,你必须用它来装载,或使用在线。 如果要使用页面中的技术,则需要Modernizr库,您可以在其中

  • 问题内容: 以下是我的HTML 我想要做的是,当我将标签悬停时,我想仅使用CSS 来更改标签的颜色。我该如何实现? PS ----- 已编辑 ---------- 如果我将div周围包裹一个ID,该怎么办? 这有帮助吗? 问题答案: 没有CSS选择器可以做到这一点([甚至在CSS3中)。CSS中的元素永远不会意识到其父元素,因此您无法这样做(例如)。他们也不知道自己的兄弟姐妹(在大多数情况下),所

  • 此外,我尝试以以下方式使用对象标记: 但是,同样,如果我用CSS指令或将类应用到对象标记,则不会发生任何变化。有什么想法可以实现我想要的吗?

  • 我有一个固定的头与一个标志和一些文本。这些元素当前为白色。(背景颜色:#fff) 当我向下滚动时,各部分以不同的背景颜色显示: 我想改变标题中元素的颜色,这取决于标题当前在上面的部分。我可以做混合模式(白色/黑色),但我也有绿色部分。我也可以这样做,检查什么部分是在视图中,然后改变颜色。 但是我想知道是否有某种方法可以通过JavaScript获得当前在header下面的元素(在div下面的div)

  • 问题内容: 我正在构建React组件。正如React背后的一位专家在本次精彩的演讲中所建议的那样,我已经在组件中添加了CSS内联。我一直在努力寻找一种方法来内联添加CSS伪类,就像在演示文稿中名为“ :: after”的幻灯片上一样。不幸的是,我不仅需要添加该属性,还需要添加该属性。幻灯片显示了如何通过添加内容,但是如何添加其他属性? 问题答案: 得到了@Vjeux在React团队的回复: 普通H