假设我有 SVG 文件:
<svg width="1024" height="768" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<text x='20' y='60' style="font-size: 60px">b</text>
<text x='100' y='60' style="font-size: 60px">a</text>
</svg>
我想以某种方式对齐 a
和 b
的顶部。实际上,我希望我的定位是根据 roofline
而不是 baseline
!
根据 SVG 规范,alignment-baseline
仅适用于 <tspan>
、<textPath>
、<tref>
和 <altGlyph>
。我的理解是它是用来抵消它们上方的 <text>
对象的。我认为您正在寻找的是 dominant-baseline
。
dominant-baseline
的可能值为:
汽车 |使用脚本 |不变|重置大小 |表意|字母 |挂|数学 |中央|中间 |边缘后文字 |边缘前的文字 |继承
检查 the W3C recommendation for the dominant-baseline property 以了解有关每个可能值的更多信息。
alignment-baseline
属性是您要查找的内容,它可以采用以下值
auto | baseline | before-edge | text-before-edge |
middle | central | after-edge | text-after-edge |
ideographic | alphabetic | hanging | mathematical |
inherit
来自 w3c 的描述
此属性指定对象如何与其父对象对齐。此属性指定此元素的哪个基线与父元素的相应基线对齐。例如,这允许罗马文本中的字母基线在字体大小更改时保持对齐。它默认为与对齐基线属性的计算值同名的基线。也就是说,“表意”对齐点在块行进方向上的位置是“表意”基线在被对齐对象的基线表中的位置。
不幸的是,尽管这是实现您想要的结果的“正确”方式,但 Firefox 并没有为 SVG 文本模块 ('SVG in Firefox' MDN Documentation) 实现很多表示属性
alignment-baseline: central
not 对 FireFox 中的 SVG 起作用,这似乎是设计使然。 dominant-baseline: central
适用于我迄今为止尝试过的所有浏览器,如以下答案所示:stackoverflow.com/a/15997503/1450294
attr("主要基线", "中央")
dominant-baseline
值是 hanging
。
如果您在 IE 中对此进行测试,则不支持dominant-baseline 和alignment-baseline。
在 IE 中使文本居中的最有效方法是在“dy”中使用类似这样的内容:
<text font-size="ANY SIZE" text-anchor="middle" "dy"="-.4em"> Ya Text </text>
负值将其向上移动,dy 的正值将其向下移动。我发现使用 -.4em 对我来说似乎比 -.5em 更垂直居中,但你会对此做出判断。
查看 SVG Recommendation 后,我了解到基线属性旨在相对于其他文本定位文本,尤其是在混合不同字体和/或语言时。如果您想发布文本以使其顶部位于 y
,那么您需要使用 dy = "y + the height of your text"
。
"<list-of-lengths>"
选项(允许按字符操作)
不定期副业成功案例分享
element.hasAttribute('dominant-baseline')
,如果它返回 false,则应用dy=-0.4em
,如本答案 stackoverflow.com/a/29089222/2296470 中所述