html - 如何创建具有统一笔触宽度的 SVG 多边形?
问题描述
我正在尝试创建一个 SVG 多边形,其边框围绕元素(或在本例中为笔划)。这在大多数情况下都有效,但是多边形的剪裁边缘似乎比其他边具有更厚的笔划。有没有办法确保笔划宽度在形状周围是均匀的。
左上角和右下角的笔划明显比其他边或边缘厚。
代码基本上是这样的
<svg viewbox="0 0 100 100" height="500" width="500">
<polygon points="10, 0, 100, 0, 100, 90, 90, 100, 0, 100, 0, 10" style="fill:lime;stroke:purple;stroke-width:4" />
</svg>
解决方案
笔划确实是4
单位宽度,但它被视图框剪裁了。请记住,笔画沿其路径居中,而不是与一侧对齐...
...因此,如果您有一个视图框,并且您有一条从to0 0 100 100
运行的线或路径,并且您给它一个笔划,那么只有该笔划的宽度是可见的,因为另一半将存在于和之间。(0,0)
(0,100)
7px
3.5px
x = -3.5px
x = 0
如果您增加视图框的大小和/或移动polygon
它,使其点距视图框的一侧至少4
“单位”,则完整路径变得可见:
(它是4
“单位”,而不是4px
因为 SVG 中的无单位宽度(如stroke-width: 4;
)被假定为以当前转换集的视图框为单位,如果相关的话- 所以您可能希望向stroke-width
属性添加一个显式单位以实现一致的渲染。
<svg viewbox="-5 -5 110 110" height="500" width="500">
<polygon points="10, 0, 100, 0, 100, 90, 90, 100, 0, 100, 0, 10" style="fill:lime;stroke:purple;stroke-width:4" />
</svg>
推荐阅读
- javascript - 为什么我的 Mongo DB 没有捕获超过 1 个链接?
- javascript - 我将羽毛光用于图片库,但是当我单击表单中的输入字段(非模态)时会导致错误
- javascript - 如何解析在 JSON 中作为字符串发送的 POINT 对象?
- python - 如何以有效的方式创建 2D numpy 数组的相应元素的元组
- debugging - 如何将 Graphene-Django / Graphene-Python 异常打印到控制台进行调试?
- java - 在 SQLite 中使用 DATETIME 列时如何避免 NumberFormatException?
- c++ - 为什么我在这两个分配中得到不同的输出,一个在函数中,另一个在指针的 main 中?
- html - 在发送到 sql server 之前从 html 输入元素中提取值
- sql - 一个月的最后一天/时间
- java - 仅使用一种方法与 switch 或 4 种不同方法哪个更好?