一篇文章帶你了解SVG 陰影
注意: Internet Explorer和Safari不支持SVG濾鏡!
一、前言
defs 和 filte元素
所有互聯(lián)網(wǎng)的SVG濾鏡定義在元素中。元素定義短并含有特殊元素(如濾鏡)定義標(biāo)簽用來(lái)定義SVG濾鏡。
標(biāo)簽使用必需的id屬性來(lái)定義向圖形應(yīng)用哪個(gè)濾鏡?
二、feOffset 元素
1. 實(shí)例 1
元素是用于創(chuàng)建陰影效果。我的想法是采取一個(gè)SVG圖形(圖像或元素)并移動(dòng)它在xy平面上一點(diǎn)兒。
偏移一個(gè)矩形(帶),然后混合偏移圖像頂部(含)。
- <!DOCTYPE html>
- <html>
- <body style="background-color: aqua;">
- <p><b>Note: </b>Internet Explorer and Safari do not support SVG filters yet!</p>
- <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
- <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="red" filter="url(#f1)" />
- </svg>
- </body>
- </html>
運(yùn)行效果:
代碼解析:
- <filter>元素id屬性定義一個(gè)濾鏡的唯一名稱(chēng)。
- <rect>元素的濾鏡屬性用來(lái)把元素鏈接到"f1"濾鏡。
2. 實(shí)例 2
現(xiàn)在,偏移圖像可以變的模糊(含 )。
代碼:
- <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
- <defs>
- <filter id="f1" 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="red" filter="url(#f1)" />
- </svg>
運(yùn)行效果
代碼解析:
<feGaussianBlur>元素的stdDeviation屬性定義了模糊量。
3. 實(shí)例 3
現(xiàn)在,制作一個(gè)黑色的陰影。
代碼:
- <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
- <defs>
- <filter id="f1" 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="red" filter="url(#f1)" />
- </svg>
運(yùn)行效果
代碼解析:
<feOffset>元素的屬性改為"SourceAlpha"在Alpha通道使用殘影,而不是整個(gè)RGBA像素。
4. 實(shí)例 4
現(xiàn)在為陰影涂上一層顏色。
代碼:
- <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
- <defs>
- <filter id="f1" 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="red" filter="url(#f1)" />
- </svg>
代碼解析:
<feColorMatrix>過(guò)濾器是用來(lái)轉(zhuǎn)換偏移的圖像使之更接近黑色的顏色。'0.2'矩陣的三個(gè)值都獲取乘以紅色,綠色和藍(lán)色通道。降低其值帶來(lái)的顏色至黑色(黑色為0)。
三、總結(jié)
本文基于Htm基礎(chǔ),主要介紹了通過(guò)SVG進(jìn)行圖像,陰影效果的呈現(xiàn),feOffset元素在實(shí)際應(yīng)用中對(duì)圖像的陰影添加不一樣的樣式 ,呈現(xiàn)不一樣的陰影層次。通過(guò)豐富的案例分析,效果圖的展示,讓讀者能夠更好理解和學(xué)習(xí)。
大家積極嘗試,有時(shí)候看到別人實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但是到自己動(dòng)手實(shí)現(xiàn)的時(shí)候,總會(huì)有各種各樣的問(wèn)題,切勿眼高手低,勤動(dòng)手,才可以理解的更加深刻。
代碼很簡(jiǎn)單,希望能夠幫助你學(xué)習(xí)。
本文轉(zhuǎn)載自微信公眾號(hào)「前端進(jìn)階學(xué)習(xí)交流」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系前端進(jìn)階學(xué)習(xí)交流公眾號(hào)。