最新的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)