stop-opacity

Baseline 已广泛支持

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

stop-opacity CSS 属性定义了 SVG 渐变中 <stop> 元素中给定颜色渐变停止点的不透明度。如果存在,它会覆盖元素的 stop-opacity 属性。

属性值影响 stop-color 的 alpha 通道;它可以增加 <stop> 颜色的透明度,但不能使 stop-color 属性定义的颜色变得更不透明。

注意: stop-opacity 属性仅适用于嵌套在 <svg> 中的 <stop> 元素。它不适用于其他 SVG、HTML 或伪元素。

语法

css
/* numeric and percentage values */
stop-opacity: 0.2;
stop-opacity: 20%;

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

<opacity-value> 是一个 <number><percentage>,表示 SVG 渐变 <stop> 元素的不透明度。

<number>

介于 01 之间(包括 01)的数值。

<percentage>

介于 0%100% 之间(包括 0%100%)的百分比值。

设置为 00% 时,停止点完全透明。设置为 1100% 时,元素具有 stop-color 值的完全不透明度,该值可能部分不透明或完全不透明。

正式定义

初始值black
应用于<svg> 中的 <stop> 元素
继承性
计算值同指定值
动画类型离散

正式语法

stop-opacity = 
<number> |
<percentage>

示例

定义 SVG 渐变颜色停止点的不透明度

此示例演示了 stop-opacity 的基本用例,以及 CSS stop-opacity 属性如何优先于 stop-opacity 属性。

HTML

我们有一个 SVG,其中包含一些 <polygon> 星星和三个 <linearGradient> 元素:每个都包含三个 <stop> 元素,定义了三个颜色停止点,创建了一个从蓝色到白色再到粉色的渐变;它们之间唯一的区别是 id 值。

html
<svg viewBox="0 0 250 120" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <linearGradient id="myGradient1">
      <stop offset="5%" stop-color="#66ccff" stop-opacity="1" />
      <stop offset="50%" stop-color="#fefefe" stop-opacity="1" />
      <stop offset="95%" stop-color="#f4aab9" stop-opacity="1" />
    </linearGradient>
    <linearGradient id="myGradient2">
      <stop offset="5%" stop-color="#66ccff" stop-opacity="1" />
      <stop offset="50%" stop-color="#fefefe" stop-opacity="1" />
      <stop offset="95%" stop-color="#f4aab9" stop-opacity="1" />
    </linearGradient>
    <linearGradient id="myGradient3">
      <stop offset="5%" stop-color="#66ccff" stop-opacity="1" />
      <stop offset="50%" stop-color="#fefefe" stop-opacity="1" />
      <stop offset="95%" stop-color="#f4aab9" stop-opacity="1" />
    </linearGradient>
  </defs>
  <polygon points="40,10 10,100 80,40 0,40 70,100" />
  <polygon points="125,10 95,100 165,40 85,40 155,100" />
  <polygon points="210,10 180,100 250,40 170,40 240,100" />
</svg>

CSS

我们包含了一个 strokestroke-width,使多边形路径线可见。

每个 polygon 都使用 fill 属性设置了渐变背景;渐变的 idurl() 参数。我们将 magenta 设置为备用颜色。

我们使用 stop-opacity 属性定义每个渐变停止点的不透明度。

SVG 具有条纹背景,使透明度设置更加明显。

css
polygon {
  stroke: #333333;
  stroke-width: 1px;
}
polygon:nth-of-type(1) {
  fill: url("#myGradient1") magenta;
}
polygon:nth-of-type(2) {
  fill: url("#myGradient2") magenta;
}
polygon:nth-of-type(3) {
  fill: url("#myGradient3") magenta;
}

#myGradient1 stop {
  stop-opacity: 1;
}
#myGradient2 stop {
  stop-opacity: 0.8;
}
#myGradient3 stop {
  stop-opacity: 25%;
}

结果

第一颗星完全不透明。第二颗星的填充为 80% 不透明,因为颜色停止点略微半透明;stop-opacity: 0.8; 覆盖了 stop-opacity="1" 元素属性值。最后一颗星的填充几乎不明显,颜色停止点为 25% 不透明。请注意,描边在所有情况下都是相同的不透明深灰色。

注意: 因为我们在线性渐变中所有同级 <stop> 元素使用了相同的 stop-opacity 值,所以我们也可以使用一个具有完全不透明停止点的 <linearGradient>,并为每个 <polygon>fill-opacity 属性设置一个值。

规范

规范
Scalable Vector Graphics (SVG) 2
# StopOpacityProperty

浏览器兼容性

另见