stroke-opacity

Baseline 已广泛支持

该特性已非常成熟,可在多种设备和浏览器版本上使用。自 2017 年 4 月以来,它已在各大浏览器上可用。

stroke-opacity CSS 属性定义了 SVG 形状描边的不透明度。其效果与 opacity 相同,但仅应用于描边,不应用于整个元素。如果存在,它会覆盖元素的 stroke-opacity 属性。

此属性适用于 SVG 形状和文本内容元素(完整列表请参阅 stroke-opacity),但作为继承属性,它也可以应用于 <g> 等元素,并仍对子元素的描边产生预期效果。

请注意,形状的描边会部分覆盖该形状的填充,因此不透明度小于 1 的描边将会在重叠处显示填充与描边混合的效果。为避免此效果,可以使用 opacity 属性应用全局不透明度,或使用 paint-order 属性将描边置于填充之后。

语法

css
/* numeric and percentage values */
stroke-opacity: 1;
stroke-opacity: 0.3;
stroke-opacity: 50%;

/* Global values */
stroke-opacity: inherit;
stroke-opacity: initial;
stroke-opacity: revert;
stroke-opacity: revert-layer;
stroke-opacity: unset;

<number>

任何介于 0 到 1 之间(包括 0 和 1)的实数。值为 0 使描边完全透明,值为 1 使其完全不透明。超出 0 – 1 范围的值将被裁剪到该范围的最近端;因此,负值将被裁剪为 0

<percentage>

<number> 相同(见上文),但允许范围为 0% 到 100%,并且裁剪是根据该范围进行的。

正式定义

初始值1
应用于svg 中的 <circle><ellipse><line><path><polygon><polyline><rect> 元素
继承性
计算值指定值,裁剪到范围 [0,1]
动画类型按计算值类型

正式语法

stroke-opacity = 
<'opacity'>

<opacity> =
<opacity-value>

<opacity-value> =
<number> |
<percentage>

示例

各种描边不透明度

本示例演示了 stroke-opacity 属性的基本用法,以及形状的描边如何部分覆盖其填充,不透明度小于 1 的描边如何在重叠处与填充混合。

HTML

首先,我们设置了五个多段路径,所有路径都使用宽度为一的黑色描边,以及子路径的 dodgerblue 填充。每个路径创建一系列山峰符号,从左(浅角)到右(极角)。

html
<svg viewBox="0 0 39 36" xmlns="http://www.w3.org/2000/svg">
  <g stroke="black" stroke-width="1" fill="dodgerblue">
    <path
      d="M1,5 l7   ,-3 l7   ,3
         m2,0 l3.5 ,-3 l3.5 ,3
         m2,0 l2   ,-3 l2   ,3
         m2,0 l0.75,-3 l0.75,3
         m2,0 l0.5 ,-3 l0.5 ,3" />
    <path
      d="M1,12 l7,-3 l7,3 m2,0 l3.5,-3 l3.5,3 m2,0 l2,-3 l2,3 m2,0 l0.75,-3 l0.75,3 m2,0 l0.5,-3 l0.5,3" />
    <path
      d="M1,19 l7,-3 l7,3 m2,0 l3.5,-3 l3.5,3 m2,0 l2,-3 l2,3 m2,0 l0.75,-3 l0.75,3 m2,0 l0.5,-3 l0.5,3" />
    <path
      d="M1,26 l7,-3 l7,3 m2,0 l3.5,-3 l3.5,3 m2,0 l2,-3 l2,3 m2,0 l0.75,-3 l0.75,3 m2,0 l0.5,-3 l0.5,3" />
    <path
      d="M1,33 l7,-3 l7,3 m2,0 l3.5,-3 l3.5,3 m2,0 l2,-3 l2,3 m2,0 l0.75,-3 l0.75,3 m2,0 l0.5,-3 l0.5,3" />
  </g>
</svg>

CSS

我们对这些路径应用了逐渐增高的描边不透明度值。对于前四个路径,可以通过描边路径的内部一半看到填充,尽管对于第四个路径可能难以辨别。对于第五个也是最后一个路径,描边完全不透明,因此无法通过描边看到填充。

css
g path:nth-child(1) {
  stroke-opacity: 0.2;
} /* equiv. 20% */
g path:nth-child(2) {
  stroke-opacity: 0.4;
} /* equiv. 40% */
g path:nth-child(3) {
  stroke-opacity: 0.6;
} /* equiv. 60% */
g path:nth-child(4) {
  stroke-opacity: 0.8;
} /* equiv. 80% */
g path:nth-child(5) {
  stroke-opacity: 1;
} /* equiv. 100% */

结果

规范

规范
CSS 填充与描边模块 Level 3
# stroke-opacity

浏览器兼容性

另见