【发布时间】:2019-05-08 01:45:08
【问题描述】:
我需要做一个圆形菜单,其中包含 未知/可变 数量的元素(我强调这一点是因为对 3 或 4 个元素的静态解决方案不感兴趣)。
我决定使用 SVG。当我使用服务器端代码构建 HTML/SVG 时,有一个 SVG 路径,我可以使用 startOffset = "@(100/items.Count)%" 将文本放在该路径上
.container { width: 300px; }
svg { border: 1px solid; }
a:hover { fill: red; }
<div class="container">
<svg viewBox="0 0 200 200">
<defs>
<desc>The path used for the text</desc>
<path id="c" d="M150,100 A50,50 0 1 1 150,99.99z" />
</defs>
<use xlink:href="#c" stroke="#d9d9d9" fill="none"/>
<text font-size="20" >
<textPath xlink:href="#c" startOffset="33%">
<a xlink:href="https://stackoverflow.com">Our products</a>
</textPath>
</text>
<text font-size="20" text-anchor="middle">
<textPath xlink:href="#c" startOffset="66%">
<a xlink:href="https://stackoverflow.com">Services</a>
</textPath>
</text>
<text font-size="20" text-anchor="end">
<textPath xlink:href="#c" startOffset="99%">
<a xlink:href="https://stackoverflow.com">Achievements</a>
</textPath>
</text>
</svg>
</div>
我的问题是如何使文本对用户可读(不叠加、倒置、难以阅读)? 具体的问题是如何使文本水平,将其位置/“基点”保持在圆的路径上? 之后我会使用类似
.textbox {
max-width: 200px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
PS。我更感兴趣的是 SVG/CSS/HTML 简单的解决方案,而不是 JS 复杂的绘图库。
【问题讨论】:
-
谁的投票范围太广了?