2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CSSの優先順位を制する者はバグを制す:セレクタの強さ、カスケード、そして`!important`の真価

Posted at

概要

「なんでこのCSS当たらないんだ?」──
フロントエンド開発で最も多く聞かれるセリフの一つがこれだ。

実際、CSSが効かない原因の大半は「書き方」ではなく「優先順位」にある。
この“目に見えないルール”を正確に把握していなければ、スタイルは意図せず上書きされたり、反映されなかったりする

本記事では、CSSのカスケード・セレクタの優先順位・!important の影響範囲を網羅的に解説し、
「なぜ効かないのか」ではなく「どう書けば確実に効くのか」を理解できる状態を目指す。


対象環境

CSS2.1 / CSS3 対応ブラウザ全般(Chrome / Firefox / Safari / Edge)

そもそもCSSはどうやってスタイルを決定しているか?

CSSには、複数のスタイルが同じ要素に競合したときに、どれを適用するかという厳密なルールがある。
このルールは以下の3段階で構成されている:

  1. 重要度(Origin)
  2. 優先順位(Specificity)
  3. カスケード(定義の順序)

1. 重要度(Origin)

  • ユーザーエージェントスタイルシート(ブラウザ標準)
  • 開発者スタイルシート(自分が書いたCSS)
  • ユーザー定義スタイル(特別な設定)
  • !important で強制されるスタイル(全てを上書き)

!important は最も強いが、乱用すると設計が崩壊するので注意。


2. 優先順位(Specificity:セレクタの強さ)

各セレクタは、以下の「スコア」に基づいて競合を判定される:

セレクタ例 スコア(A,B,C,D) 意味
div 0,0,0,1 タグセレクタ
.btn 0,0,1,0 クラスセレクタ
#header 0,1,0,0 IDセレクタ
button.btn.primary 0,0,2,1 クラス2つ + 要素1つ
div#main .btn.active 0,1,2,1 ID1 + クラス2 + 要素1
style="color:red" 1,0,0,0 インラインスタイル(最も強い)
  • ID > class > element
  • より強いスコアを持つスタイルが適用される

3. カスケード(定義の順序)

スコアが同じ場合は、後から書かれたスタイルが優先される

.btn {
  color: black;     /* 無視される */
}
.btn {
  color: red;       /* 上書きされる */
}

!important の真価と危険性

.btn {
  color: red !important;
}
  • !important は優先順位・定義順序をすべて無視して強制的に適用される
  • ただし、より強いセレクタ + !important によって上書きされることはある
/* 上書きできる例 */
#main .btn {
  color: blue !important;
}

❌ 乱用パターン

  • スタイルが当たらないからとりあえず !important をつける
  • 後から他の場所でさらに !important を重ねる

管理不能なスタイル競合地獄へ


実践Tips:特定セレクタを確実に勝たせたいとき

方法1:セレクタのスコアを高める

/* 弱い */
.button {
  background: gray;
}

/* 強い(クラスを増やす) */
.page .form .button {
  background: blue;
}

方法2:インラインスタイル(緊急性が高い場合)

<div style="color: red;">緊急スタイル</div>

方法3:設計でレイヤーを分ける(BEM/SMACSSなど)

命名規則やレイヤー設計を導入すれば、無理にセレクタを強くする必要がなくなる。


よくある疑問と回答

Q. style属性 が最強?

→ はい、インラインスタイルは基本的に全ての外部CSSより強いです。ただし !important 付きのIDセレクタには負ける場合があります。

Q. !important は一切使ってはいけないのか?

→ いいえ。どうしても強制が必要なケース(例:ライブラリ上書き)では有効。ただし局所的に限定して使うべきです。

Q. なぜBEMやUtility CSSが推奨されるのか?

→ 特定セレクタの強さに依存しなくても、スタイルが意図通りに適用されるから。構造で管理する時代へ。


結語

CSSが“効く”かどうかは、見た目の問題ではなく、ルールの競合に勝っているかどうかで決まる。

その勝敗を分けるのは「何をどう書いたか」──セレクタの設計力だ。
そして、!important を使わずに済む設計が、美しいCSSの基準である。

スタイルが乱れるのは、書き方ではなく設計の乱れ
優先順位のルールを理解し、CSSと「戦う」のではなく「操る」側へ進もう。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?