firefox - SVG 过滤器在 Firefox 上导致意外裁剪
问题描述
我正在使用<pattern>
带有<image>
引用 a的 svg <filter>
。我的图像将按比例缩小以适合使用preserveAspectRatio
. 它在 Chrome 和 Edge 上按预期工作,但在 Firefox 上,该<filter>
标签会导致图像被意外裁剪。我尝试了许多不同的定义坐标的方法来试图避免这个问题,但到目前为止还没有找到解决方案。
奇怪的是,我刚刚意识到,如果我在 Windows 显示设置中将屏幕缩放比例从 100% 设置为 150%,问题就会消失,并且 firefox 显示与 Chrome 相同。
所以,问题:
- 这是 Firefox 中的错误吗?
- 有没有办法阻止它发生(我猜,强制扩展过滤器边界框,除非我试图以任何方式做到这一点)?
这是一个演示问题的代码笔:
https://codepen.io/foobarbecue/pen/xvpOBm
Chrome 上的结果:
火狐上的结果:
代码:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<svg height="500" width="500">
<filter id="blur">
<feGaussianBlur stdDeviation="0"></feGaussianBlur>
</filter>
<pattern id="imgpattern" x="0" y="0" width="1" height="1"
viewBox="0 0 1024 576" preserveAspectRatio="xMidYMid slice" >
<image width="1024" height="576" xlink:href="http://i.stack.imgur.com/4SrQ8.jpg" filter="url(#blur)"/>
</pattern>
<path class="hexTile" d="M75 -1 h150 l75 129.90 l-75 129.90 h-150 l-75 -129.9 Z"
fill=url("#imgpattern")
stroke="black"></path>
</svg>
</body>
</html>
解决方案
这是一个 Firefox 错误 - 但似乎有一种解决方法。如果您摆脱模式内的 preserveAspectRatio/viewBox 而是将 patternContentUnits 设置为 objectBoundingBox,也将过滤器 stdDeviation 表示为 objectBoundingBox(尽管从技术上讲它不应该如此)并且,为模式尺寸选择魔法值 - 你可以得到一些东西在 Firefox 中工作。(当高度设置为 1.2 - 不是 1.1,不是 1.3 - 只是 1.2 时,过滤器会神奇地取消裁剪)
<svg x="0px" y="0px" height="500px" width="500px" >
<defs>
<filter id="blur" y="0%" height="100%" x="0%" width="100%">
<feGaussianBlur stdDeviation=".01"></feGaussianBlur>
</filter>
<pattern id="imgpattern" x="-.5" y="0" width="1.5" height="1.2"
patternContentUnits="objectBoundingBox">
<image width="2" height="1" xlink:href="http://i.stack.imgur.com/4SrQ8.jpg" filter="url(#blur)"/>
</pattern>
</defs>
<path class="hexTile" d="M75 0 h150 l75 129.90 l-75 129.90 h-150 l-75 -129.9 L 75 0"
fill=url("#imgpattern")
stroke="black" ></path>
</svg>
推荐阅读
- git - Git不会忽略gitignore文件中列出的文件和文件夹
- api - 当他们在一些 Open API 调用中要求“模式”时,涂鸦 API 指的是什么?
- reactjs - 无法从 mapDispatchToProps 访问属性
- python - /admin/ 'WSGIRequest' 对象的 AttributeError 没有属性 'user'
- node.js - 在 Heroku 上使用 NGINX 作为 express.js 404 的代理
- excel - 如何根据用户窗体文本框输入将光标移动到工作表中的行?
- python-3.x - nltk.download() 不会打开 GUI 来选择下载列表。它不下载数据并且光标永远闪烁
- python - 如何在 Django 中从 html 生成 word 文档?
- html - 前一个 html 元素和 flexbox 之间的空间。为什么?
- c# - 是否有任何已知的技术来检查存储在数据库中的密码强度?