これは特異性と呼ばれます。
これは CSS の重要な機能であり、より具体的なセレクター ( ) のプロパティが、より具体的でないセレクター ( .whatever h1
) のプロパティをオーバーライドすることを意味しますh1
。ページ上のほとんどの要素 (たとえば、すべての要素) の一般的なスタイルを設定し、たとえば、別の要素内の要素h1
のみを識別するより具体的なセレクターを使用して、これらの要素の小さなサブセットのプロパティを変更できます。h1
そのクラスはwhatever
:
HTML
<h1>I'm green with envy</h1>
<h1>And so am I</h1>
<div class="whatever">
<h1>Because I'm rather special</h1>
</div>
CSS
h1{
color: green;
}
.whatever h1{
color: blue;
}
結果
CSS セレクター.whatever h1
は、「任意h1
のクラスを持つ別の要素内の任意の要素」を意味します。h1
同じ効果を得るために、要素に独自のクラスを与えることもできます。h1
対象となる要素が独自のクラスを持っているという事実を反映するために、CSS をわずかに異なる方法で記述するだけです。
HTML
<h1 class="whatever">I'm special</h1>
CSS
h1.whatever{
color: blue;
}
クラスと ID には、色やその他の属性ではなく、ページ内での要素の役割を示す意味のある名前を付けるようにしてください。つまり、".bigredtext" や ".whatever" の代わりに ".introduction" を使用する方がはるかに優れています。そうすれば、イントロ テキストの色を明るい青に変更すると、CSS と HTML でクラスの名前を変更する必要がなくなり、HTML のすべてが読みやすくなります。(これは、人々が「セマンティクス」と「セマンティック命名規則」に言及するときに話していることです。)
特異度の決定方法 (覚えておくべき簡単なルール)
ユーザー エージェント (Web ブラウザー) は、数式を使用して、各セレクターがどの程度具体的で、どのセレクターが他のセレクターよりも優先されるかを計算します。非常に簡単に言えば、あまり具体的でないものからより具体的なものまで:
- 要素の名前のみを持つセレクター (例:
h1
) は、すべての中で最も具体的ではありません
- を持つ
.class
セレクターは、クラスのないセレクターよりも具体的です
- のセレクターは、 の
#id
セレクターよりも具体的です。.class
- スタイルシートの下部にあるセレクターは、以前の同一のセレクターよりも優先されます
これらは、特異性について学ぶ価値のある 4 つの主なルールであり、ほとんどの単純なユース ケースをカバーします。これらの 2 つの追加ルールは特異性とは関係ありませんが、知っておく価値があります。
- などのインライン スタイルは、外部スタイルシートまたは内部タグ
<h1 style="color: blue">
で個別に宣言された外部ルールよりも優先されます。<style>
おそらくインライン スタイルを使用するべきではありませんが、インライン スタイルに遭遇した場合に備えて、これを知っておくことは価値があります。
- フラグを使用するセレクター内のプロパティは
!important
すべてを「打ち負かし」、無視することはできません。同様に、おそらくフラグの使用を選択すべきではありません!important
が、強制される場合もあります。
特異度が実際にどのように決定されるか (それを正確に計算する方法)
もちろん、クラス、ID、および要素を連鎖させ始めると、上記よりも少し複雑になります (ただし、それほど複雑ではありません)。そのため、直感だけで作業するのではなく、特異性を正確に計算する方法を学ぶことが役立ちます。 、スタイルシートが大きく複雑になると、多くの時間を節約できます。
詳細を知りたい場合は、Smashing Magazine に「CSS の特異性と継承」というタイトルの記事があり、一見の価値があります。これらは Andy Clarke の有名なStar Wars Chartを参照しています。これは、Star Wars に精通している場合は具体性を視覚化する簡単な方法かもしれませんが、そうでない場合はおそらくさらに混乱を招くだけです! (下の画像をクリックすると、Andy のサイトで詳細を読むことができます。)