【CSS】revert-layerとは|@layer 内でプロパティをリセットする方法

どうも、くまだです。

@layer(カスケードレイヤー)で使えるrevert-layer のメモ。

revert-layerとは

revert-layer は CSS のグローバルキーワードのひとつで、現在のカスケードレイヤーで設定されたスタイルをなかったことにして、ひとつ下のレイヤーの値に戻すキーワードです。

@layerと組み合わせて使うことが前提です。

@layer base {
  a {
    color: blue;
    text-decoration: underline;
  }
}

@layer utilities {
  a {
    color: revert-layer; /* base レイヤーの blue に戻る */
  }

この例では utilities レイヤーで color を revert-layer にすると、base レイヤーで指定した blue が有効になります。

CSS系のリセット系との比較だと、以下のようになります。

  • initial: CSS 仕様の初期値(ブラウザデフォルトも無視)
  • inherit: 親要素の値を継承する
  • unset:継承プロパティなら inherit、非継承なら initial
  • revert:UA スタイルシート(ブラウザデフォルト)まで巻き戻す
  • revert-layer: ひとつ下のカスケードレイヤーの値まで巻き戻す

revert-layer が役立つのは、レイヤーで管理しているベーススタイルを、特定のコンポーネントだけ打ち消したいときです。

 <section>
    <h2>例2:.btn-ghost(base の button スタイルを revert-layer でリセット)</h2>

    <div style="display: flex; gap: 16px; align-items: center; flex-wrap: wrap;">
      <button>通常の button(base スタイル:royalblue)</button>
      <button class="btn-ghost">Ghost button(revert-layer でリセット済み)</button>
    </div>
  </section>
@layer base {
  button {
    background-color: royalblue;
    color: white;
    border: none;
    padding: 0.5em 1em;
    border-radius: 4px;
  }
}

@layer components {
  .btn-ghost {
    /* base レイヤーのスタイルをすべてなかったことに */
    background-color: revert-layer;
    color: revert-layer;
    border: revert-layer;
    padding: revert-layer;
    border-radius: revert-layer;

    /* ここで改めてスタイルを当てる */
    background-color: transparent;
    color: currentColor;
    border: 1px solid currentColor;
    padding: 0.4em 0.8em;
  }
}

all: revert-layer でまとめてリセットもできます。all: revert-layer は「このレイヤーで書いたスタイルをすべてなかったことにする」という意味になります。

@layer components {
  .card--plain {
    all: revert-layer; /* このレイヤーで指定したスタイルをまとめてリセット */
  }
}
  • revert-layer は、現在のレイヤーで設定したスタイルだけをなかったことにするキーワード
  • initial はすべてリセット、revert はブラウザデフォルトまで戻るのに対して、revert-layer はひとつ下のレイヤーまで戻る
  • all: revert-layer でまとめてリセットすることも可能

ここまで読んでくださりありがとうございました。

この記事を書いた人