てもとツール

CSS詳細度チェッカー|セレクタの強さと、どの宣言が勝つかを確かめる

CSSセレクタの詳細度を部品ごとに数えて比べます。CSSを貼ると、同じプロパティの宣言のどれが使われるかと、!important・style属性・@layer・詳細度・書いた順のどこで決まったかを出します。

ブラウザ内処理 公開
モード

詳細度で勝ち負けが決まるのは、同じ要素に当たり、!important・style 属性・@layer がそろっているときだけです(これらは詳細度より先に比べます)。

セレクタを入れてください

1 行に 1 つ書くと、詳細度と部品ごとの内訳、勝つ順を出します。

このツールについて

使い方・特徴・補足情報

CSS詳細度チェッカーとは

CSS詳細度チェッカーは、CSS のセレクタがどれだけ強いかを数えるツールです。 #nav a のようなセレクタを 1 行に 1 つ書くと、詳細度 (A, B, C) と部品ごとの内訳を出します。

:is() は引数のうち最も高いもの、:where() は 0 のように、間違えやすい数え方も内訳に書きます。 並べたセレクタは勝つ順に並び、1 位と 2 位の差がどの桁で付いたかも分かります。

CSS を貼るモードでは、同じプロパティの宣言を並べて、どれが使われるかを出します。 !important・style 属性・@layer・詳細度・書いた順のどこで決まったかを、宣言ごとに書きます。

こんな人におすすめ

CSS を書くデザイナーやコーダー

楽になること

CSS が効かない原因の切り分け

避けたい手間

詳細度の数え違いで直す場所を誤ること

解決できる困りごと

  • ID とクラスの数を数え間違えて、効かない理由を詳細度のせいだと思い込む手間が減ります
  • :is() や :where() を使ったセレクタの強さを、仕様を読み返さずに確かめられます
  • !important を足しても効かないとき、レイヤーの順番が逆になっていることに気づけます
  • 詳細度を上げる書き換えを重ねる前に、style 属性や書いた順で負けていないかを先に確かめられます
  • 全角の#や全角スペースが混ざって、別のセレクタとして読まれている書き間違いを見つけられます

使い方

  1. 「セレクタを比べる」の欄に、セレクタを 1 行に 1 つ書きます
  2. 詳細度と部品ごとの内訳、勝つ順の表を読みます
  3. 宣言の勝ち負けを見たいときは「CSS を貼って勝つ宣言を調べる」に切り替えます
  4. CSS と、必要なら style 属性の中身を貼ります
  5. プロパティごとに、使われる宣言と、ほかの宣言が負けた理由を読みます

使用例

ID 1 つはクラス 5 個に勝つ

上の桁(A)が 1 つでも多いほうが勝ちます。B がいくつあっても、A の差は埋まりません。

入力

#main .title
.page .content .article .header .title

出力

1 位: #main .title (1, 1, 0)
2 位: .page .content .article .header .title (0, 5, 0)
1 位(1 行目)と 2 位(2 行目)は、A(ID の数)で決まりました。A が 1 つでも多ければ、B や C がいくつあっても勝ちます。

:is() と :where() の数え方の違い

中身が同じでも、:is() は引数の最も高い #sidebar の重さになり、:where() は中身ごと 0 になります。

入力

