internet-explorer - 当 SVG 前面有一个不以像素为单位大小的元素时,IE 和 Edge 中的路径边缘模糊
问题描述
我正在尝试使用 SVG 绘制一个清晰的矩形<path>
。
我有一个问题,即在 IE 和 Edge 中渲染时,形状的顶部和底部边缘有意外的抗锯齿。仅当<path>
元素前面有另一个元素的维度以不同于 的单位表示时,才会出现此问题px
。
<div>
SVG<rect>
元素不会出现问题。<path>
似乎只有 SVG受到影响。
感谢您的帮助,如何在<path>
不改变周围环境<div>
的情况下使渲染清晰?
我可以用一个简单的 SVG 对象模拟同样的问题,并且:
- 本机按钮:https ://jsfiddle.net/7btjcy18/
- 使用 REM 单位大小的字体:https ://jsfiddle.net/ptzs71ba/
以下屏幕截图显示了该问题。左侧是 Chrome,右侧是 Edge。在缩放中,您可以看到用箭头突出显示的模糊边界。
#div1 {
font-size: 1.2rem;
margin-bottom: 20px;
}
<div id="div1">REM font size</div>
<svg xmlns="http://www.w3.org/2000/svg">
<path d="M 0 0 L 300 0 L 300 100 L 0 100" />
</svg>
解决方案
该问题与 svg 处于 31.2 等坐标(不完全在像素线上)有关。我还发现了一个类似的线程。根据公认的答案,您应该设计 svg 以使其形状位于像素边界(尤其是形状的水平和垂直部分)。
每当您的形状通过像素中间时,由于 2D 渲染器使用的抗锯齿,您将获得灰色像素。
我认为不是整数值1.2rem
导致 svg 的坐标不在像素线上。我尝试使用整数值,问题在 IE 和 Edge 中消失了:
#div1 {
font-size: 2rem;
margin-bottom: 20px;
}
#div2 {
width: 300px;
height: 100px;
background: black;
margin-bottom: 20px;
}
<div id="div1">REM font size</div>
<div id="div2"></div>
<svg xmlns="http://www.w3.org/2000/svg">
<path d="M 0 0 L 300 0 L 300 100 L 0 100" />
</svg>
推荐阅读
- office-addins - Outlook 加载项:如何在每 3 秒撰写一次时验证正文消息?
- python - 尝试将套接字连接到不同网络中的服务器会引发 WinError 10060
- java - 如何从默认的中央 maven 和其他公共存储库下载 maven jar 及其依赖项?
- typescript - Vue typescript router.Push() 只是更改地址但不重新加载页面
- mysql - Mysql Mariadb递归查询
- c# - 错误 CS0246:找不到类型或命名空间名称“IWebHostEnvironment”(您是否缺少 using 指令或程序集引用?)
- java - Reactor Netty 错误 - 路由处理程序捕获不正确的上下文?
- javascript - gRPC 客户端流式传输 rpc 管道错误。(在结束错误后写入)
- sql - 将 DbContext.SaveChanges() 与“插入触发器后”一起使用
- mysql - 为什么 MySQL 在 Openshift 上关闭?