将阴影添加到svg多边形

dag*_*da1 0 css svg css3

在所附的代码段中,我有一个多边形,我需要添加一个效果使其看起来像这样:

在此处输入图片说明

我不知道如何在svg中执行此操作,如果它是html,那么我想我会使用box-shadow。

看来唯一可以解决的办法是使用过滤器,但我认为我只能在<svg/>元素上使用它,因此我在努力做到这一点。

polygon {
  fill: #5091b9;
  stroke: #4387b0;
  stroke-width: 2;
}
Run Code Online (Sandbox Code Playgroud)
<svg width="300" height="300">
  <g transform="translate(100, 100)">
    <polygon points="25.98076211353316,-14.999999999999998 25.98076211353316,14.999999999999998 1.83697019872103e-15,30 -25.98076211353316,14.999999999999998 -25.980762113533157,-15.000000000000004 -5.510910596163089e-15,-30" class="node-vertical__hexagon node-vertical__inactive">         </polygon>
  </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

Mor*_*dri 6

您可以使用SVG feOffset, feGaussianBlur, feBlend`feDropShadow 代替。

<svg width="300" height="300">
    <defs>
    <filter id="poly" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceGraphic" dx="15" dy="15" />
      <feGaussianBlur result="blurOut" in="offOut" stdDeviation="5" />
      <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
    </filter>
  </defs>
  <g transform="translate(100, 100)">
  <polygon points="100,10 40,198 190,78 10,78 160,198"
  style="fill:lime;stroke:purple;stroke-width:5;fill-rule:nonzero;" filter="url(#poly)" />
  </g>
</svg>
Run Code Online (Sandbox Code Playgroud)
这将帮助您使用SVG形状的确切颜色制作阴影,无论它是什么形状,因此您不必为其阴影设置单一颜色。有关此技术的更多信息,您可以访问W3Schools

  • @RobertLongson 确实,不透明物体的阴影是暗的,但是透明物体的阴影呢。比如红色的彩色玻璃什么的。无论如何,我只是建议另一种创建阴影的方法。 (2认同)

Tem*_*fif 5

您可以将drop-shadow过滤器应用于SVG或将SVG用作元素的背景并对其应用过滤器:

polygon {
  fill: #5091b9;
  stroke: #4387b0;
  stroke-width: 2;
}
svg {
  filter: drop-shadow(0 0 5px red);
}

.box {
  height: 100px;
  width: 100px;
  background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100"><g transform="translate(50, 50)"><polygon stroke="#4387b0" stroke-width="2" fill="#5091b9" points="25.98076211353316,-14.999999999999998 25.98076211353316,14.999999999999998 1.83697019872103e-15,30 -25.98076211353316,14.999999999999998 -25.980762113533157,-15.000000000000004 -5.510910596163089e-15,-30" ></polygon></g></svg>');
  filter: drop-shadow(0 0 5px red);
}
Run Code Online (Sandbox Code Playgroud)
<svg viewBox="0 0 100 100" width=100><g transform="translate(50, 50)"><polygon points="25.98076211353316,-14.999999999999998 25.98076211353316,14.999999999999998 1.83697019872103e-15,30 -25.98076211353316,14.999999999999998 -25.980762113533157,-15.000000000000004 -5.510910596163089e-15,-30" ></polygon></g></svg>

<div class="box"></div>
Run Code Online (Sandbox Code Playgroud)

您还可以考虑使用SVG过滤器:

.node-vertical__inactive {
  filter:url(#shadow);
}

.node-vertical__hexagon {
  fill: #5091b9;
  stroke: #4387b0;
  stroke-width: 2;
}
Run Code Online (Sandbox Code Playgroud)
<svg>
<defs>
    <filter id="shadow" x="-20%" y="-20%" width="200%" height="200%">
      <feDropShadow dx="20" dy="3" stdDeviation="5" flood-color="#5091b9" />
    </filter>
  </defs>
<g class="vx-group" transform="translate(0, 0)">
  <g class="vx-group node-vertical__container" transform="translate(100, 100)"><svg class="node-vertical__inactive" x="0" y="0" style="overflow: visible;"><polygon points="25.98076211353316,-14.999999999999998 25.98076211353316,14.999999999999998 1.83697019872103e-15,30 -25.98076211353316,14.999999999999998 -25.980762113533157,-15.000000000000004 -5.510910596163089e-15,-30" class="node-vertical__hexagon"></polygon></svg>
</g>
</g>
</svg>
Run Code Online (Sandbox Code Playgroud)