你能创建一个真正的圆形SVG按钮吗?

时间:2016-03-25 21:17:47

标签: button svg hover geometry viewbox

我已经在这几天了,在这个问题上找不到任何支持。

所以,我正在为我的个人网站创建一个主页面,其中包含不同大小的圆形按钮。最初我使用 border-radius属性创建了圆圈(工作正常),但现在我正在尝试升级到 SVG形状。我发现的是,任何SVG元素周围总是有一个看不见的方框(我认为 viewbox )。这意味着我可以单击按钮而光标实际上不在按钮上(即视图框的角落)。如果按钮在一条线上并且尺寸相同,这不会有问题,但是它们不在一条线上而有些比其他线条大得多。

有没有办法创建一个真正的圆形SVG按钮?

3 个答案:

答案 0 :(得分:1)

此问题与您使用SVG无关,而且与您使用HTML的一切有关。

HTML默认为所有框。大部分都没有四舍五入。

您有两个可行的选项可供使用。

  1. 将border-radius与SVG结合使用。设置正确的值不会修剪SVG,它只会删除可点击的角落。
  2. 使用map。这已经存在了一段时间,因此在所有主流浏览器中都支持统一语法。
  3. 我建议#1,因为它更容易。 #2需要您了解更多信息(半径中心点)。

答案 1 :(得分:0)

你认为"视图框"实际上更像是一个画布,是一个矩形,这是正确的。 大小在第一个SVG Tag()中给出。

如果让图像仅链接到圆圈内是非常重要的,那么你应该添加一些javasript。

如何做到这一点取决于你想要添加的库(例如jquery)。

一般来说,它是这样的:

  • var x,y;是鼠标光标从SVG中间的位置(后来最简单的使用sin和cos的方法)。
  • var r;是圆的半径
  • var alpha = arctan(y / x); //指向中间的点的角度
  • var inside = Math.abs(cos(alpha))< Math.abs(x / r)&& Math.abs(sin(alpha))< Math.abs(Y / R); //如果点位于圆圈内,则为“内部”

答案 2 :(得分:0)

假设这是内联SVG,不要将鼠标悬停事件放在SVG元素上,将事件放在SVG形状上!



#what:hover {
  fill: blue;
}

<svg width="600px" height="600px" >
  <circle id="what" cx="200" cy="200" r="100" fill='red'/>
  </svg>
&#13;
&#13;
&#13;