::backdrop

Baseline 广泛可用 *

此特性已经十分成熟,可在许多设备和浏览器版本上使用。自 2022 年 3 月起,它已在各浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

::backdrop CSS 伪元素 是一个与视口大小相同的盒子,它渲染在顶层中任何正在呈现的元素之下。

试一试

button {
  font-size: 1.2rem;
  padding: 5px 15px;
}

dialog::backdrop {
  background-color: salmon;
}
<button id="showDialogBtn">Show a dialog</button>

<dialog id="favDialog">
  <form method="dialog">
    <p>The background shown outside of this dialog is a backdrop.</p>
    <button id="confirmBtn">Close the dialog</button>
  </form>
</dialog>
const showDialogBtn = document.getElementById("showDialogBtn");
const favDialog = document.getElementById("favDialog");

showDialogBtn.addEventListener("click", () => favDialog.showModal());

语法

css
::backdrop {
  /* ... */
}

描述

背景会在以下情况中出现

当多个元素被放置到顶层时,每个元素都有其自己的 ::backdrop 伪元素。

css
/* Backdrop is only displayed when dialog is opened with dialog.showModal() */
dialog::backdrop {
  background: rgb(255 0 0 / 25%);
}

元素在顶层以后进先出(LIFO)的方式堆叠。::backdrop 伪元素可以遮盖、样式化或完全隐藏位于顶层元素下方的所有内容。

::backdrop 既不继承其他元素,也不被其他元素继承。对适用于此伪元素的属性没有限制。

示例

样式化模态对话框的背景

在此示例中,我们使用 ::backdrop 伪元素来样式化模态 <dialog> 打开时使用的背景。

HTML

我们包含一个 <button>,单击后将打开包含的 <dialog>。当 <dialog> 打开时,我们将焦点设置在关闭对话框的按钮上。

html
<dialog>
  <button autofocus>Close</button>
  <p>This modal dialog has a beautiful backdrop!</p>
</dialog>
<button>Show the dialog</button>

CSS

我们为背景添加了一个背景,使用 CSS 渐变创建了一个色彩缤纷的甜甜圈。

css
::backdrop {
  background-image:
    radial-gradient(
      circle,
      white 0 5vw,
      transparent 5vw 20vw,
      white 20vw 22.5vw,
      #eeeeee 22.5vw
    ),
    conic-gradient(
      #272b66 0 50grad,
      #2d559f 50grad 100grad,
      #9ac147 100grad 150grad,
      #639b47 150grad 200grad,
      #e1e23b 200grad 250grad,
      #f7941e 250grad 300grad,
      #662a6c 300grad 350grad,
      #9a1d34 350grad 400grad,
      #43a1cd 100grad 150grad,
      #ba3e2e
    );
}

JavaScript

对话框使用 .showModal() 方法以模态方式打开,并使用 .close() 方法关闭。

js
const dialog = document.querySelector("dialog");
const showButton = document.querySelector("dialog + button");
const closeButton = document.querySelector("dialog button");

// "Show the dialog" button opens the dialog modally
showButton.addEventListener("click", () => {
  dialog.showModal();
});

// "Close" button closes the dialog
closeButton.addEventListener("click", () => {
  dialog.close();
});

结果

规范

规范
CSS 定位布局模块第 4 级
# 背景

浏览器兼容性

另见