使用CSS样式SVG圈

Seb*_*ian 20 css geometry svg hover

所以我有我的SVG圈.

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
   <circle cx="168" cy="179" r="59" fill="white" />
</svg>
Run Code Online (Sandbox Code Playgroud)

当一个人盘旋时,我希望它是120%.我尝试了宽度,高度和中风.没有找到任何解决方案,以便在悬停时使圆圈更大.有什么建议?

circle:hover
  {
    stroke-width:10px;
  }

circle:hover
  {
    height: 120%;
    width: 120%;
  }
Run Code Online (Sandbox Code Playgroud)

Pet*_*dge 28

根据SVG 1.1规范,您无法r使用CSS https://www.w3.org/TR/SVG/styling.html#SVGStylingProperties设置 SVG圈的属性.但你可以这样做:

<circle cx="168" cy="179" r="59"
        fill="white" stroke="black"
        onmouseover="evt.target.setAttribute('r', '72');"
        onmouseout="evt.target.setAttribute('r', '59');"/>
Run Code Online (Sandbox Code Playgroud)

在某些现代浏览器部分支持的SVG 2中,您可以r使用CSS设置圆的属性样式.https://www.w3.org/TR/SVG2/styling.html#PresentationAttributes

  • `onmouseover ="this.setAttribute('r','72');`也应该正常工作 (4认同)
  • 2016 年的正确答案似乎是 Anshul 的答案 (2认同)

int*_*ere 28

想只使用CSS?用line而不是circle.

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <style>
    .circle {
        stroke-width: 59;
        stroke-linecap: round;
    }
    .circle:hover {
        stroke-width: 71;
    }
    </style>
    <line x1="168" y1="179" x2="168" y2="179" stroke="white" class="circle" />
</svg>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/rLk7rd8b/

  • +1好答案!我在`&lt;svg&gt;`标签中添加了`width =“ 300” height =“ 300”`以能够看到任何东西。当然,您不能以这种方式绘制圆的轮廓。 (2认同)
  • 如何在 SVG 之前绘制圆形:绘制一个宽度为 0、高度为 0 的 div,边框长度为 r,边框半径为 r。SVG 来救援。现在我们画一条长度为0的线... (2认同)

Ans*_*hul 18

不确定此人是否仍在寻找答案,但对于其他任何人来说,可以通过将圆的变换原点设置为其中心来在CSS(3)中完成.

circle {
  transform-origin: 168px 179px;
  transform: scale(1,1);
Run Code Online (Sandbox Code Playgroud)

}

circle:hover
{
 stroke-width:10px;
 transform:scale(1.2,1.2);
}
Run Code Online (Sandbox Code Playgroud)

CSS的警告现在与维度相结合,我们必须知道SVG中圆的确切中心.


Nic*_*aro 6

单击“运行代码片段”进行测试:

.myCircle:hover {
  r: 20
}

.myCircle {
  transition: ease 1s
}
Run Code Online (Sandbox Code Playgroud)
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
       <circle class="myCircle" cx="10" cy="10" r="5" fill="black" />
    </svg>
Run Code Online (Sandbox Code Playgroud)

我偶然发现了这个页面,但想添加我自己认为最简单的答案。显然它在 Firefox 中不起作用,这就是为什么有人投了反对票。

第 1 步:向您的圈子添加一个班级(例如“myCircle”)

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
   <circle class="myCircle" cx="168" cy="179" r="59" fill="white" />
</svg>
Run Code Online (Sandbox Code Playgroud)

第 2 步:在 CSS 文件中,您可以使用“r”作为 CSS 属性!

.myCircle:hover {
  r: 100;
}
Run Code Online (Sandbox Code Playgroud)

第 3 步(可选):随意添加过渡以使半径平滑增长:

.myCircle {
    transition: all 1s;
}
Run Code Online (Sandbox Code Playgroud)

  • 最新的 Firefox (74) 不支持通过 CSS 设置 `r` 属性的样式。说“无效的属性值”。 (3认同)
  • 我在 Mac 上使用 Chrome 版本 99.0.4844.83(官方版本)(x86_64),上面的代码片段可以正常工作。 (2认同)

Jon*_*ell 5

正如Phillip在上面的评论中所建议的,您可以使用CSS 3转换来完成此操作.

  circle:hover {
    -webkit-transform: scale(x, y);
  }
Run Code Online (Sandbox Code Playgroud)

("-webkit"前缀仅适用于Chrome)

请参阅https://developer.mozilla.org/en-US/docs/Web/CSS/transform

这里有一个CSS转换的工作示例:http://jsbin.com/sozewiso/2