ZeroPlus Gateについて

\ シェア /

FacBook
Twitter
LINE
はてブ
PPocket
ZeroPlus Media > Web制作 > HTML/CSS > CSSの詳細度を学ぼう

CSSの詳細度を学ぼう

HTML/CSS

2022/07/23

2022/07/23

web制作をしていく上で、単純に見た目を整えるだけではなく、保守運用にも適したコードを書く必要があります。

「スタイルが反映されていない!」

「デベロッパーツールで確認したら、後から書いたCSSが横線で消されている!」

CSSを書いていくと、そんな経験をする事が出てくると思います。

それはCSSの詳細度という仕組みがあるからです。

ここではCSSの「詳細度」について紹介します。

CSSの詳細度を学び、綺麗なコードを書けるようになりましょう。

詳細度

CSSは「カスケーディング・スタイルシート」の略ですが、「カスケード」に関する理解が非常に大事になってきます。カスケード(cascade)とは「階段上に連続する滝」という意味です。

スタイルシートのカスケードについては、CSSルールを書く順序が重要です。「等しい詳細度を持つ2つのルールによってスタイルが指定された場合は、CSSの最後にくるものを適用しますよ」というのが「カスケード」です。

詳細度の計算方法

セレクタには詳細度の計算方法があります。例を出して見てみましょう。

<div>
   <p id="green" class="red">今日は雲ひとつない晴天、清々しい朝です。このような日は、1日の活力を太陽からチャージすることができ、それだけで今日という1日が素晴らしい日になるような、そんな気分になりますね。</p>
   <span>-----------------------------------------------</span>
   <p class="red">しかし本日、<span>午後から天気は一転、大雨</span>の予報です。</p>
   <p> 洗濯物は室内に、傘をお供に外出を。<br>
     そして、お早いご帰宅をおすすめいたします。</p>
 </div>
#green{
 color: green;
}
 
.red{
 color: red;
}
 
p{
 color: blue
}

最後にpタグにcolor: blue;を指定したので、pタグ全ての文字色が青になるかと思いきや、前に指定したスタイルが残っているpタグがあります。状況としては、上書きしたはずのスタイルが適用されず、前に指定したものが適用されたままであるということです。これは前にあるルール(プロパティ)の方がより高い詳細度を持っているために起きています。

つまり、「前に指定したセレクタの方が、より具体的・詳細で、要素をスタイリングするべき物だから、前にあるルール(プロパティ)の方が高い詳細度を持っている」とブラウザによって選択されたことから起きたことです。

例として、

idセレクタ > classセレクタ > 要素セレクタ

という順でプロパティの詳細度が高くなっている事がわかります。

 

では、ブラウザはどのようにして、「セレクタがより具体的・詳細だ」と判断しているのでしょう?

 

セレクタにはそれぞれ、詳細度を決定するための持ち点があります。

セレクタの持ち点の合計点が、プロパティの詳細度となります。

 

セレクタごとの持ち点は次の通りです。

セレクタ持ち点
id100
class・属性・擬似10
要素・擬似要素1

ユニバーサルセレクタ(全称セレクタ、*)、コンビネーション(+ , > , ~ ,etc...)、否定擬似クラス(:not)は詳細度に影響を及ぼさないため、持ち点は「0」です。

 

スタイルの指定の仕方で、HTMLにstyle属性(インラインスタイル)を使用する方法があります。インラインスタイルでのスタイル指定の場合、セレクタが無いため、詳細度は「1000」となり、セレクタを用いてのスタイルの上書きはできません。

 

では、実際にセレクタによる詳細度の合計に応じて適用されるスタイルを考えてみましょう。

 

例1

まず、先ほどの例で考えてみます。

①	#green{
 	color: green;
}
 
②	.red{
 color: red;
}
 
③	p{
 color: blue
}

①詳細度:100

②詳細度:10

③詳細度:1

よって、「#green」のid名がついた部分は「.red」のスタイルにも「p」のスタイルにも上書きされません。

 

例2

<div id="apple" class="a b c d e f g h i j k">
 <p>apple</p>
</div>
① #apple p{
 color: red;
}
 
② .a .b .c .d .e .f .g .h .i .j .k p{
 color: blue;
}

この場合、

①100 + 1 → 詳細度:101

②10 × 11 + 1 → 詳細度:111

となるため、②のスタイルが適用されるハズです。

しかしブラウザで確認してみると

①のスタイルが適用されている事が分かります。

これは、セレクタータイプそれぞれに「詳細度のレベル」があり、レベルが低いセレクタで、高いものは上書きできないというルールがあるからです。今回の例をみても「クラスセレクタ」が「idセレクタ」よりも詳細度のレベルが低い事が分かります。つまり仮にクラスセレクタを10万個用意しても、1つのidセレクタのスタイルを上書きすることは出来ないということです。

 

こういった理由により、「要素セレクタやidセレクタを用いたスタイル指定」は推奨されておらず、「クラスセレクタを用いたスタイル指定」が基本とされています。後からスタイルを上書きしたい場合に狙い通りにスタイルの指定が出来るように、初めから詳細度を均一に保っておきましょう。

 

!importantの指定

上記で詳細度について解説してきました。

実は上記の計算等をすべて無効にして、強制的にスタイルを適用させることができます。プロパティ値の後に「!important」と記述する事で、最も優先して適用する事ができます。

<p id="apple" class="apple" style="color: blue">apple</p>
#apple {
 color: red;
}

.apple {
 color: green !important;
}

この例を上記の計算方法で計算すると、style属性(インラインスタイル)にcolor: blueと指定しているので、文字色が青色になると思われますが、クラスセレクタのappleに対してcolor: greenの後に!important;と記述しているため、color: greenが適用されます。

このように、「!important」のキーワードが指定されたスタイルは最優先されます。

しかし、「絶対に必要な場合を除き、あまり使用しないこと」が推奨されています。あまりにも「!important」を使いすぎることで、どれが本当に「important」なのかわからなくなってしまい、開発して行く上で困難な状況を作り出しかねません。

\ 学んだことをSNSでシェアしよう /

おすすめのタグ

この記事の執筆者

ZeroPlus Media変種部

ZeroPlus Media編集部

ZeroPlusは、「フリーランス特化型プログラミングスクール」です。ZeroPlus Mediaでは、フリーランスとして活躍する際に役立つ有益なプログラミングやWeb制作に関する情報を発信しています。

目次

質問について

ZeroPlus Media読者限定で質問対応をおこなっています。以下の2つの方法で質問を受け付けています。

選べる2つの質問方法

1

Google Foam(テキスト)で質問

mail

フォーム送信

メールで解答

formで質問
2

Google meet(オンラインmtg)で質問

meet

日時選択

メールを受け取る

メールからmtgに参加

meetで質問
ZeroPlus Gateについて

あなたの目的に合わせた2つのサービス

あなたの目的に合わせたZeroPlusの2つのサービス
基礎からフリーランスレベルまで本質的な学びを提供しています

完全無料!30日間で学びきれる
プログラミンスクールZeroPlus Gate

  • お金をかけずに、学習を進めたい
  • Webサイトを作れるようになりたい
  • メンターや講師に質問しながら学習したい

詳しくはこちらから

フリーランス特化型
プログラミングスクール ZeroPlus

  • プログラミング学習で悩んでいる
  • 仲間と一緒に学習したい
  • フリーランスとしての総合的な力を養いたい

詳しくはこちらから