我的SVG形状上需要3D边框。我的svg是在运行时创建的(使用javascript),并且具有灵活的宽度/高度(没关系)。
当然,它们的形状比下面的示例更复杂。这只是我能想到的最简单的示例,向您展示我正在努力实现的目标。

<div class="sample"></div>


CSS:

.sample {
  width:300px;
  height:150px;
  background-color: red;
  border-radius:20px;
  border: solid 15px green;
  border-top-color: blue;
  border-left-color: blue;
}


不想在此处发布图片,并且没有可用的svg代码,因此这里是用来显示其外观的小提琴:css example

我所有的形状都只包含垂直和水平线(+边界半径)

最佳答案

最重要的是要获得的精确度。如果我们只讨论一个或两个像素的笔划宽度,那就没关系了,但是在下面的示例中,可以看到细节上的差异。

边框的半径并非在所有角上都匹配,并且在正确的位置不会发生颜色变化。填充区域的角不圆角;为此,您必须真正绘制弧线段。

如果您有多个不重叠的路径,则可以将它们分组到一个<g>元素中,然后在<use>元素中仅引用这一组。



path {
    fill: blue;
}
use.upper {
    stroke: red;
    stroke-width: 40;
    stroke-linejoin: round;
}
use.lower {
    stroke: green;
    stroke-width: 20;
    stroke-linejoin: round;
}

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
     width="300" height="250">
  <use class="upper" xlink:href="#path1" />
  <use class="lower" xlink:href="#path1" x="10" y="10" />
  <path id="path1" d="M60,60 H160 V120 H240 V200 H60 Z" />
</svg>





对于与精度有关的任何事情,您可能需要计算要在Javascript代码中实现的形式。

filter effects可能很诱人,但同样,多色边框效果将缺乏精度。对于模糊的阴影效果,它们是一个不错的选择,但对于清晰定义的边框,其性能比使用<use>元素的此技术要差。

关于css - 有没有简单的方法来设置svg路径元素(如带有3d边框的div)的样式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50125162/

10-17 02:41