CSSでオーバーレイのスタイルが期待通りに表示されない、::backdrop疑似要素の変更された使い方

ダイアログやモーダルを表示する時に、コンテンツの上にオーバーレイを使用します。このオーバーレイはコンテンツの上に表示されるように::backdrop疑似要素で最上位レイヤーにするのが簡単です。

先日アップデートされたChrome 122でこの::backdrop疑似要素の値の継承ルールが変更されました。

CSSでオーバーレイのスタイルが期待通りに表示されない、::backdrop疑似要素の変更された使い方

Changes to CSS ::backdrop inheritance
by Bramus

下記は各ポイントを意訳したものです。
※元サイト様のライセンスに基づいて翻訳しています。基づいてというのは、貢献部分に関して同ライセンスも含みます。

これまでの::backdrop疑似要素

フルスクリーンに表示する要素用のAPIを定義するFullscreen APIでは、最上位レイヤーや::backdrop疑似要素といった新しいコンセプトが導入されました。

  • 最上位レイヤーは、ビューポート内でユーザーにもっとも近い位置(最上位)にレンダリングされる新しいスタッキングレイヤーです。これはビューポートのサイズと同じで、他のすべてのレイヤーの上に表示されます。
  • ::backdrop疑似要素は、ビューポートのサイズと同じサイズのボックスで、最上位レイヤーに表示される要素のすぐ下にレンダリングされます。

さらに詳しくは、先日の記事をご覧ください。

要素を最上位に表示する「最上位レイヤー(top layer)」の基礎知識と使い方

CSSのz-index: 10000;はいらなくなる、要素を最上位に表示する「最上位レイヤー(top layer)」の基礎知識と使い方

::backdrop疑似要素の元の仕様にある特徴の一つは、次のようなものでした。

どの要素からも継承されず、どの要素からも継承されません。

この仕様は::backdrop疑似要素のスタイルを分離するのには便利でしたが、::backdrop疑似要素が:rootで宣言されたカスタムプロパティにアクセスできないことも意味しました。このため、デベロッパーの間で混乱が生じました。

回避策として、カスタムプロパティを:rootだけでなく、::backdropにも明示的に宣言して利用可能にする必要がありました。

アップデートされた::backdrop疑似要素

::backdrop疑似要素のこの問題を解決するために、CSS Working Groupはこれらのコンセプトを採用し、CSS Positioned Layout Module Level 4に明記しました。

定義を新しい仕様に移行するとともに、定義自体もアップデートされました。

デベロッパーに直接的な影響を与えるアップデートは、::backdrop疑似要素がツリー永続要素になり、元の要素から継承可能なプロパティをすべて継承することです。

この変更はChrome 122でサポートされ、特定の要素のカスタムプロパティ値を上書きすることが可能になり、::backdrop疑似要素はそのプロパティにアクセスできるようになりました。たとえば、開いている<dialog>要素に関連付けられた::backdrop疑似要素は、その<dialog>要素で使用可能なカスタムプロパティにアクセスできるようになりました。

実際の動作は、デモページでご覧ください。
Chrome 122以降は、背景が薄紫色になります。これは::backdrop疑似要素が<dialog>要素から継承可能なプロパティ(カスタムプロパティを含む)を継承しているからです。

See the Pen
dialog::backdrop
by coliss (@coliss)
on CodePen.

最上位レイヤーで開く<dialog>要素のデモ。
Chrome 122以降では::backdrop疑似要素は--backdrop-colorにアクセスして、背景に色を付けることができます。

sponsors

top of page

©2024 coliss