【问题标题】:"Circular" menu using SVG [duplicate]使用 SVG 的“圆形”菜单 [重复]
【发布时间】:2019-05-07 10:07:35
【问题描述】:

我想做一个带有可变(未知)数量的元素的圆形菜单,也就是说,我的链接将被放置在一个圆圈上。

我想用SVG来画圆,但是如何在圆上等距离放置项目呢?

我可以从代码开始:

.container {border: 1px solid red; background: lightblue;}
<figure>
  <figcaption>Inline, auto size</figcaption>
  <div class="container">
    <svg viewBox="0 0 10 10"><use xlink:href="#my-circle"/></svg>
    <div>one</div>
    <div>two</div>
    <div>tree</div>
  </div>
</figure>
<svg>
  <symbol id="my-circle" >
    <g fill="transparent" stroke="darkgoldenrod" stroke-width="0.1">
      <circle r="3" transform="translate(5,5)" />
    </g>
  </symbol>
</svg>

随着容器大小的调整,圆圈应该调整大小,并且项目应该移动。

有没有办法不用大量的JS?

【问题讨论】:

  • 菜单项应该如何对齐?你可以创建示例图像吗?有很多使用 CSS 的圆形菜单示例。喜欢这里 - freefrontend.com/css-menu/#circular-menu
  • 如果您想以其他方式扩展它,还有pure css 选项。
  • 问题我有一个未知(可变)数量的元素,所以我需要一种通用的方法,“重复”问题没有解决这个问题,我也不会使用复杂的动态移动元素的 JS 逻辑,我认为 SVG 可以更简单

标签: javascript html css svg


【解决方案1】:

您可以在圆形路径上使用文本:

svg{border:1px solid}
a:hover{fill:red; }
<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="50%">
            <a xlink:href="https://stackoverflow.com">stack</a>
      </textPath>
  </text>
  
  <text font-size="20" text-anchor="middle">
      <textPath xlink:href="#c" startOffset="75%">
            <a xlink:href="https://stackoverflow.com">over</a>
      </textPath>
  </text>
  
  <text font-size="20" text-anchor="end">
      <textPath xlink:href="#c" startOffset="100%">
            <a xlink:href="https://stackoverflow.com">flow</a>
      </textPath>
  </text>

</svg>

【讨论】:

  • 有没有办法让文字保持水平?
  • 我也想看看这个圈子
  • &lt;path id="c"&gt;中的&lt;defs&gt;。要查看它,您可以删除路径周围的 &lt;defs&gt;&lt;use&gt; 它。我已通过为圈子添加 &lt;use&gt; 元素来更新我的答案。
  • 我需要菜单覆盖所有圆圈,并且文本易于阅读......所以最好让它水平?
  • 非常感谢,我会再问一个问题,如何在文本锚点中制作小点并使其成为横向;)
猜你喜欢
  • 1970-01-01
  • 2019-05-08
  • 2019-02-07
  • 2019-07-08
  • 2017-08-28
  • 2014-12-20
  • 1970-01-01
  • 2019-11-12
  • 2020-09-24
相关资源
最近更新 更多