【发布时间】:2020-12-13 06:24:10
【问题描述】:
在 Chrome 和其他基于 Blink/webkit 的浏览器中,SVG 背景出现模糊:
Chrome 中部分 SVG 的屏幕截图:
Firefox 中部分 SVG 的屏幕截图:
只有在显示带有“background-repeat:true”和“background-size:contain”CSS 值的 SVG 时才会发生这种情况。我们希望尽可能多地重复 SVG 背景高度,因为页面高度是动态的,并且拉伸矢量图像看起来很糟糕。
SVG 在下面示例页面的 CSS 中内联显示,但是当我链接到外部 SVG 图像时,问题以同样的方式发生。
这是一个显示此行为的测试页面: https://august-13-2020-test-canvas.bubbleapps.io/version-test/pagemaker-test-original-2 (使用“用户名”和“密码”登录,我们需要把这个认证放在这里)。
带有正确显示(清晰/平滑边缘)SVG 的测试页面在这里:https://august-13-2020-test-canvas.bubbleapps.io/version-test/pagemaker-test-online-1
边缘清晰/平滑的版本以完全相同的方式显示 - 唯一的区别是 SVG 的内容。
这里是模糊页面的背景 SVG 链接:https://dd7tel2830j4w.cloudfront.net/d44/f1588704991659x396570736162959360/background.svg
我从这个页面测试的所有 SVG 都有清晰的边缘:https://www.svgbackgrounds.com/#flat-mountains(右下角是上面链接中使用的那个)
在尝试解决此问题或在 SVG 代码中确定其原因的过程中,我对 SVG 进行了相当多的编辑,并尝试了以下操作:
- 将所有 SVG 点值(路径的 d 属性)转换为整数
- 将“PreserveAspectRatio”添加到 SVG 的开始标记
- 从 SVG 的开头声明中删除高度和宽度
- 从 SVG 中移除“线性渐变”并将其替换为静态颜色
- 将 SVG 形状的大小加倍以查看模糊度是否会随着初始宽度和高度的增大而降低
- 将“crispEdges”属性添加到 SVG 路径
- 优化 SVG(使用 SVGomg)
此外,我尝试稍微更改 CSS,但无法正常工作。
我对解决方法的一些想法如下:
- 使用多个背景图像重复显示 SVG(在背景中显示 5-10 次,模仿 background-repeat:repeat-y 效果,但包含多个背景图像)
- 使用JS在页面上绘制内联SVG(这个bug不会发生的地方),创建一个与我们组动态高度完全相同的HTML(可以随时更改而不触发JS事件)并以某种方式在该组内重复 SVG。
- 请设计师提供不同的 SVG 背景,并希望不再出现模糊问题。
这里的任何帮助都将不胜感激,我正在努力解决这个问题,在咨询了 CodeMentor.io 上的几位开发人员后,我无法解决这个问题。
【问题讨论】:
标签: html css google-chrome svg vector-graphics