目次
- CSSが反映されないとはどういう状態?
- まずはここから|最短で直すチェック順
- 最重要チェックリスト
- CSSファイルが読み込まれていない
- 確認ポイント
- 一瞬で確認する方法
- DevToolsで本当に読み込まれているか確認する
- 手順
- セレクタが一致していない
- DevToolsで確認する方法
- HTML構造とセレクタのズレ
- 優先順位(カスケード)で負けている
- 優先順位の基本
- よくある落とし穴
- !important地獄にハマっていない?
- CSSの文法ミス
- DevToolsでの見え方
- メディアクエリが効かない
- viewportも確認
- スマホだけ横スクロールが出る場合
- 対処
- widthが効かない・displayが変わらない理由
- キャッシュが原因
- 確実な対処
- JavaScriptに上書きされているケース
- 最終チェックリスト(保存推奨)
- それでも直らないときの考え方
- まとめ
CSSが反映されないとはどういう状態?
CSSが反映されない状態とは、スタイルを書いているのにブラウザの表示が変わらないことです。
たとえばこんな症状。
- 色を変えたのに変わらない
- 余白(margin / padding)が効かない
- スマホ表示だけレイアウトが崩れる
- 横スクロールが消えない
原因は1つとは限りません。
むしろ、2〜3個同時にミスしていることも普通にあります。
僕も昔、30分悩んだあとに「クラス名のスペルミス+キャッシュ」のダブルパンチだったことがありました。あれは本当に消耗します。
でも大丈夫です。
順番に確認すれば、ほぼ確実に直せます。
まずはここから|最短で直すチェック順
「css 反映されない」と検索したら、まずこの順番で確認してください。
最重要チェックリスト
- CSSファイルは読み込まれているか
- セレクタは正しく一致しているか
- 優先順位で負けていないか
- 文法エラーはないか
- キャッシュが残っていないか
- メディアクエリの条件は合っているか
上から潰していけば、だいたい解決します。
CSSファイルが読み込まれていない
意外と一番多い原因です。
<link rel="stylesheet" href="style.css">
確認ポイント
- ファイルパスは正しい?(相対パスと絶対パスを混同していないか)
- スペルミスはない?
- サーバーにアップし忘れていない?
- 大文字小文字は合っている?(サーバー環境によっては区別されます)
一瞬で確認する方法
body {
background: red;
}
画面が真っ赤にならなければ、読み込まれていません。
DevToolsで本当に読み込まれているか確認する
ここからが一段深い確認方法です。
手順
- Chromeでページを開く
- 右クリック → 検証
- 「Network」タブを開く
- 上部フィルターで「CSS」を選択
- ページをリロード
style.css が 200 OK で表示されているか確認します。
- 404 → パスミス
- 301/302 → リダイレクト問題
- 読み込まれていない → linkタグが間違っている
これを見るだけで原因が一瞬で分かることも多いです。
セレクタが一致していない
CSSは「完全一致」しないと効きません。
.title {
color: blue;
}
<h1 class="titile">タイトル</h1>
これ、よくやります。
しかも気づきにくい。
DevToolsで確認する方法
- 対象要素を右クリック → 検証
- 右側の「Styles」パネルを見る
- CSSがグレーで打ち消されていないか確認
そもそも表示されていなければ、セレクタが間違っています。
HTML構造とセレクタのズレ
.box p {
color: red;
}
<p class="box">テキスト</p>
.box の中に p がないので効きません。
「子孫セレクタ」と「同じ要素へのクラス指定」を混同しがちです。
優先順位(カスケード)で負けている
CSSには「どの指定が強いか」というルールがあります。
優先順位の基本
- !important
- インラインスタイル
- ID
- クラス
- タグ
p { color: red; }
.text { color: blue; }
<p class="text">テキスト</p>
青になります。
よくある落とし穴
共通CSSの後に読み込まれる別ファイルで上書きされているケース。
読み込み順も超重要です。
!important地獄にハマっていない?
p {
color: red !important;
}
これがあると、普通の指定では勝てません。
プロジェクトが大きくなるほど、
「なんで効かないんだ?」の原因が !important だった、ということは本当に多いです。
可能な限り使わない設計にしましょう。
CSSの文法ミス
.box {
color: red
background: blue;
}
セミコロンが抜けると、それ以降が無効になることがあります。
DevToolsでの見え方
- エラー行が黄色や赤で表示される
- その下の指定が適用されていない
インデントを整えるだけで発見しやすくなります。
メディアクエリが効かない
スマホ崩れの原因ナンバーワン。
@media (max-width: 768) {
}
正しくは:
@media (max-width: 768px) {
}
px忘れ、めちゃくちゃ多いです。
viewportも確認
<meta name="viewport" content="width=device-width, initial-scale=1.0">
これがないと、スマホ用CSSが意図通り動きません。
スマホだけ横スクロールが出る場合
「横スクロール 消えない」で検索する人が多い問題。
原因の多くはこれです。
width: 100vw;
100vw はスクロールバー幅も含みます。
結果、はみ出します。
対処
width: 100%;
もしくは
overflow-x: hidden;
ただし、これは応急処置。
本質は「どの要素がはみ出しているか」をDevToolsで特定することです。
widthが効かない・displayが変わらない理由
親要素の影響を受けている可能性があります。
.parent {
display: flex;
}
このとき、子要素の幅指定はflexのルールに従います。
CSSは「単体」ではなく「関係性」で動きます。
ここを理解できると、一段レベルが上がります。
キャッシュが原因
CSSは強くキャッシュされます。
確実な対処
- Ctrl + F5
- シークレットモード
- クエリをつける
<link rel="stylesheet" href="style.css?v=2">
サーバー環境ではこれがほぼ必須です。
JavaScriptに上書きされているケース
CSSが一瞬だけ反映される場合、
JSで書き換えられている可能性があります。
DevToolsの「Elements」タブで、
リアルタイムでスタイルが変わるか確認できます。
最終チェックリスト(保存推奨)
- CSSは200で読み込まれている
- スペルミスなし
- セレクタが一致している
- 上書きされていない
- !importantに負けていない
- メディアクエリ条件OK
- viewportあり
- キャッシュクリア済み
それでも直らないときの考え方
「なぜ効かないか?」ではなく、
「ブラウザは今、どのCSSを適用しているか?」
これを見る。
DevToolsを使えば、答えは必ず表示されています。
まとめ
CSSが反映されない原因は、
ほぼ次のどれかです。
- 読み込みミス
- セレクタ不一致
- 優先順位
- 文法エラー
- キャッシュ
- メディアクエリ
焦らなくて大丈夫です。
順番に確認すれば、必ず原因は見つかります。
そしてDevToolsを使いこなせるようになると、解決スピードは一気に上がります。
「css 反映されない」と検索してここに来たなら、
まずはCSSが本当に読み込まれているかを確認してください。
そこから、ひとつずつ潰していきましょう。