opacity

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

opacity CSS 属性用于设置一个元素的不透明度。不透明度是指元素后面的内容被隐藏的程度,与透明度相反。

试一试

opacity: 0;
opacity: 0.33;
opacity: 1;
<section class="default-example" id="default-example">
  <p id="example-element">
    London. Michaelmas term lately over, and the Lord Chancellor sitting in
    Lincoln's Inn Hall. Implacable November weather. As much mud in the streets
    as if the waters had but newly retired from the face of the earth, and it
    would not be wonderful to meet a Megalosaurus, forty feet long or so,
    waddling like an elephantine lizard up Holborn Hill.
  </p>
</section>
#example-element {
  background-color: #963770;
  color: white;
  padding: 1em;
}

语法

css
opacity: 0.9;
opacity: 90%;

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

<alpha-value>

一个介于 0.01.0(含)之间的 <number>,或者一个介于 0%100%(含)之间的 <percentage>,表示通道的不透明度(即其 alpha 通道的值)。任何超出该区间的值,虽然有效,但会被限制在区间的最近边界值。

含义
0 元素完全透明(即不可见)。
任何严格介于 01 之间的 <number> 元素是半透明的(即可以看到元素后面的内容)。
1(默认值) 元素完全不透明(视觉上是实心的)。

描述

opacity 作为一个整体应用于元素,包括其内容,即使该值不会被子元素继承。因此,元素及其子元素相对于元素的背景都具有相同的不透明度,即使它们相对于彼此具有不同的不透明度。

若要仅改变背景的不透明度,请使用 background 属性并指定一个支持 alpha 通道的颜色值。例如:

css
background: rgb(0 0 0 / 40%);

opacity 值设置为 0 时,元素及其所有子元素都将变得不可见,但它们仍然是 DOM 的一部分。这意味着它们仍然会响应指针事件,并且如果元素处于 Tab 键顺序中,它们仍然可以获得焦点。为了保证良好的可用性,请确保在这些元素接收到用户交互时使其可见,或者使用 CSS pointer-events 属性禁用指针事件,并通过 disabled 属性禁用或为非表单相关的交互元素设置 tab-index="-1" 将其移出 Tab 键顺序。

使用除 1 以外的 opacity 值会将元素置于一个新的层叠上下文中。

不应单独使用不透明度向屏幕阅读器提供信息。应使用 HTML 的 hidden 属性、CSS 的 visibilitydisplay 样式属性。最好避免使用 aria-hidden 属性,但如果元素已通过不透明度隐藏,那么也应将其对屏幕阅读器隐藏。

不透明度的过渡

当你将先前通过 visibility: hiddendisplay: nonecontent-visibility: hidden 隐藏的内容添加到页面时,若要为元素的 opacity 实现过渡效果,你需要同时使用 @starting-styletransition-behavior: allow-discrete

css
.card {
  transition:
    opacity 5s,
    display 5s;
  background-color: orange;

  transition-behavior: allow-discrete;
  @starting-style {
    opacity: 0;
  }
}

.card.hidden {
  display: none;
  opacity: 0;
}

要启用首次样式的过渡,需要使用 @starting-style 规则。在上面的代码中,在 @starting-style 中设置 opacity: 0 为元素接收其初始样式更新时的过渡提供了一个起点。更多详情,请参阅 @starting-style

要过渡到 display: none,必须设置 transition-behavior: allow-discrete。更多详情请参阅 transition-behavior 属性。

无障碍

如果调整了文本的不透明度,重要的是要确保文本颜色与背景颜色之间的对比度足够高,以便有视力障碍的人能够阅读页面内容。

颜色对比度是通过比较调整了不透明度的文本和背景颜色值的亮度来确定的。为了满足当前的《Web 内容无障碍指南》(WCAG),文本内容的对比度要求为 4.5:1,对于像标题这样的大号文本则要求为 3:1。大号文本定义为 18.66px 且加粗或更大,或者 24px 或更大。

各种操作系统都提供了降低透明度的偏好设置。要根据用户操作系统的透明度偏好设置 opacity,请使用 prefers-reduced-transparency 媒体查询。

正式定义

初始值1
应用于所有元素
继承性
百分比映射到 [0,1] 区间
计算值与将 <number> 裁剪到 [0.0, 1.0] 区间后的指定值相同。
动画类型按计算值类型

正式语法

opacity = 
<opacity-value>

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

示例

设置不透明度

以下示例演示了 opacity 属性如何改变整个元素和内容的不透明度,从而使文本非常难以阅读。

HTML

html
<div class="light">You can barely see this.</div>
<div class="medium">This is easier to see.</div>
<div class="heavy">This is very easy to see.</div>

CSS

css
div {
  background-color: yellow;
  font-weight: bold;
  font-size: 130%;
}
.light {
  opacity: 0.2; /* Barely see the text over the background */
}
.medium {
  opacity: 0.5; /* See the text more clearly over the background */
}
.heavy {
  opacity: 0.9; /* See the text very clearly over the background */
}

结果

在悬停时设置不透明度

在以下示例中,当鼠标悬停时,不透明度会发生变化,这样父元素上的条纹背景图片就会透过图片显示出来。

HTML

html
<div class="wrapper">
  <img
    src="/shared-assets/images/examples/dino.svg"
    alt="MDN Dino"
    width="128"
    height="146"
    class="opacity" />
</div>

CSS

css
img.opacity {
  opacity: 1;
}

img.opacity:hover {
  opacity: 0.5;
}

.wrapper {
  width: 200px;
  height: 160px;
  background-color: #f03cc3;
  background-image: linear-gradient(
    90deg,
    transparent 50%,
    rgb(255 255 255 / 50%) 50%
  );
  background-size: 20px 20px;
}

结果

根据用户偏好设置样式

要根据用户操作系统的透明度偏好来设置元素样式,请使用 prefers-reduced-transparency 媒体查询。以下示例演示了如何使用 prefers-color-scheme 媒体查询根据用户的偏好指定所需的 opacity

css
.element {
  opacity: 0.5;
}

@media (prefers-reduced-transparency) {
  .element {
    opacity: 1;
  }
}

规范

规范
CSS 颜色模块第四版
# propdef-opacity
Scalable Vector Graphics (SVG) 2
# ObjectAndGroupOpacityProperties

浏览器兼容性

另见