创建具有一致笔划宽度和圆角的响应式 SVG 形状

问题描述 投票:0回答:1

我正在开发一个项目,需要创建具有响应其父容器大小的笔画的 SVG 形状。我希望这些形状始终填充其父容器的宽度和高度,并且我还希望将它们绝对定位在父容器内。此外,我需要为这些形状添加描边颜色。

我遇到的一个问题是笔划宽度似乎不一致。有时,即使我将描边宽度设置为 1px,它也会显得更粗,可能是 10px 或更多,使形状看起来扭曲。

这是我想要实现的目标的示例: 我在这里添加了 1px 描边宽度,但我认为它变得很多了。尽管我为每边添加了 1px,但顶部、底部和左、右描边宽度的大小也有所不同。另外我怎样才能向这条路径添加 5px 边框半径

body {
   padding: 100px 20px;
}


.parent-container {
    width: 100%;
    height: 400px;
    background: black;
    clip-path: polygon(
      0% 0%,
      95% 0%,
      100% 20%,
      100% 100%,
      5% 100%,
      0% 80%,
      0% 0%
    );
    position: relative;
}


.cta-stroke {
    position: absolute;
    inset: 0px;
    width: 100%;
    height: 100%;
    
}

path {
    stroke-width: 1px;
    stroke: red;
}
<!doctype html>
<html>
<head>
<title>svg shapes</title>
</head>

<body>
<div class="parent-container">
 <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" fill="none" preserveAspectRatio="none" 
  class="cta-stroke">
  <path d="M0 0  L95 0  L100 20 L100 100 L5 100 L0 80 L0 0 Z" />
 </svg>
</div>

</body>
</html>

如何实现 SVG 形状的响应能力和绝对定位,其笔划适应其父容器的大小,同时确保笔划宽度一致?另外,如何为形状添加圆角?任何帮助或指导将不胜感激。谢谢!

javascript html css svg frontend
1个回答
0
投票

这篇文章中有关响应式 SVG 主题的第 7 条提示可能会有所帮助:

默认情况下,SVG 使用视口缩放所有内容,包括

笔划 厚度。通常这效果很好,但在某些情况下 – 图表 以及作为文本外部效果应用的笔划,特别是 – 您可能希望保持笔划相同的粗细,无论什么 绘图的尺寸。这是鲜为人知的领域 vector-effect

属性,可以用作演示文稿
属性或 CSS 中。

vector-effect: non-scaling-stroke;
以下是 

MDN 文档 中此属性值的相关文本:

此值修改对象的描边方式。平时抚摸 涉及计算当前形状路径的笔划轮廓 用户坐标系并用笔画填充该轮廓 (颜色或渐变)。该值产生的视觉效果是 笔划宽度不依赖于变换 元素(包括非均匀缩放和剪切变换)和 缩放级别。

© www.soinside.com 2019 - 2024. All rights reserved.