最适合网络开发者的网站
图。初学者课程

尿素

SVG 阴影


<defs>和<filter>

所有 SVG 过滤器均在<defs>元素。<defs> element 是 definitions 的缩写,包含特殊元素(例如过滤器)的定义。

这<filter>元素用于定义 SVG 过滤器。<filter> 元素具有必需的 id 属性,用于标识过滤器。然后图形指向要使用的过滤器。


SVG<feOffset>

示例 1

这<feOffset>元素用于创建阴影效果。其理念是获取 SVG 图形(图像或元素)并在 xy 平面上稍微移动它。

第一个例子偏移一个矩形(<feOffset> ),然后将原始图像与偏移图像混合(使用<feBlend> ):

偏移量

以下是 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"
填充=“黄色”过滤器=“url(#f1)”/&gt;
</svg>
亲自尝试 »

代码解释:

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

示例 2

现在,偏移图像可以被模糊化(使用<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"
填充=“黄色”过滤器=“url(#f2)”/&gt;
</svg>
亲自尝试 »

代码解释:

  • 的 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"
填充=“黄色”过滤器=“url(#f3)”/&gt;
</svg>
亲自尝试 »

代码解释:

  • 的 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"
值="0.2 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0" /&gt;
      <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"
填充=“黄色”过滤器=“url(#f4)”/&gt;
</svg>
亲自尝试 »

代码解释:

  • 这<feColorMatrix>滤镜用于将偏移图像中的颜色转换为更接近黑色的颜色。矩阵中的三个“0.2”值都乘以红色、绿色和蓝色通道。降低它们的值会使颜色更接近黑色(黑色为 0)