CSSが反映されないエラーの対処法・「セレクタを詳しく記述する」とは

セレクタの記述

CSSが正しく反映されないエラーが起きた時に最も多いのが、記述の優先順位による原因です。

記述の優先順位についての詳細はこちら

希望通りにCSSを反映させるためには、指定した記述の優先順位を上げる(セレクタの点数を高くする)必要があります。

そして優先順位を上げるためには、セレクタを詳しく記述する必要があるのです。

この章では

①記述の優先順位を理解するうえで重要な、セレクタというCSS用語
セレクタを詳しく記述するの意味

のふたつを分かりやすく解説していきます

セレクタとは

CSSの文法は、セレクタプロパティの3つから成っています

まずは下図を見て、記述されているCSSの中でセレクタがどの部分なのかを把握しましょう。

h2.ribbon

この記述は、.ribbon(リボン型)のh2(見出し2)の中の文字サイズを18pxにし、文字とリボン型の外枠との間に10pxpadding(余白)を設けるというCSSです。

ここで誤解してはいけないのが、セレクタはどの部分に対して適応させるかを指定するものであり、h2などの総称ではないということ。

分かりやすく言うと…

セレクタ どこに
プロパティ 何を
どうする

といった感じです。

記述例

p { color: red; }

この記述の場合

セレクタ p
プロパティ color
red

となり、HTMLのp要素の中の文字を赤色にするというCSSになります。

では、セレクタにはどのような種類があるのでしょうか。

目次へ戻る

セレクタを詳しく記述

セレクタの種類は全部でいくつあるのか、正確な数は私にも分かっていません。

ですが少なくとも35種類以上あることは確かです。

それらすべてを1度に理解するのは困難なので、初心者の方でも比較的使いやすい5つのセレクタを解説していきます。

①ユニバーサルセレクタ

*(アスタリスク)で指定する

記述例

*{color: red;}

ユニバーサルセレクタは、全ての要素に対して指定したい時に使います。

まとめて指定できるうえ記述も単純なので便利ですが、簡単がゆえに優先度は最も低く、他の記述に上書きされやすい(CSSが反映されないエラーが起きやすい)という欠点もあります。

全体記述例
<html>
 <head>
   <meta charset=“UFT-8”>
   <title>…</title>
     *{
     color: red;
     }
  </head>
    <body>
    <h4>セレクタを詳しく記述</h4>
    <p>これは例文です</p>
    </body>
</html>
表示するとこうなる

セレクタ詳しく記述

これは例文です

*{color: red;}のみの記述で、見出し</h4>と本文<p>~</p>の両方が赤文字になります。

②タイプ(要素)セレクタ

h1pdivspantableboxなどのhtml要素名に対して、スタイルを指定するもの。

記述例

h4{color: blue;}

タイプ(要素)セレクタは、特定の要素を共通設定にしたい時などに便利です。

ユニバーサルセレクタより1段階詳しい記述法になります。

全体記述例
<html>
 <head>
   <meta charset=“UFT-8”>
   <title>…</title>
     h4{
     color: blue;
     }
  </head>
    <body>
    <h4>セレクタを詳しく記述</h4>
    <p>これは例文です</p>
    </body>
</html>
表示するとこうなる

セレクタを詳しく記述

これは例文です

h4{color: blue;}で、見出し(タイトル)だけが青文字になります。

③class(クラス)セレクタ

.(ピリオド)の後にクラス名を記述して指定する。

記述例

.title{color: green;}

クラスセレクタは、htmlタグのclass属性に対して指定したい時に使います。

ユニバーサルセレクタより2段階詳しい記述法です。

クラスセレクタを使用する場合、CSSで指定したクラス名と同じクラス名をhtml側にも記述する必要がありますが、自分の好きな名前を付けることができるので、区別しやすいクラス名にすると良いです。

ただし、命名と使用可能な文字に制限があるため、クラス名を使用する時は下記のルールに気を付けてください。

①使える文字は半角英数字(ハイフン)と_(アンダーバー)

②文字の始まりはアルファベット(数字や記号はNG)

③アルファベットは大文字と小文字が区別される

