ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# SVG 阴影 **注意:** Internet Explorer和Safari不支持SVG滤镜! ## &lt;defs&gt; 和 &lt;filter&gt; 所有互联网的SVG滤镜定义在&lt;defs&gt;元素中。&lt;defs&gt;元素定义短并含有特殊元素(如滤镜)定义。 &lt;filter&gt;标签用来定义SVG滤镜。&lt;filter&gt;标签使用必需的id属性来定义向图形应用哪个滤镜? ## SVG &lt;feOffset&gt; ## 实例 1 &lt;feOffset&gt;元素是用于创建阴影效果。我们的想法是采取一个SVG图形(图像或元素)并移动它在xy平面上一点儿。 第一个例子偏移一个矩形(带&lt;feOffset&gt;),然后混合偏移图像顶部(含&lt;feBlend&gt;): ![feoffset](https://box.kancloud.cn/2015-12-17_5672b03cea7b1.gif) 下面是SVG代码: ## 实例 ``` <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="yellow" filter="url(#f1)" /> </svg> ``` 对于Opera用户: [查看SVG文件](images/feoffset1.svg)(右键单击SVG图形预览源)。 **代码解析:** * &lt;filter&gt;元素id属性定义一个滤镜的唯一名称 * &lt;rect&gt;元素的滤镜属性用来把元素链接到"f1"滤镜 ## 实例 2 现在,偏移图像可以变的模糊(含 &lt;feGaussianBlur&gt;): ![feoffset2](https://box.kancloud.cn/2015-12-17_5672b03d34d6a.jpg) 下面是SVG代码: ## 实例 ``` <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="yellow" filter="url(#f1)" /> </svg> ``` 对于Opera用户: [查看SVG文件](images/feoffset2.svg)(右键单击SVG图形预览源)。 **代码解析:** * &lt;feGaussianBlur&gt;元素的stdDeviation属性定义了模糊量 ## 实例 3 现在,制作一个黑色的阴影: ![feoffset3](https://box.kancloud.cn/2015-12-17_5672b03d7567a.jpg) 下面是SVG代码: ## 实例 ``` <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="yellow" filter="url(#f1)" /> </svg> ``` 对于Opera用户: [查看SVG文件](images/feoffset3.svg)(右键单击SVG图形预览源)。 **代码解析:** * &lt;feOffset&gt;元素的属性改为"SourceAlpha"在Alpha通道使用残影,而不是整个RGBA像素。 ## 实例 4 现在为阴影涂上一层颜色: ![feoffset4](https://box.kancloud.cn/2015-12-17_5672b03d85301.jpg) 下面是SVG代码: ## 实例 ``` <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="yellow" filter="url(#f1)" /> </svg> ``` 对于Opera用户: [查看SVG文件](images/feoffset4.svg)(右键单击SVG图形预览源)。 **代码解析:** * &lt;feColorMatrix&gt;过滤器是用来转换偏移的图像使之更接近黑色的颜色。 '0.2'矩阵的三个值都获取乘以红色,绿色和蓝色通道。降低其值带来的颜色至黑色(黑色为0)