[初心者様向け]CSSが反映されない原因「他の記述が優先されている」とは

他の記述が優先される

カスタマイズをしていると、よく遭遇するのが「思ったように反映されない」トラブル。

CSSトラブルは、WordPress初心者の方はもちろん、有識者の方でも陥りがちなエラーのようです。

この章では

初心者の私が、初心者なりに理解・解決できた「他の記述が優先されている」の謎を解いていきます

「他の記述が優先されている」エラーを解決するためには、まずセレクタとは何なのかを理解する必要があります。

ですがこの章にまとめると内容が混濁してしまうので、先に下記のリンク記事を読んでいただくと分かりやすいかと思います。

詳細はこちら

記述の優先とは

記述の優先=CSSの優先順位のこと

CSSの優先順位=詳細度という

色んな場所に、色んな方法で記述されてるCSS。

それだけに、CSSに競合が起きて、どのスタイルを反映させたら良いのかブラウザが混乱しないようにするために、あるルールに従って反映させる優先順位が決められています。

CSSの優先順位を決めるルール

①セレクタの指定方法
②記述した場所と読み込む順番

①セレクタの指定方法とは【4例】

重要 ←この見出しの文字色をに変えたい

・「重要」の文字色をにするためのCSSを記述

【例1】

* {color:red;}

*(アスタリスク)は、すべての要素に対してスタイルを指定するユニバーサルセレクタです。

個別に指定したいものが無い場合は、この記述でまとめることができます。

なので本来ならこの記述で、指定通り″重要″と赤文字で表示されるのですが、他にも下記のような複数の記述がある場合、スタイルの競合が起きて正しく反映されなくなってしまいます。

【例2】

h2 {color:blue;}

h2という見出し要素タグで、見出しの文字色を青色に指定してる記述がある

【例3】

.midashi{color:green;}

.midashiというクラス名で、見出しの文字色を緑色に指定してる記述がある

【例4】

#title{color:black;}

#titleというid名で、見出しの文字色を黒色に指定してる記述がある

するとどうなるかと言うと…

このように、黒色になってしまいます

これが、思ったように反映されない原因ナンバー1です。

ちなみに上の3つの優先順位は、で、が1番弱くなります。

目次へ戻る

詳細度は点数で決まる

詳細度は点数制で評価され、セレクタの書き方によって変わる

詳細度の点数の高いものが優先順位も高い

類似したCSSが複数ある場合、より詳しく記述してあるセレクタほど優先度が高くなります。

とは言え、詳しい記述だから優先するという単純な仕組みではなく、セレクタに割り振られている「点数」によって優先度を決めていると理解するのが正しいです。

詳しい記述になるほど点数も高くなるため、結果としてはより詳しく記述してあるセレクタほど優先度が高いという捉え方で間違ってない気もするのですが(笑)

PCアップ

では、「点数制で評価される」とはどういうことなのか。

分かりやすく砕いていきましょう。

セレクタ・クラス名などの解説はこちら

よく使うセレクタ4種での比較

セレクタ名 記述 点数
id #titleなど[#]を用いた記述 0.1.0.0
クラス .midashiなど[.]を用いた記述 0.0.1.0
タイプ(要素) [h1][p][div][span][table]など 0.0.0.1
ユニバーサル * すべての要素に適用 0.0.0.0

[.]で区切られている4つの数字。
これがセレクタに割り振られている点数です。

左側の数字が大きいものほど評価が高くなる=優先度が高くなります。

上の表で言うと、下にいくほど評価が低くなり、そしてこの点数は、より詳しい記述をするごとに加算されていきます。

記述例①

p.midashi{color:green;}

p.midashi=タイプ(要素)+クラス

タイプセレクタの点数 クラスセレクタの点数
0.0.0.1 0.0.1.0
p.midashiの評価点数
0.0.1.1
記述例②

p#midashi{color:red;}

p#midashi=タイプ(要素)+id

タイプセレクタの点数 idセレクタの点数
0.0.0.1 0.1.0.0
p#midashiの評価点数
0.1.0.1

といった感じです。

