SVG中透明需用fill-opacity/stroke-opacity而非transparent或rgba;#RRGGBBAA兼容性差;opacity影响整元素且性能低;text等元素须显式设fill-opacity="0"。
HTML里写的 transparent 或 rgba(0,0,0,0) 在SVG中部分属性不生效——不是语法错,而是SVG渲染引擎对颜色解析逻辑和CSS不同。比如 fill="transparent" 在某些旧版浏览器或内联SVG中会被忽略,最终显示为黑色或默认色。
fill-opacity和stroke-opacity
SVG原生支持两套透明控制:一是颜色值自带alpha(如 #ff000080),二是独立的不透明度属性。后者更可靠,尤其兼容IE11、Safari 12等老环境。
fill-opacity 控制填充区域透明度(0~1),不影响描边stroke-opacity 控制描边透明度(0~1),不影响填充fill-opacity="0.5" stroke-opacity="0.3")现代浏览器支持8位十六进制色(如 #0000ff80 表示半透蓝色),但存在两个关键限制:
#RRGGBBAA,会直接当无效值回退到黑色
通过CSS设置 fill(比如 style="fill: #0000ff80;"),部分Android WebView会解析失败fill="rgb(0,0,255)" fill-opacity="0.5",兼容性最稳opacity属性要小心层级和性能opacity 作用于整个元素(包括子元素、描边、阴影等),看似简单,但容易引发意外:
,设 opacity="0.3" 会让所有内容一起变淡,无法单独调某部分opacity 触发重绘而非合成,比 fill-opacity 更耗性能opacity 行为一致,但别和CSS opacity混用——内联SVG里CSS层叠可能覆盖掉你设的属性值真正需要整体淡入淡出时再用 opacity,日常控色优先拆解为 fill-opacity/stroke-opacity。
元素设了 fill="transparent" 却没加 fill-opacity="0",结果在iOS Safari上文字依然显形。透明不是“关掉”,而是“参与渲染但不可见”——得让渲染引擎明确知道你要它画什么、画多淡。