Skip to content

CSS 偽元素 ::backdrop:對話框的背景遮罩

CSS 偽元素 backdrop:全螢幕與對話框的背景遮罩

<dialog> 元素或選取器後面使用 ::,再接續 backdrop 即可選取到這個偽元素並進行背景遮罩的樣式設定。

以下案例便是利用 ::backdrop 將對象選取出來並進行樣式的改變。

小提醒

必須 JavaScript 執行 showModal() 才能看到這個偽元素。

基本寫法

html
<dialog id="modal">
  <p>確定要刪除嗎?</p>
  <button onclick="modal.close()">關閉</button>
</dialog>
css
dialog::backdrop {
  background: rgb(0 0 0 / 0.5);
  backdrop-filter: blur(4px);
}
js
document.querySelector('#modal').showModal();

必須用 showModal() 開啟,遮罩層才會存在;用一般方式顯示的對話框沒有這一層。

與自製遮罩的差別

比較項目::backdrop自己疊一層
需要額外標籤
層級問題由瀏覽器置頂要自行處理
背景捲動鎖定內建要自行處理

小提醒

必須 JavaScript 執行 showModal() 才能看到這個偽元素。

常見問題

為什麼設定了卻看不到效果?

因為對話框必須以 showModal() 開啟。用一般方式顯示 <dialog> 時不會產生遮罩層,也就選不到這個偽元素。

它和自己做一層遮罩有什麼不同?

它由瀏覽器產生並置於頂層,不必處理層級與捲動鎖定,也不會被父層的樣式影響。自製遮罩則常常要與 定位 和溢出設定纏鬥。

可以做出模糊背景嗎?

可以,在這個偽元素上加 backdrop-filter 即可,通常再搭配半透明底色。要留意模糊範圍大時的效能。

延伸閱讀