SVG实现中十进制精度的正式限制与基线规范问询
关于SVG极端viewBox尺寸下渲染与交互一致性的问题
我测试了一个带stroke-dasharray的基础SVG示例(描边圆形填充方形视口,生成四分之一切片),在不同viewBox尺寸下的表现显示,各实现间存在显著渲染和行为差异。虽然浮点精度损失是预期内的问题,但渲染效果和交互hit-box计算出错的时机远早于预期。我多次查阅SVG规范,未找到关于“不损失精度的可缩放性基线合规范围”的指南或非规范性说明。
我理解规范可能刻意模糊该问题,将其归为“视情况而定”的范畴,但仍提出以下技术问询:
- 是否曾存在(或讨论过)相关指南,规定实现者必须保证互操作性的尺寸范围,以及允许出现差异的阈值?
- 若存在,该指南的查阅渠道是什么?
- 若不存在,向SVG工作组提出该议题是否合理?
- 针对极端尺寸值向各实现厂商提交bug报告是否有意义?
测试探索与结果
以viewBox尺寸为1的极简SVG为例:
CSS样式
svg { max-height: 80vmin; }
SVG代码
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-.5,-.5 1 1"> <circle r=".25" stroke-width=".5" pathlength="4" stroke-dasharray="1,1" stroke="currentcolor" fill="none"></circle> </svg>
该示例预期应呈现四分之一切片的正确效果(部分实现可达到),而非异常渲染结果。将所有长度和坐标值按指数级放大或缩小,理论上应得到一致结果,但实际测试显示:当viewBox尺寸超过1e+5(10000×10000)或低于1e-2(0.01×0.01)时,至少有一个SVG实现会出现渲染或hit-box计算错误。完整测试包含不同SVG引擎在极端尺寸下的渲染与hit-box差异截图。
内容的提问来源于stack exchange,提问作者myf
相关产品推荐
相关产品推荐

