CSSセレクター詳細度チェッカー オンライン。セレクターの重みを可視化

CSSセレクターの詳細度と正確な重みを計算します。どのCSSルールがカスケードで勝つかを視覚的に確認でき、!importantの乱用を防ぐのに役立つツールです。

VS
このセレクターが勝ちです!
0 ID
0 クラス / 擬似
0 要素
このセレクターが勝ちです!
0 ID
0 クラス / 擬似
0 要素
両方のセレクターの重みが同じです。同じ要素に対して競合する場合、CSSで後に書かれた方が優先されます。
ユーティリティスタジオ

このユーティリティをあなたのサイトに追加しませんか?

WordPress、Notion、またはご自身のサイト向けに、カラーとダークモードをカスタマイズできます。

よくある質問

CSSの詳細度とは何ですか?

詳細度とは、複数のCSSルールが競合する際にブラウザがどのルールを適用するかを決定するアルゴリズムです。3列のスコア(A、B、C)で表され、それぞれIDの数、クラス・属性・擬似クラスの数、要素・擬似要素の数を示します。

クラスセレクターはIDセレクターに勝てますか?

直接には勝てません。ID(1,0,0)はどれだけ多くのクラス(0,N,0)があっても必ず勝ちます。詳細度の列間には繰り上がりがないためです。100個のクラス(0,100,0)があっても、たった1つのID(1,0,0)には勝てません。

2つのセレクターの詳細度が同じ場合はどうなりますか?

2つのセレクターのスコアがまったく同じ場合、CSSファイルで後に書かれた方が優先されます。これが「カスケードの自然順序」です。このツールは同点になった場合に視覚的に通知します。

なぜ !important を使うのは悪い習慣とされていますか?

!important を使うと、そのスタイル宣言が他のすべてのルールより強制的に優先されてしまい、CSSの自然なカスケードが崩れます。大規模なプロジェクトではデバッグが困難になる問題を引き起こします。BEMのような手法は、!importantを使わなくて済むよう詳細度をフラットに保つことを推奨しています。

# CSSの詳細度とは?

CSSの詳細度とは、ブラウザが特定の要素にどのプロパティ値を適用するかを決定するアルゴリズムです。ルールが「どれだけ具体的か」をブラウザに伝える数値スコアと言えます。2つのルールの詳細度が異なる場合、書かれた順序に関係なく、重みが大きい方が優先されます。同じ重みの場合は、ソースコードで後に宣言された方が優先されます。

# CSSの詳細度の計算方法

詳細度は3つのカテゴリに基づいて計算され、(A, B, C) という3列の重みとして表されます:
  • 列A(ID):一意の識別子の数を数えます。例:#header は列Aで1としてカウントされます。
  • 列B(クラス、属性、擬似クラス):すべてのクラス(.button)、属性([type="text"])、擬似クラス(:hover)を数えます。
  • 列C(要素、擬似要素):すべてのHTML要素(divh1)と擬似要素(::before)を数えます。

# 黄金律:列をまたいだ繰り上がりはない

詳細度が (0,50,0) のルールは、(1,0,0) のルールより絶対に強くなりません。IDひとつがクラスをいくつ積み重ねても勝ちます。列間に繰り上がりは存在しません。

# !important の問題とBEMアーキテクチャ

!important は詳細度ルールの例外です。使用すると、その宣言が他のどんなルールよりも自動的に優先されます。自然なカスケードを壊すため、悪い習慣とされています。大規模プロジェクトでの詳細度の衝突を避けるために、BEM のような手法では1段階のクラスセレクターのみを使うことを推奨し、詳細度を (0,1,0) のフラットな状態に保ちます。

参考文献