SVG 的 text-overflow: ellipsis 为何不生效?
数据阿明
结论
示例本身与规范说明存在矛盾。它给所有 <text> 设置了 white-space: pre,而 SVG 2 的 text-overflow 说明指出,该属性不适用于预格式化文本。紧接着的示例却在这种设置下演示了 text-overflow: ellipsis。如果浏览器遵循前述规则,就不会显示省略号。
调整方式
将 white-space: pre 改为 white-space: nowrap,保留 inline-size 作为文本区域宽度,并设置 text-overflow: ellipsis:
<svg xmlns="http://www.w3.org/2000/svg"
width="300" height="150" viewBox="0 0 300 150">
<text x="50" y="50"
inline-size="100"
style="font: 25px sans-serif; white-space: nowrap; text-overflow: ellipsis;">
SVG is awesome
</text>
</svg>
inline-size="100" 定义 SVG 文本的换行区域宽度;nowrap 让文本保持单行,并产生行内溢出;ellipsis 则指定溢出时显示省略号。若仍无效果,可以在目标浏览器中检查 SVG 2 文本布局和 text-overflow 的实际支持情况。需要更可控的兼容性时,可以在 JavaScript 中测量文本宽度并截短字符串,或改用 HTML 文本布局。
SVG 的省略号只是一种视觉效果,不会写入文本对应的 DOM 内容。复制文本或通过 DOM 读取时,通常仍会得到原始字符串。
参考:SVG 2 的 text-overflow 说明及示例、MDN:SVG text-overflow
备注:内容仅供参考。
