k8o

Blog

公開: 2026年10月20日(火)約4分で読めます

revert-ruleでルール1つ分だけカスケードを巻き戻す

revert-ruleは、プロパティの値を、自身が書かれたスタイルルールがなかった場合の値に戻すCSSのキーワードです。Firefox 150とChrome 148に続いてSafari 27が対応し、Baseline 2026に加わりました。revertやrevert-layerとの戻り先の違いと、変数が無いときだけ宣言を取り消す書き方を整理します。

Newly availablerevert-rule2026年〜
  • Chrome148
  • Edge148
  • Firefox150
  • Safari27

はじめに

ボタンの背景色を基本のルールで決めておき、カスタムプロパティが渡されたときだけ別のルールで差し替えたいとします。素直に書くと、--tintを渡さなかったボタンの背景はroyalblueではなく透明になります。

css
.button {
  background-color: royalblue;
}

.button.tinted {
  background-color: var(--tint); /* --tint が無いと → transparent */
}

.button.tintedの宣言が選ばれた時点で、.buttonのroyalblueは使われません。--tintが無いと値が無効になり、初期値のtransparentになります。これまでは、基本のルールをbackground-color: var(--tint, royalblue)のように書いておき、CSS変数を上書きして差し替えるしかありませんでした。

revert-ruleは、プロパティの値を、自身が書かれたスタイルルールがなかった場合の値に戻すCSSのキーワードです。Firefox 150とChrome 148に続いてSafari 27が対応し、Baseline 2026に加わりました。

revert・revert-layerとの違い

3つのキーワードは巻き戻す単位が違います。revertはオリジン、revert-layerはカスケードレイヤー、revert-ruleはスタイルルールを単位にします。同じcomponentsレイヤーに3つのキーワードを書き、背景色がそれぞれどの値になるかをコメントに示します。

css
@layer base {
  .highlight {
    background-color: lightgray;
  }
}

@layer components {
  .highlight {
    background-color: royalblue;
  }

  .highlight.rule {
    background-color: revert-rule; /* → royalblue */
  }

  .highlight.layer {
    background-color: revert-layer; /* → lightgray */
  }

  .highlight.origin {
    background-color: revert; /* → transparent */
  }
}

revert-ruleだけが同じレイヤーの.highlightに戻り、ほかの2つはレイヤーやオリジンごと飛ばします。

Playground

キーワードを切り替えて戻り先を比べる

revert-rule/playgrounds/revert-rule

同じレイヤーの前のルール、前のレイヤー、ブラウザの既定のスタイルのどこへ値が戻るかを、revert-rule・revert-layer・revertを切り替えて確認できます。

.rr-quietに書くキーワード

.rr-highlightと.rr-highlight.rr-quiet

要素に当てているCSSです。

@layer rr-base {
  .rr-highlight {
    color: var(--color-fg-base);
    background-color: var(--color-bg-emphasize);
  }
}

@layer rr-components {
  .rr-highlight {
    color: var(--color-primary-fg);
    background-color: var(--color-primary-bg);
  }

  .rr-highlight.rr-quiet {
    color: revert-rule;
    background-color: revert-rule;
  }
}

変数が無いときだけ宣言を取り消す

冒頭の例は、var()のフォールバックにrevert-ruleを書けば解決します。フォールバックにはCSS全体キーワードを書けます。

css
.button {
  background-color: royalblue;
}

.button.tinted {
  background-color: var(--tint, revert-rule);
}

--tintが未定義なら、このルールの宣言はなかったことになり、.buttonのroyalblueが当たります。--tint: revert-ruleと変数のほうに書くと、戻るのは--tint自体なので注意してください。

同じルールの宣言には戻らない

revert-ruleは、同じルールで先に書いた宣言にも戻りません。

css
.highlight.quiet {
  color: red;
  color: revert-rule;
}

colorはredではなく前のルールの値になります。仕様では、そのスタイルルールが存在しなかったものとして値を計算し直すからです。

おわりに

revert-ruleを使うと、ルールの宣言だけをなかったことにできます。var()のフォールバックと組み合わせれば、変数が無いときだけ宣言を取り消せます。

読了率 0%
もくじ