全体記述例
<html>
 <head>
   <meta charset=“UFT-8”>
   <title>…</title>
     .title{
     color: green;
     }
  </head>
    <body>
    <h4 class="title">セレクタを詳しく記述</h4>
    <p class="title">これは例文です</p>
    </body>
</html>
表示するとこうなる

セレクタを詳しく記述

れは例文です

例文だと見出しも本文も緑色になってるので一見ユニバーサルセレクタと同じに見えますが、CSS側の記述のみで一括指定するユニバーサルセレクタに対し、こちらはCSSとhtmlに同じクラス名を記述する(記述例では title)ことによって同じ色にしています。

記述例のように.title{color: green;}の記述で、html側のタグにもclass=”title”と記述すれば、変更したい箇所をいくつでも指定できるのが便利です。

クラスセレクタの方が優先順位も高いので、ユニバーサルセレクタでに指定していても、クラスセレクタでに指定する記述がある場合は緑色で表示されます。

④idセレクタ

#(シャープ)の後にクラス名を記述して指定する。

記述例

#main{color: orange;}

idセレクタもクラスセレクタと同じように、htmlタグのid属性に対して指定したい時に、任意の名前をつけて使います。

idセレクタとクラスセレクタは指定法が似ていて混濁しやすいので、ふたつの違いをしっかり把握しましょう。

以下、ふたつのセレクタの違い

・クラスセレクタ=分類名を割り当てる役割
・idセレクタ=固有名を割り当てる役割

・クラスセレクタ=1ページ内で何度でも使える
・idセレクタ=1ページにつき1度しか使えない

・クラスセレクタ=半角英数字を使用
・idセレクタ=大文字も使用できる

idセレクタは、より細かく指定する記述法なので優先順位も高くなります。

ユニバーサルセレクタより3段階詳しい記述法になるため、ユニバーサルセレクタ・タイプ(要素)セレクタ・クラスセレクタの記述を上書きし(打ち消す)、優先して反映されます。

全体記述例
<html>
 <head>
   <meta charset=“UFT-8”>
   <title>…</title>
     #main{
     color: orange;
     }
  </head>
    <body>
    <h4 id="main">セレクタを詳しく記述</h4>
    <p>これは例文です</p>
    </body>
</html>
表示するとこうなる

セレクタを詳しく記述

これは例文です

idセレクタは1ページに1度しか使えないため、記述例では見出しの文字色を指定しているので本文の文字色は指定できません

複雑な記述法で指定する場合を除き、CSS上では基本的にクラスセレクタを使った方が無難です。

しかし、初心者でもよく使用するidセレクタがあります。

ページ内リンクです。

ページ内リンクを貼る時、同じid名を付けれないのはそれが理由です。

ページ内リンクが仕事である「目次」にも、全て違うid名が付いています。

誤って違う場所に飛んだら目次の意味がないので、優先度の高いidセレクタを使用してるわけです。

反面1度しか使えないidセレクタは、下記の理由から慎重に扱う必要もあります。

・複数のidを同じタグに指定するとコーディング規約違反になる

・複数使用した場合cssが効かなくなる

・htmlでidが重複した場合、プログラムやページ内リンクに異常が起きる

…と、このようになかなか怖いトラブルを招いてしまうので、ページ内リンクを使用する際は細心の注意を払いましょう。

⑤インラインスタイル

インラインスタイル形式には、「htmlに直接記述して指定する」方法と「cssに記述する」方法があります。

html記述例
<h4>セレクタを詳しく記述</h4>
<p style="color: pink">これは例文です</p>
表示するとこうなる

セレクタを詳しく記述

これは例文です

css記述例
<html>
 <head>
   <meta charset=“UFT-8”>
   <title>…</title>
   <style>
     p {
     color: pink;
     }
   </style>
  </head>
    <body>
    <h4>セレクタを詳しく記述</h4>
    <p>これは例文です</p>
    </body>
</html>
htmlに直接記述した場合と同じ表示になる

セレクタを詳しく記述

これは例文です

インラインスタイルはhtmlに直接記述できるので、変更したい箇所をピンポイントで指定できるのが利点です