このふたつで比較すると、左側からの数字が大きい記述例②[p#midashi]の方が優先されます。

…と、点数のことが何となく把握できても毎回計算するのは面倒ですよね。

慣れるまでは、自分が算出した点数で合ってるのか自信も持てません。

そんな時は、Specificity Calculatorを使って点数を計算してもらいましょう。

Specificity Calculatorの使い方は、こちらのサイト様をご覧ください
CSSトラブルを防ぐ!セレクタの優先順位をマスターしよう
CSSで特につまづく優先順位のルールについて詳しく解説。セレクタ・詳細度・点数制がピンとこない方はこの記事で概要とポイントがわかります。wordpressテーマやフレームワークのカスタムの為にも知っておくべき知識です。#css

では、まったく同じ評価点数の記述がある場合はどうなるのでしょうか。

同じ評価の記述がある場合の優先順位【1】

ここで、記述した場所と読み込む順番が関係してきます。

より分かりやすいよう、記述した場所、読み込む順番のふたつに分けて書いていきますね。

記述した場所とは

同じスタイル指定が複数あった場合、CSSの基本として、後から書かれたものが優先されます。

「上書きの原理」です。

CSSの記述の順番を変えるだけで済むので、最も簡単に変更ができます。

記述例「見出し(h2)を赤文字にしたい」

h2 {color:red;}
h2 {color:blue;}

上記のように同じセレクタ(または同じ点数の記述)が複数ある場合、後に書いてる方が優先されるので、見出しの文字色はになります。

これをに修正したい場合は、下記のようにふたつの記述の順番を変えるだけで解決します。

h2 {color:blue;}
h2 {color:red;}

もし「上書きの原理」が原因だったら、わざわざ打ち変えなくてもコピペで入れ替えることができるので簡単ですね。

ただし、点数に違いがある場合は点数の高い方が優先されるので、記述の場所は無効になります。

同じ評価の記述がある場合の優先順位【2】

次は読み込む順番についてです。

まず、CSSの記述場所は3箇所あります。

index.html[ページのhead内]
インライン[記事上で直接指定など]
外部CSS[style.css]

この3箇所の内、どれから先に読み込まれ、どれが最優先されるのかということです。

最も優先されるのは②のインライン記述です。

インライン記述については後述で解説してるので、ここでは割愛します。

では残りの①と③、どちらが優先されるのでしょうか。

答えは「後から読み込まれた方」です。

え?ですよね。どっちが後から読み込まれるねん!って話ですよ。

実はこの読み込む順番、ちょっと曲者なんです。

PCと女性の手

基本は先にindex.htmlが読み込まれ、外部CSSが後に読み込まれるため、外部CSSに記述されたものが優先されると認識してOKです。

ですがメンテナンスや構造設計の関係から、外部CSSより後にindex.htmlを記述するのが一般的なため、このふたつの読み込み順が変わることがあるらしいのです。

実際私がこの手のエラー対応をしたわけではありませんし、この読み込み順の謎についての詳しい情報も見かけたことが無いので、これ以上の詳細を掲載できないのが辛いところですが…。

使用テーマやスキンが更新された時にデザイン崩れが起きたり、CSSを編集する時は必ず子テーマをいじるよう推奨されてるのは、もしかするとこういった理由からなのかな?なんて、勝手ながら推測したりしてます。

いずれにせよ私にはどうにもできない部分であることは間違いないので、CSSが反映されない原因がもしここにあった場合は、諦めるしかないと思ってます。

では最後に、ここまで書いてきた方法を覆す「さらに強い記述法」を解説していきます。

目次へ戻る

さらに強い記述

上記で解説してきた記述方法よりも、さらに強い優先度をもつ記述法があります。

①インラインスタイルシート形式
②!important(インポータント)

のふたつです。

このふたつの記述法は断トツで点数が高く、記述した場所や読み込む順番の効果がありません

点数判定の方が重視されるルール上、上書きの原理や読み込む順番が通用しないのです。

インラインスタイル同士を判定する場合は、より詳しく記述されてる方を優先、または上書きの原理が適応されます

上記で解説してきた方法で「CSSが反映されない」エラーを解決できない場合、数あるCSSの中に、このさらに強い記述のどちらかが書かれていると考えて良いでしょう。

使用してるテーマの「親テーマのCSS」に記述されていたり、導入してるプラグインに記述されてる場合は致命的なリスクを伴うので、変更する際はくれぐれも慎重に。

現状の私にはまだ出来ませんが、慣れてきてより複雑な凝ったカスタマイズをしたくなった時は必要になってくる記述法なので、頭の片隅にでも覚えておいてくださいね。

ではここから、インラインスタイルとインポータントに分けて解説していきます。

インラインスタイルとは

①インラインスタイルシート形式

とは、cssかhtmlのどちらかに記述して指定するもので、点数は[1.0.0.0]になります。

・cssに記述=指定した要素を持つすべてのタグに反映
・htmlに直接記述=その部分だけ反映

cssでの記述例
<html>
<head>
<style type="text/css">
a {color:red;}
</style>
</head>
<body>
<a href="#">参考記事はこちら</a>
</body>
</html>

これは「文書内のすべてのリンク(a)を赤文字にする」という記述で、

<style type="text/css">
a {color:red;}
</style>

の部分がインラインスタイル形式になります。

htmlでの記述例
<div style="color:blue">この文字は青色に</div>

こちらは、ページ上で直接指定した文字のみ青色になります。

この記述例もhtml上でのインライン
<p>p段落の中の<strong>一部の文章をstrongタグ(太字)で囲み</strong>、デザインを変える</p>
表示するとこうなる

p段落の中の一部の文章をstrongタグ(太字)で囲み、デザインを変える

ビジュアルエディターで記事を書き、強調させたい文字がある時にエディター機能を使って色やサイズを変えると、コードエディター(またはHTML編集)で見た時に<>で閉じてある記述が載ってますよね。

あれが最も分かりやすいインラインスタイルです。

そういった、ページ上で直接文字色や文字サイズを変えるなどのカスタマイズする場合がこの「段落(p)の中の文字デザインを変える記述」に当てはまるので、html上でのインラインスタイルは、初心者の私達が1番馴染みのある記述かなと思います。

エディターの表示はバージョンによって違い、ビジュアル編集・テキスト編集とも言います

PCアップ3

もしcssとhtmlに同じ要素を指定してるインラインスタイルがある場合は、「記述した場所」による優先順位が適応され、htmlに直接記述しているインラインの方が優先されます。

ページ上で直接カスタマイズした部分に反映されないエラーがまず出ないのは、インラインスタイルが強い記述だからですね。

CSSで指定してあるどの記述よりも優先されていることが分かります。

インラインについて詳しく知りたい方は、こちらのサイト様をご覧ください
【HTML】インライン要素とブロック要素の違いを3分でわかりやすく解説
HTMLのインライン要素とブロック要素の違いをわかりやすく解説!3分で理解できるコンパクトなガイド。要素の配置、幅と高さ、余白と境界線、要素の含有についての違いを簡潔に説明します。
インライン要素とは?CSSで装飾するときのポイントやブロック要素との違いを解説
HTML/CSSの初学者の方がコーディングしているときに、思ったような装飾が出来ないことがあります。その多くは ...

インポータントとは

②!important

とは、{color:red!important;}のように、元々ある記述に!importantを足すだけの方法です。

!importantは記述優先度が最も高いため、①のインラインスタイルを打ち消せるのはこの記述法しかありません。

ですが最強であるがゆえに他の記述にも影響を与える場合があるので、!importantの複数使用は推奨されていません

「最優先の記述」がいくつもあったら、一体どれを最優先させたいねんっ!とブラウザが混乱してエラーを起こすのも当然ですよね。

!importantの使用は、本当に優先させたいスタイルがある場合の最終手段と認識していただければOKです。

詳しくはこちらのサイト様をご覧ください
CSSの「!important」とは?CSSが適用されない時の対応方法 | 侍エンジニアブログ
この記事では「 CSSの「!important」とは?CSSが適用されない時の対応方法 」といった内容について、誰でも理解できるように解説します。この記事を読めば、あなたの悩みが解決するだけじゃなく、新たな気付きも発見できることでしょう。お悩みの方はぜひご一読ください。
目次へ戻る

まとめ

・「他の記述が優先される」とは

①セレクタの指定方法で優先順位が変わる

②優先順位(詳細度)は点数制

③記述した場所や読み込む順番にも優先順位がある

④-①②③のルールを無視する強い記述がある

・CSSが反映されない原因「他の記述が優先されている」場合の解決法

①より詳しい記述(点数の高いセレクタ)に書き変える

②記述してある場所(順番)を入れ替えてみる

③-①②でダメな場合のみ!importantを使う

この章で解説した方法を試してもCSSが反映されない時は、ブラウザの検証機能(デベロッパーツール)を使って、どの指定が有効になってるのか確認してみましょう。

ブラウザの検証機能|参考サイト様
Chromeブラウザの検証機能でCSSスタイルの確認や変更をテストする方法
CSSを調整する際、変更したい箇所にマウスを当てるだけでスタイルがわかるChromeの便利機能(デベロッパーツール)をご紹介。確認すべきポイントや手軽に行える変更プレビューについて、画像多めで解説しています。#chrome #CSS

この手のエラーはややこしくて投げ出したくなりますが、有識者の方でも頭を悩ませるエラーでもあるようなので、難しくて当然か…くらいにゆったり構えつつ頑張りましょうね!

目次へ戻る
yuppi
yuppi

それではまた♪

-see you-

コメント

タイトルとURLをコピーしました