最新的Web开发教程
 

SVG阴影


<DEFS>和<filter>

所有SVG过滤器是一种内定义的<defs>元素。 在<defs>元素是短期的定义和含有特殊元素的定义(such as filters)

<filter>元素用于定义SVG滤镜。 该<filter>元素标识过滤器所需的id属性。 然后该图形指向过滤器使用。


SVG <feOffset>

例1

<feOffset>元素被用来创建阴影效果。 这个想法是把一个SVG图形(image or element)和移动一点点在xy平面内。

第一个例子抵消的矩形(with <feOffset>)然后混合原始的偏移图像的顶部(with <feBlend>)

feoffset

下面是SVG代码:

<svg height="120" width="120">
  <defs>
    <filter id="f1" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
      <feBlend in="SourceGraphic" in2="offOut" mode="normal" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f1)" />
</svg>
试一试»

Code explanation:

  • id的属性<filter>元素定义了一个唯一的名称为过滤器
  • filter的属性<rect>元素中的元素链接到"f1"过滤器

例2

现在,偏移图像可以模糊(with <feGaussianBlur>)

feoffset2

下面是SVG代码:

<svg height="140" width="140">
  <defs>
    <filter id="f2" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
      <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
      <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f2)" />
</svg>
试一试»

Code explanation:

  • stdDeviation的属性<feGaussianBlur>元素定义模糊量

例3

现在,让阴影黑色:

feoffset3

下面是SVG代码:

<svg height="140" width="140">
  <defs>
    <filter id="f3" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceAlpha" dx="20" dy="20" />
      <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
      <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f3)" />
</svg>
试一试»

Code explanation:

  • in所述的属性<feOffset>元件被改变为"SourceAlpha"它使用Alpha通道的模糊而不是整个的RGBA像素

例4

现在,把阴影的颜色:

feoffset4

下面是SVG代码:

<svg height="140" width="140">
  <defs>
    <filter id="f4" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
      <feColorMatrix result="matrixOut" in="offOut" type="matrix"
      values="0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0" />
      <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10" />
      <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f4)" />
</svg>
试一试»

Code explanation:

  • <feColorMatrix>过滤器用于偏移图像变换颜色接近黑色。 在基体'0.2'的所有三个值获得由红,绿和兰通道相乘。 减少他们的价值观所带来的颜色接近黑色(black is 0)