是否可以使用css3为svg元素设置阴影,类似于
box-shadow: -5px -5px 5px #888;
-webkit-box-shadow: -5px -5px 5px #888;
我看到一些关于使用滤镜效果创建阴影的评论。有没有一个单独使用css的例子。下面是一个工作代码,其中cusor样式被正确应用,但没有阴影效果。请帮助我得到阴影效果与最少位的代码。
svg .shadow {
cursor:crosshair;
-moz-box-shadow: -5px -5px 5px #888;
-webkit-box-shadow: -5px -5px 5px #888;
box-shadow: -5px -5px 5px #888;
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" viewBox="0 0 120 70">
<rect class="shadow" x="10" y="10" width="100" height="50" fill="#c66" />
</svg>
8条答案
按热度按时间ndasle7k1#
CSS
filter
属性支持Webkit浏览器、Firefox 34+和Edge。
您可以使用这个polyfill,它将支持FF <34,IE6+。
你可以这样使用它:
这种方法与css
box-shadow
效果的不同之处在于,它考虑了不透明度,并且不将阴影效果应用于盒子,而是应用于svg元素本身的轮廓。<svg>
元素上时有效。* * 你现在可以在内联svg元素上使用它,比如<rect>
。**阅读更多关于css过滤器here。
slhcrj9b2#
下面是使用'filter'属性将dropshadow应用到svg的example。如果你想控制投影的不透明度,可以看看this example。
slope
属性控制赋予投影的不透明度。示例中的相关位:
Box-shadow被定义为在CSS框上工作(阅读:矩形),而svg比矩形更有表现力。阅读SVG入门,了解更多关于SVG过滤器的内容。
kokeuurv3#
您可以使用drop-shadow()CSS函数和rgba颜色值轻松地为svg-element添加阴影效果。通过使用rgba颜色值,您可以改变阴影的不透明度。
wbrvyc0a4#
我发现最简单的方法是使用
feDropShadow
。关于元素:
gzjq41n45#
黑底白色影
另一种方式,我用于白色阴影(在文本上):创建阴影的克隆:
注意:SVG声明需要
xmlns:xlink="http://www.w3.org/1999/xlink"
。真实的文本值位于
<defs>
部分,具有位置和样式,但没有fill
定义。文本被克隆两次:首先是阴影,其次是文本本身。
具有最大值的更远 * 阴影为 * 模糊偏差 *:
您可以对常规SVG对象使用相同的方法。
同样要求:*
<defs>
段无填充定义 *!a64a0gku6#
如果你的SVG元素是
<text>
,你可以使用CSS属性text-shadow
,没有任何问题。语法为text-shadow: color x-offset-px y-offset-px blur-px
。piok6c0g7#
可能是一种进化,内联css过滤器似乎以某种方式在元素上工作得很好。
在svg元素中声明一个drop-shadow css过滤器,在class或inline中NOT工作,正如前面所述。
但是,至少在Firefox中,使用以下魔法:
在DOM load后,添加JavaScriptinline**。
7rfyedvj8#
我不知道只有CSS的解决方案。
正如您提到的,滤镜是在SVG中创建投影效果的规范方法。SVG规范包含了一个这样的例子。