| Attribute | Explanation | Applies to: |
|:--------------:|:----------------------------------:|:------------------------------------:|
| opacity | The overall opacity of the element.| Everything but gradient stops |
| fill-opacity | The opacity of the fill paint. | Elements with the attribute 'fill' |
| stroke-opacity | The opacity of the stroke paint. | Elements with the attribute 'stroke' |
| stop-opacity | The opacity of the gradient stop. | Gradient stops |
4条答案
按热度按时间wgx48brx1#
不同之处正是名称所指示的:)。
fill-opacity
仅适用于元素的fill
(或者换句话说,仅适用于其背景),stroke-opacity
仅适用于stroke
,而opacity
可适用于两者。opacity
是一种后处理操作。也就是说,元素(或组)作为一个整体(填充+笔划)被渲染,然后透明度基于不透明度设置进行调整,而fill-opacity
和stroke-opacity
是中间步骤,因此透明度单独添加到笔划和填充。因此,当stroke-opacity
和fill-opacity
一起使用时,结果仍然与使用opacity
不同(因为填充上的透明度将使填充颜色显示在它们重叠的任何地方)。您可以在下面的前两个元素中直观地看到差异。正如Robert(在注解中)所指出的,
fill-opacity
不适用于image
,而opacity
可以工作。在CSS世界中,你可以把它想象成下面的代码片段。(* 注意,我并不是说它们是平等的,SVG和CSS之间有细微的区别。这只是试图解释这些SVG属性在CSS中会转换成什么。
yduiuuwa2#
除了影响每个单独元件的哪些部分受影响之外(例如填充与描边)另一个区别是当元素在组内重叠时会发生什么。
opacity
影响整个组的透明度,而fill-opacity
影响组内各个元素的透明度。这样的一个结果是,当这样的组内的元件重叠时,当使用fill-opacity
时,在重叠区域中存在复合效应,而当使用opacity
时则不存在。下图显示,当对组中的每个元素或组本身应用0.5的(填充)不透明度时,会出现这种情况。wlsrxk513#
fill-opacity
控制填充颜色的不透明度。opacity
控制整个物体的不透明度。看看这个demo:https://jsfiddle.net/DerekL/9mvrL66g/
fcwjkofz4#
我发现这个表在考虑使用哪种
opacity
风格的SVG
时很有帮助。不要忘记stroke-opacity
和stop-opacity
。