垂直对齐 SVG 文本条纹

Posted

技术标签:

【中文标题】垂直对齐 SVG 文本条纹【英文标题】:Vertically align SVG text stripes 【发布时间】:2020-09-26 20:57:51 【问题描述】:

我可以使用什么 SVG 技术来完美地垂直对齐文本条纹?这个 SVG 使用 rect 制作水平条纹,并尝试在每个条纹上分层 text 以完美的垂直对齐,但它看起来有点偏离。我正在寻找一种适用于不同字体的跨浏览器技术。

<svg viewbox="0 0 300 300"  style="font: 1em/1 sans-serif">
  <title>flavors</title>
  <rect   x="0" y="0" fill="lime" />
  <rect   x="0" y="100" fill="yellow" />
  <rect   x="0" y="200" fill="plum" />
  <text alignment-baseline="middle" font-size="50" x="10" y="50" fill="black">APPLE</text>
  <text alignment-baseline="middle" font-size="50" x="10" y="150" fill="black">BANANA</text>
  <text alignment-baseline="middle" font-size="50" x="10" y="250" fill="black">CHERRY</text>
</svg>

【问题讨论】:

请查看alignement-baseline 的浏览器兼容性,而不是使用alignment-baseline,您可以使用dy 将文本的位置更改为您需要的位置:&lt;text font-size="50" x="10" y="50" dy=".25em" &gt;APPLE&lt;/text&gt; 谢谢ydy 可以调整它,但数量似乎因字体而异。我可以说支持alignement-baseline,因为更改值会更改对齐方式。 MDN 说? 表示未报告。他们将其定义链接到 SVG 1.1 感谢您也添加了代码 sn-p runner :) 其实dy应该是字体大小的1/4左右 使用exdy=".2ex" 似乎是迄今为止最好的方式 【参考方案1】:

要获得可靠的结果,您需要指定要使用的确切字体。目前你只是依赖默认字体。不管那可能是什么。默认字体取决于浏览器、浏览器设置和/或操作系统。

还请记住,并非每种字体都包含alignment-baseline 使用的数据。这就是为什么它建议您不要依赖alignment-baseline,除非您(a)知道您使用的确切字体支持它,并且(b)可能使用的每个浏览器都支持alignment-baseline和(c)无处不在,显示 SVG,有该字体可用。

替代dy 技术只要求您知道该字体可用。

例如,如果您知道 Arial 将始终可用,您可以使用 dy0.35em,这已知是 Arial 的正确值。由于它使用em 单位,它适用于任何字体大小。

<svg viewbox="0 0 300 300"  style="font-family: Arial">
  <title>flavors</title>
  <rect   x="0" y="0" fill="lime" />
  <rect   x="0" y="100" fill="yellow" />
  <rect   x="0" y="200" fill="plum" />
  <text font-size="50" x="10" y="50" fill="black" dy="0.35em">APPLE</text>
  <text font-size="50" x="10" y="150" fill="black" dy="0.35em">BANANA</text>
  <text font-size="50" x="10" y="250" fill="black" dy="0.35em">CHERRY</text>
</svg>

【讨论】:

以上是关于垂直对齐 SVG 文本条纹的主要内容,如果未能解决你的问题,请参考以下文章

CSS中SVG的垂直对齐

与显示垂直对齐:inline-flex;结合SVG和文本[重复]

在 SVG 中将文本行对齐到中心

对齐 SVG 中的文本

垂直文本对齐多行

获取仅包含文本条目的组合框的选定文本的最简单方法是啥?