当前位置: 首页 > 面试题库 >

为什么CSS过滤器不适用于Chrome中的SVG元素?

韩弘壮
2023-03-14
问题内容

据我了解,CSS过滤器应该可以在Chrome中的任何地方使用,但是我无法使它们适用于SVG元素。

所有 大多数浏览器中 可以正常工作:

div{ filter:sepia(50%) }

但是,这在Chrome中不起作用:

rect{ filter:sepia(50%) }

这是一个例子:

div{

    width:100px;

    height:50px;

    background-color:red;

}

rect{

    fill:red;

}

rect:hover, div:hover{

    -webkit-filter:sepia(50%);

    -moz-filter:sepia(50%);

    filter:sepia(50%);

}


<h2>SVG</h2>

<svg width="100" height="50">

    <rect x="0" y="0" width="100" height="50"/>

</svg>





<h2>DIV</h2>

<div></div>

…这是一个小提琴:html" target="_blank">https :
//jsfiddle.net/LtffLagn/2/


问题答案:

所有归功于@Robert Longson,他给出了答案: CSS过滤器无法应用于Chrome中的SVG元素。
但是,可以通过一些额外的工作将它们重新实现为SVG过滤器。我最终得到的是:

rect{

  fill:red;

}

rect:hover{

    filter:url("#sepia");

    filter:sepia(100%);

}


    <svg width="100" height="50">

      <defs>

        <filter id="sepia">

          <feColorMatrix type='matrix' values='0.30 0.30 0.30 0.0 0

                                               0.25 0.25 0.25 0.0 0

                                               0.20 0.20 0.20 0.0 0

                                               0.00 0.00 0.00 1 0'/>

        </filter>

      </defs>

      <rect x="0" y="0" width="100" height="50"/>

    </svg>

Firefox现在将使用CSS过滤器,而Chrome将使用SVG过滤器。当然,如果您设法使SVG过滤器按您希望的方式工作,则可以坚持下去。对我来说,我从未设法获得想要的效果,所以我让Firefox使用外观更好的CSS过滤器。

Chrome /
ium中SVG元素上CSS过滤器的Bug跟踪器:https
://bugs.chromium.org/p/chromium/issues/detail
? id
=
109224



 类似资料:
  • 问题内容: 假设这样: 我为什么看不到任何东西? 问题答案: 当您将标记字符串传递到时,会使用(或其他适用于特殊情况的容器)容器上的浏览器属性将标记字符串解析为HTML 。无法解析SVG或其他非HTML内容,即使可以,也无法分辨出该内容应该在SVG命名空间中。 在SVGElement上不可用- 它仅是HTMLElement的属性。当前没有属性或其他方法(*)将内容解析为SVGElement。因此,

  • 问题内容: 以下代码可在Google Chrome beta和IE 7中运行。但是,Firefox似乎对此有问题。我怀疑这是我的CSS文件如何包含的问题,因为我知道Firefox对跨域导入不太友好。 但这仅仅是静态HTML,而没有跨域问题。 在我的landing-page.html上,我像这样进行CSS导入: 在main.css中,我还有另一个导入,例如: 在type.css中,我有以下声明: 我

  • 我试图理解Hibernate过滤器,我认为即使查询不是从过滤的实体开始,也可以应用过滤器,如果我只是加入它。 我的实体: 过滤器通过拦截器启用,为了安全起见,从数据库中获取参数列表。 当我执行这样的查询时: 过滤器被应用了。但是我也希望当我的查询从模块部分开始时应用过滤器: 在上述查询中,没有应用筛选器。 ModuleSect实体中的学术类为null,但我也有其他实体不为空,其中上述情况不起作用。

  • 我在更新链式lodash操作时遇到了这个问题,我不明白为什么会有不同的效果 我把范围缩小到用链子把一根forEach拴在一个lodash包装纸上 https://jsbin.com/wahokezeja/edit?js,控制台 这将抛出一个错误: “TypeError:\(…)。forEach(…)。groupBy不是一个函数 但是,当使用贴图链接时,效果很好 https://jsbin.com/

  • 为什么JSF2/Facelet的ui:repeat不接受java。util。迭代器的值?可以在迭代器后面隐藏如此多的实现和内存节约,因为长度不需要知道,所以拥有它是非常有用的。但是相反,我需要将迭代器转换为列表,并抛弃所有优点,以便ui:repeat。 可能有阶段、时间或可序列化的原因,但我对可用文档的浏览并没有给出这些原因。我们还没有使这一不可能成为可能的科学吗?

  • 从本章开始,我们学习SVG的一些高级功能,包括过滤器(Filter)、渐变(Gradient)。SVG还支持动画特性,但我们推荐使用CSS3的动画,所以这里不做讲解。 SVG 过滤器元素 SVG过滤器(也称为滤镜)用来给SVG图形添加特效,和PS软件中的滤镜效果类似。SVG中可用的过滤器元素包括: <feBlend> - 图片混合 <feColorMatrix> - 颜色变换 <feCompone