ビジュアルエディターで直接編集するのがこの方法ですね。

ですが直接記述してばかりだとページ内がコードだらけになりますし、後から変更したくなった場合に全て記述し直さないといけなくなるので、慣れてきたらcssで指定する方が良いでしょう。

インラインスタイルの優先度

この章にある5つのセレクタの中では最も詳しい記述法になり、最優先で反映されます。

中でもhtmlに直接記述するインラインが1番強くcssに記述したインラインは2番目に優先、となります。

では、インラインスタイルより優先される記述法は無いのでしょうか。

あります。

最強の優先度を持つ「 !important 」という記述が存在します。

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

セレクタの組み合わせ

同じセレクタの中でも、より詳しく記述する方法として複数のセレクタを組み合わせて使うことがあります。

例えば

.sample-link a{color:red;}

という記述があり、この記述が競合を起こしてcssが反映されないエラーが出てる時。

これは、.sample-link(クラスセレクタ)とa(タイプセレクタ)が組み合わさった記述なのですが、他にも下記のように

#dummy-link a{color:blue;}

#dummy-link(idセレクタ)とa(タイプセレクタ)が組み合わさった記述がある場合、反映されないエラーを解決するためには、

.sample-link(クラスセレクタ)より優先度が高く、#dummy-link (idセレクタ)を打ち消さない方法

が必要になります。

クラスセレクタを打ち消すには、ひとつ上の優先度を持つidセレクタを使うのが手っ取り早いのですが、idセレクタを使うと今度は#dummy-linkの方が競合を起こす可能性があるからです。

ではどのように記述すれば条件を満たせるのでしょうか。

ここで、セレクタに割り振られてる[点数]が重要になってきます。

点数についてもこちらで解説

クラスセレクタ以上idセレクタ未満の優先度で何とかするには…

解答記述例

p.sample-link a{color:red;}

のように記述すると解決します。

これは、p(タイプセレクタ)、.sample-link(クラスセレクタ)、a(タイプセレクタ)の3つを組み合わせた記述です。

より詳しく記述してあるのが分かりますね。

点数で表すと

p 0.0.0.1
.sample-link 0.0.1.0
a 0.0.0.1
p.sample-link aの合計は0.0.1.2

なので

.sample-link 0.0.1.0
a 0.0.0.1
合計が0.0.1.1.sample-link a

よりも優先され

#dummy-link 0.1.0.0
a 0.0.0.1
合計が0.1.0.1#dummy-link a

を打ち消すこともありません。
セレクタの点数は左側から大きい順に優先される決まりになってます

このように、複数のセレクタを組み合わせることで優先度を上げることもできます。

実際にこんな記述を多用することはまずありません。あくまで例文として捉えてくださいませ

セレクタを図解で解説して下さってるサイト様
ワードプレスでよく使うCSSセレクター34種を厳選!(うち必須12種)
ワードプレスのカスタムCSSを使い方のほか、CSSで特に気をつけたいセレクターの使い方やよくはまる詳細度、うまくカスタムCSSが適用されない場合の対処方法など網羅的に解説しています...
目次へ戻る

まとめ

セレクタを詳しく記述するとは

①競合する記述がある場合、より優先度の高いセレクタで指定する

②同じ優先度を持つセレクタでも、記述場所やセレクタの組み合わせで優先度を上げることができる

複雑なCSSや数あるセレクタを短期間で理解するのは困難ですが、WordPressを使っていたら必ずと言って良いほどぶち当たる壁かと思います。

なのでひとまずは、初心者の方でも扱えそうなセレクタのみを取り上げてみました。

最強の優先度を持ち、多用すると危険も増す「 !important 」

その「 !important 」を使用せずとも優先度を上下できる方法は他にもあるので、セレクタの記述法ひとつ取ってもかなり奥深いです。

焦らずしっかりと、ひとつずつクリアしていきましょうね!

ちなみに…

上記の全体記述例に必ず載っている<meta charset=“UFT-8”>(上から3行目)は、コードの文字化けを防ぐためのものなので、この記述より前にコードを書くのはNGです。

目次へ戻る
yuppi
yuppi

それではまた♪

-see you-

コメント

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