css - 在 SVG 路径元素上居中文本的最佳方法是什么?
问题描述
我最近发现了s 的alignment-baseline
andtext-anchor
样式,SVG Text Element
但由于某种原因,这些属性似乎不适用于SVG Path Element
s。
我希望在下面的示例中以某种方式将测试文本居中,而不使用 javascript 来设置上述文本元素的“x”和“y”值。
<svg width="600" height="600">
<!-- Ellipse -->
<g transform="translate(120,140)">
<ellipse cx="0" cy="0" rx="100" ry="50" stroke="#aaa" stroke-width="2" fill="#fff"></ellipse>
<text x="0" y="0" alignment-baseline="middle" font-size="12" stroke-width="0" stroke="#000" text-anchor="middle">HueLink</text>
</g>
<g>
<path d="M250 250 L250 0 A250,250,0,0,1,466.50635094610965,124.99999999999997 L250 250 Z" fill="#ddd" stroke="#ddd"></path>
<text style="font-size: 24px;" text-anchor="middle" alignment-baseline="middle" href="#p1">
test text
</text>
</g>
</svg>
[编辑]:感谢@Gerarod Furtado 的澄清。我的目标是将文本集中在形状上,而不是像@chrwahl 的答案那样让文本遵循路径。
总之,如果没有 javascript,在 svg 路径上居中文本似乎是不可能的。
解决方案
在这里,我有一个示例,<textPath>
其中text-anchor
位于中间,dominant-baseline
位于中间,并且startOffset
位于路径的 50% 处。这会将文本放在中间。
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" width="300" height="300">
<path id="p1" fill="none" stroke="red"
d="M 10,50 C 40,40 50,30 60,30 S 70,40 90,50" />
<text font-size="6">
<textPath startOffset="50%" text-anchor="middle"
dominant-baseline="middle" href="#p1">Text on path</textPath>
</text>
</svg>
另一种方法是使用pathLength
(here 2) on <path>
,然后根据此调整startOffset
(here 1) on <textPath>
。
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" width="300" height="300">
<path id="p1" fill="none" stroke="red" pathLength="2"
d="M 10,50 C 40,40 50,30 60,30 S 70,40 90,50" />
<text font-size="6">
<textPath startOffset="1" text-anchor="middle"
dominant-baseline="middle" href="#p1">Text on path</textPath>
</text>
</svg>
推荐阅读
- math - 在具有原点的点上应用旋转矩阵失败
- jquery - jQuery - IF 目标元素的 id 就像(匹配) - 递归错误太多
- reactjs - 如何在 React 中动态创建 Hook?
- asp.net - ajax 调用后会话超时时重定向到登录
- matlab - 如何在Matlab中绘制加权凸包
- python-3.x - 如何自动生成请求调用的 url 列表?
- django - django 列出客户的所有债务
- javascript - Javascript - 每月更换图片
- java - 我面临 RecyclerView 没有附加适配器的问题,即使在将适配器设置为布局管理器之后也是如此。我一个
- c# - 将 JSON 转换为 C# 复杂对象