SVG:如何圆角和矩形角?

Cra*_*lot 9 html css svg

是否可以在 SVG 中对矩形进行圆化处理,同时确保笔划遵循角的圆度?下面的代码不起作用。

无中风:

stroke-width="0px"

<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
    <rect width="100%" height="100%" stroke="red" stroke-width="0px" rx="10px" ry="10px" stroke-linejoin="round" />
</svg>
Run Code Online (Sandbox Code Playgroud)

有中风:

stroke-width="10px"

<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
    <rect width="100%" height="100%" stroke="red" stroke-width="10px" rx="10px" ry="10px" stroke-linejoin="round" />
</svg>
Run Code Online (Sandbox Code Playgroud)

笔画似乎遵循原来的尖角而不是圆角。

Ale*_*_TT 12

<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
    <rect width="100%" height="100%" stroke="red" stroke-width="10px" rx="10px" ry="10px" stroke-linejoin="round" />
</svg>
Run Code Online (Sandbox Code Playgroud)

宽字符串延伸到画布 SVG 的 svg 边框之外。因此,字符串被部分裁剪。

在此输入图像描述

您必须减小矩形的大小,以便该线可见,并将矩形的左上角向右和向下移动x="5",然后y="5"

<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
    <rect x="5" y="5" width="90" height="90" stroke="red" stroke-width="10px" rx="10px" ry="10px" stroke-linejoin="round" />
</svg>
Run Code Online (Sandbox Code Playgroud)

更新

添加了视图框。矩形xy的坐标增加,SVG 包装在容器中,并且可以作为单独的块嵌入到 HTML 页面中。自适应应用

.container {
width:30%;
height:30%
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
<svg  viewBox="0 0 110 110" xmlns="http://www.w3.org/2000/svg">
    <rect x="10" y="10" width="90" height="90" stroke="red" stroke-width="10px" rx="10px" ry="10px" stroke-linejoin="round" />
</svg>
</div>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

从图中可以看到,一个宽笔画的正方形完全位于SVG画布内部

  • 你完全回答了这个问题,但我认为OP错过了一些细节,因为我很确定这个问题是由于他的旧问题所面临的问题而被问到的:/sf/ask/4114920561/,我在其中建议让他转向 SVG,因为 CSS 解决方案有点老套,这就是为什么我认为响应部分(这里没有明确询问)很重要,这就是为什么他使用 100% 的高度/宽度。我添加了一个答案,因为我注意到 firefox 修复了 calc() 的问题,所以它应该是一个很好的解决方案(不知道其他浏览器)[顺便说一句,谢谢你的赞美] (2认同)

Kin*_*one 0

<svg width="400" height="180">
    <rect x="50" y="20" rx="20" ry="20" width="150" height="150"
          style="fill:red;stroke:black;stroke-width:5;opacity:0.5" />
</svg>
Run Code Online (Sandbox Code Playgroud)