:is(#sidebar, .panel) a
:where(#sidebar, .panel) a

出力

:is(#sidebar, .panel) a → (1, 0, 1)
:where(#sidebar, .panel) a → (0, 0, 1)

!important ではレイヤーの順番が逆になる

通常の宣言なら後の theme が勝ちますが、!important どうしでは先の base が勝ちます。詳細度の高い #submit も負けます。

入力

CSS: @layer base, theme; @layer base { .button { color: gray !important; } } @layer theme { #submit { color: navy !important; } }

出力

使われる: gray !important(.button(1 行目) / 詳細度 (0, 1, 0) / レイヤー base / !important)
負け: navy !important — レイヤーで負けました

style 属性は詳細度より先に効く

詳細度の高いセレクタで書いても、style 属性の宣言には負けます。style 属性を外すか、!important を使うかの判断材料になります。

入力

CSS: #submit.button { padding: 8px 16px; }
style 属性: padding: 12px;

出力

使われる: 12px(style 属性)
負け: 8px 16px — style 属性で負けました

活用シーン

効かないスタイルの原因を探す

効かないプロパティを含むルールを全部貼ります。勝った宣言と、決め手が詳細度か書いた順かが分かるので、直す場所を絞れます。

コードレビューでセレクタを比べる

差分に出てきたセレクタを 1 行ずつ並べます。勝つ順と決め手の桁が出るので、上書きの意図どおりかを見られます。

@layer を入れる前に順番を確かめる

レイヤーに分けた CSS を貼り、レイヤーの順番の一覧を見ます。!important の宣言だけ順番が逆になる点も一緒に確かめます。

リセット CSS を :where() で弱くする

:where() で包む前と後のセレクタを並べます。詳細度が 0 になり、あとから書くクラスで上書きしやすくなったかを見ます。

style 属性との関係を確かめる

JavaScript が付ける style 属性の中身を、別の欄に入れます。どの宣言が style 属性に負け、どの !important が勝つかが分かります。

技術的な解説

補足: 仕組み

詳細度の計算では、ID の数を A、クラス・属性・擬似クラスの数を B、型と擬似要素の数を C とします。 比べるときは A から順に見て、上の桁が多いほうが勝ちます。

CSS を貼るモードは、CSS Cascading Level 5 の順で比べます。 重要度・style 属性・レイヤー・詳細度・書いた順のうち、最初に差が付いた段が決め手です。

読めるかどうかは、セレクタを CSSStyleSheet.insertRule、値を CSS.supports に聞きます。

もっと詳しく

!important を付けるとレイヤーの勝ち負けが逆になる

通常の宣言では、後に宣言したレイヤーが勝ちます。 レイヤーに入れていない宣言は、どのレイヤーより後として扱われます。

ところが !important の宣言では、この順番が逆になります。 先のレイヤーの !important が勝ち、レイヤーの外の !important がいちばん弱くなります。

詳細度が使われるのは、手前の段がそろったとき

詳細度を上げても効かないときは、手前の段で負けていることがあります。 !important の有無と style 属性は、詳細度より先に比べられます。

レイヤーが違えば、詳細度を比べる前に勝ち負けが決まります。 このツールは負けた宣言ごとに、どの段で負けたかを書きます。

Chromium に答えさせて確かめた範囲

期待値は、Chromium 141 の開発者ツールが返す詳細度と、getComputedStyle で読んだ値から作りました。 セレクタ 165 件と、勝ち負けを見る CSS 69 通りで突き合わせています。

Chromium だけが読まない書き方 11 件を除き、詳細度と勝った宣言が一致しました。 HTML は見ていないので、貼ったルールがすべて同じ要素に当たるとして比べます。

よくある質問

!important を付けても効かないのはなぜですか

ほかの !important に負けている可能性があります。!important どうしでは、先に宣言したレイヤーと style 属性が勝つので、CSS を貼るモードで決め手を確かめます。

:is() と :where() は何が違いますか

当たる要素は同じで、詳細度だけが違います。:is() は引数のうち最も高いものになり、:where() は中身に関係なく 0 になります。

セレクタをカンマで並べたときの詳細度はどうなりますか

カンマで区切った 1 つずつに詳細度があり、要素に当たったもののうち最も高いものが使われます。このツールは最も高いもので並べ、順番が入れ替わりうるときは知らせます。

HTML を貼らなくても勝ち負けが分かりますか

セレクタの詳細度は HTML が無くても決まります。CSS の勝ち負けは、貼ったルールがすべて同じ要素に当たるとして出すので、当たるかどうかは開発者ツールで確かめます。

参考・出典

本ツールの計算式・判定基準は上記の公的機関・公式情報源を参考にしています。最新の情報は各リンク先をご確認ください。

関連記事

このツールの使い方や活用例をブログでも紹介しています。

関連ツール

同じカテゴリの他のツールも合わせてどうぞ。