SVG Path的Pattern填充在Firefox与Safari中失效问题排查
为什么用pattern填充的SVG Path在Firefox和Safari中无法显示?
我帮你排查了代码里的几个关键问题,这就是导致pattern在Firefox和Safari里不生效的原因:
<image>元素缺少height属性:Chrome对SVG的容错性比较宽松,即使<image>没设置height也能自动推断尺寸,但Firefox和Safari要求必须明确指定这个属性,否则pattern里的图片根本不会渲染,自然无法填充到路径上。- 填充属性的冗余冲突:你的path元素同时写了
fill="#ff0000;"(这里还多了个不必要的分号)和style="fill:url(#imgpattern)",虽然CSS样式的优先级更高,但这种冗余写法可能在部分浏览器里引发解析异常。 - 可选优化:
xlink:href替换为href:虽然xlink:href符合旧版SVG标准,但现代SVG推荐直接使用href属性,能更好地兼容所有主流浏览器。
下面是修复后的完整代码:
<svg xmlns="http://www.w3.org/2000/svg" height="500" width="600" style="position: absolute;"> <defs> <pattern id="imgpattern" x="0" y="0" width="1" height="1" patternUnits="userSpaceOnUse"> <!-- 补充height属性,替换为href --> <image width="600" height="500" href="https://i.pinimg.com/564x/e1/a5/b7/e1a5b7edacee456a4f3bc3e00c3c01d9.jpg"></image> </pattern> </defs> <!-- 移除冗余的fill属性,只保留style里的填充设置 --> <path d="M50,100 C50,100 100,100 100,50 L100,50 500,50 C500,50 500,100 550,100 L550,100 550,400 C550,400 500,400 500,450 L500,450 100,450 C100,450 100,400 50,400 L50,400 50,100 L50,100 0,100 0,0 0,425 L0,425 50,425 C50,425 75,425 75,450 L50,450 50,425 0,425 0,500 525,500 525,450 C525,450 525,425 550,425 L550,425 550,450 525,450 525,500 600,500 600,75 550,75 C550,75 525,75 525,50 L525,50 550,50 550,75 600,75 600,0 75,0 75,50 C75,50 75,75 50,75 L50,50 75,50 75,0 0,0 0,100" stroke="#F000" stroke-width="1px" style="fill:url(#imgpattern)"></path> </svg>
修复这几个点之后,你的pattern填充就能在Chrome、Firefox、Safari等所有主流浏览器里正常显示了。
内容的提问来源于stack exchange,提问作者Suhas Bachhav
相关产品推荐
相关产品推荐

