【发布时间】:2016-02-14 01:35:52
【问题描述】:
我希望深色背景上的一段深色文本在其外部具有白光。虽然 CSS 中的default drop shadow filter(如filter: drop-shadow(2px 2px 2px black))官方应该支持'spread-radius'第四个属性,但对这个属性的支持基本上是不存在的。如果没有这种额外的传播,阴影将不会大到足以让文本被阅读。
因此,我决定在 SVG 标记中定义我自己的过滤器,包括一个膨胀操作来实现额外的传播,并将其应用于文本。此过滤器在 Chrome 中运行良好,但会导致文本在 Firefox 中完全不可见(均在 Ubuntu 14.04 下测试)。根据caniuse.com(我发现通常非常可靠),Firefox 应该可以完美地支持过滤器。
带有 SVG 过滤器的 HTML 代码:
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="my-drop-shadow" x="0" y="0" width="200%" height="200%">
<feColorMatrix type="matrix" values=
"0 0 0 0 1
0 0 0 0 1
0 0 0 0 1
0 0 0 1 0"/>
<feMorphology operator="dilate" radius="2" />
<feGaussianBlur stdDeviation="2" in="coloredOut" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
</svg>
<p>Hello there.</p>
CSS:
body {
color: #000; background: #002;
font-family: serif; font-size: 30px;
font-weight: bold;
}
p {
-webkit-filter: url(#my-drop-shadow);
filter: url(#my-drop-shadow);
}
Chrome 上的结果(版本 46.0.2490.80(64 位)):
Firefox(42.0 版)上的结果:
我已将上面的代码放在working CodePen 中(编辑:请注意,我现在已更新 CodePen 以反映@RobertLongson 的答案并且它有效;请参阅下文了解为什么这不是完整答案)。
有什么想法吗?我的 SVG 代码中没有发现错字?
【问题讨论】:
标签: html google-chrome firefox svg svg-filters