html - chrome的嵌入式svg渲染问题
问题描述
当我在 chrome 中的 SVG 中嵌入 SVG 时,会出现一些问题。其中一个问题是我无法在子 SVG 上应用“过滤器:阴影”,尽管这在 Firefox 上运行良好。当我将它应用于父 SVG 时,它适用于 chrome。
在 SVG 中嵌入 SVG 是一个坏习惯,还是我的代码有问题?
body {
background: linear-gradient(
rgb(155, 246, 255, 0.7),
rgba(189, 178, 255, 0.9)
);
background-attachment: fixed;
}
.test1:hover {
cursor: pointer;
filter: drop-shadow(-3px 1px 24px rgba(40, 245, 4, 1));
-webkit-filter: drop-shadow(-3px 1px 24px rgba(40, 245, 4, 1));
-moz-filter: drop-shadow(-3px 1px 24px rgba(40, 245, 4, 1));
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<div>
<svg height="200" viewBox="0 0 50 50">
<g>
<svg
class="test1"
height="200"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
>
<rect class="7-1" x="0" y="0" height="100" width="100" />
</svg>
</g>
</svg>
</div>
</body>
</html>
在这段代码中,如果我将类“test1”应用于父 SVG,它将正常工作,否则,它在 chrome 上根本不起作用,但在 Firefox 上工作
非常感谢!<3
解决方案
并不是 CSS 过滤器不适用于嵌套的 SVG 元素,它们目前只能在最外层的元素上跨浏览器工作,并且对于任何子<svg>
元素都失败。只有 Firefox 实现了过滤器规范的那一部分。
您可以在浏览器兼容性部分的Mozilla 开发人员网络页面上找到该信息。由于某种原因,caniuse.com上缺少该信息。在使用它们之前检查浏览器是否实现功能总是一个好主意,但一个可悲的事实是,没有跨浏览器的 SVG 功能的严格文档。
SVG drop shadow using css3中描述了如何对 SVG 内容应用投影。但同样,请仔细检查是否支持功能。
使用嵌套<svg>
并不是一个“坏习惯”,但您应该只期望1.1 规范中定义的用法有很好的支持。
推荐阅读
- python - psycopg2.copy_expert - 只插入新数据
- spring-boot - Hibernate 自定义序列生成器 - 表不存在
- php - SilverStripe 功能测试是否在发出 post 请求后将数据保存在会话中
- javascript - 向fluxpoint api发送请求时出错
- swift - flatMap 中的字典转换不起作用
- c++ - Win32 DLL 不返回正确的数据
- javascript - 如何触发对数据更改的反应渲染
- python - tkinter 进入 SQL 查询
- karate - 空手道 - 内联数组匹配失败
- laravel - 允许 Cloudflare 从 Laravel 缓存我的索引页面