SVG 阴影学习笔记

什么是SVG阴影?

SVG(Scalable Vector Graphics)是一种矢量图形语言,支持阴影和透明度等特性。在SVG中,阴影是通过添加 <filter> 元素来实现的。

如何在SVG中创建阴影?

要在SVG中创建阴影,必须使用 <filter> 元素。下面是一个示例:

svgCopy Code
<svg width="200" height="200"> <defs> <filter id="drop-shadow"> <feGaussianBlur in="SourceAlpha" stdDeviation="2"/> <feOffset dx="2" dy="2" result="offsetblur"/> <feFlood flood-color="rgba(0,0,0,0.5)"/> <feComposite in2="offsetblur" operator="in"/> <feMerge> <feMergeNode/> <feMergeNode in="SourceGraphic"/> </feMerge> </filter> </defs> <rect x="50" y="50" width="100" height="100" style="fill: red; filter: url(#drop-shadow);"/> </svg>

在上面的示例中,我们创建了一个id为 "drop-shadow" 的过滤器。该过滤器使用 <feGaussianBlur>、<feOffset>、<feFlood> 和 <feMerge> 等元素来实现阴影效果。然后,在矩形元素中使用 "filter" 属性将过滤器应用于该元素。

运行以上代码,将会在一个200x200的SVG画布中显示一个红色矩形,并添加了阴影效果。

SVG阴影实例

下面是一个更复杂的示例,其中包含了多个图形、不同类型的过滤器以及动画效果:

svgCopy Code
<svg viewBox="0 0 500 400" xmlns="http://www.w3.org/2000/svg"> <defs> <filter id="shadow1" x="-50%" y="-50%" width="200%" height="200%"> <feGaussianBlur in="SourceAlpha" stdDeviation="5"/> <feOffset dx="5" dy="5" result="offsetblur"/> <feFlood flood-color="#000" flood-opacity=".5"/> <feComposite in2="offsetblur" operator="in"/> <feMerge> <feMergeNode/> <feMergeNode in="SourceGraphic"/> </feMerge> </filter> <filter id="shadow2" x="-50%" y="-50%" width="200%" height="200%"> <feComponentTransfer in="SourceAlpha"> <feFuncR type="discrete" tableValues="1"/> <feFuncG type="discrete" tableValues="0"/> <feFuncB type="discrete" tableValues="0"/> </feComponentTransfer> <feGaussianBlur stdDeviation="3"/> <feComposite operator="in" in2="SourceGraphic"/> <feOffset dx="2" dy="2" result="offsetblur"/> <feFlood flood-color="#ff00ff" flood-opacity=".5"/> <feComposite in2="offsetblur" operator="in"/> <feMerge> <feMergeNode/> <feMergeNode in="SourceGraphic"/> </feMerge> </filter> </defs> <rect x="50" y="50" width="100" height="100" style="fill: red; filter: url(#shadow1);"/> <circle cx="250" cy="100" r="50" style="fill: green; filter: url(#shadow2);"> <animate attributeName="cx" from="0" to="500" dur="4s" repeatCount="indefinite"/> </circle> <polygon points="200,250 275,350 125,350" style="fill: blue; filter: url(#shadow1);"/> <text x="250" y="300" fill="#fff" font-size="60" font-family="Verdana" filter="url(#shadow2)">SVG Shadow</text> </svg>

在上面的示例中,我们定义了两个过滤器(id为 "shadow1" 和 "shadow2"),并在矩形、圆形、多边形和文本中使用这些过滤器来创建不同类型的阴影效果。此外,我们还为圆形元素添加了一个动画效果,使其移动。

运行以上代码,将会看到一个具有多种形状和阴影效果的SVG图形。