既存の回答はすべて正しいですが、すでに与えられたものよりも少し多くあります。
すでに述べたように、"li.over" は複合セレクターです。これは、"over" のクラスを持つ li 要素をセレクターにします。マウスが要素の上にある (ホバーしている) ときに別の CSS プロパティまたはプロパティ値を使用したい場合は、疑似クラスセレクター "li:hover" を使用します。これらは、ドキュメントの一部である何かを選択するのではなく、要素の状態に基づいているため、疑似クラスと呼ばれます。ドキュメントに直接含まれていない疑似要素もありますが、ドキュメント構造の論理拡張です。たとえば、最初の子、最初のタイプ、5番目のタイプ、奇数アイテムなどです。
「#nav li ul a span」は子孫セレクターです。あなたが言うように、各親の子 (任意のレベル) である要素を選択するため、「#nav li」は ID を持つアイテム内に含まれる「li」要素を選択します」 nav" - 数レベル下がっても。
親の直接の子である項目を選択する場合は、>" 記号を使用できます。つまり、"#nav > li" は、ID が "nav" のアイテムのすぐ下にある li 要素を選択しますが、その要素の子である li 要素、またはその下の要素は選択しません。
ちなみに、「#nav」は「*#nav」とまったく同じで、ID を持つ任意の要素を選択します。ID を持つ ul 要素のみを選択したい場合は、「ul#nav」と書くこともできます。これは、クラス「ul#nav.bar」または複数のクラス「ul#nav.bar.touch」と組み合わせることもできます。
このようにセレクター間のスペースを削除すると、セレクターが結合されるため、最後のケースでは、"ul" 要素内の ID "nav" を持つアイテム内のクラス "bar" を持つアイテム内のクラス "touch" を持つアイテムを探す代わりに、 「nav」の ID と「bar」と「touch」の両方のクラスを持つ「ul」要素を選択しています。このような要素-
<ul class="bar touch" id="nav">...</ul>
属性セレクターを使用することも可能です。そのため、新しいウィンドウで開くリンクを選択したい場合は、「a[target=_blank]」を使用できます - これは、属性の存在と値の両方に基づいて選択します - または任意のhref 値を持つリンクを選択したい場合は、「a[href]」を使用できます。これは、この属性を持つすべての要素を選択するだけです。
その上、別の要素に隣接する (隣にある) アイテムを選択することもできます。画像の直後にあるすべての段落を選択する場合は、セレクターで「img + p」を使用するか、「p + img」を使用します。段落の直後に画像を選択したい。いつものように、セレクターの最後の項目は、スタイルが適用される項目です。
コードの再利用性が大幅に低下するため、CSS セレクターを過度に具体的にしないことは、一般的には良い習慣であると考えられています。「div.widget」を記述する必要がない限り、単に「.widget」と記述します。そうしないと、他の要素を使用して「ウィジェット」を作成できず、後でこれらのプロパティをオーバーライドするのがはるかに難しくなります。する必要があるかもしれません。
セレクターをまとめると、 MDNに CSS セレクターの優れた紹介があり、 Code School (有料コース プロバイダー)には、非常にリーズナブルな価格で利用できる CSS に関する優れたオンライン基礎コースもあり、セレクターを詳細に説明します。
クラスのオーバーライドに関して、カスケード順序と特異性という 2 つの概念を理解する必要があります。
次の HTML スニペットが与えられた場合、
<div class="widget">
<p>
Some text you want to style
</p>
</div>
そして、次のCSS-
#widget p { color: yellow; }
p { color: blue; }
最初のセレクターの特異性が 2 番目のセレクターよりも大きい (より具体的である) ため、テキストの色は青ではなく黄色になります。これを理解するには、特異度計算機で遊んで、このテーマに関するSmashing Magazine のチュートリアルを読むことをお勧めします。
要するに、インライン スタイルはすべてに勝っており、セレクターが具体的であるほど、別のプロパティ値を適用する他のセレクターの代わりに適用される可能性が高くなります。特異性スコアが最も高いセレクターの値が「優先」されますが、衝突しない特異性が低いセレクターの他のプロパティ値も引き続き要素に適用されます。
たとえば、以前の CSS を変更すると、
#widget p { color: yellow; }
p {
color: blue;
font-weight: bold;
}
テキストは黄色のままですが、より具体的なセレクターで font-weight プロパティが指定されていないため、太字になります。
理解する必要がある最後の概念は、2 つ以上のルールが同一の特異性を持つ場合に何が起こるかです。
#widget p { color: yellow; }
#widget p {
color: blue;
font-weight: bold;
}
この場合、2 番目のルールがスタイルシートの後半に表示され、最初のルールが上書きされるため、テキストは青色になります。複数のスタイルシートがある場合、ドキュメント ヘッドに表示される最後のスタイルシートのルールが、同一の特異性でルールをオーバーライドします。
ほとんどの場合、適切なスタイルを適切な要素に適用するために、スタイルシート内のセレクターのより具体的な順序または順序を使用する必要があり、絶対に必要でない限り、これを達成するために !important フラグを日常的に使用するべきではありません。http://james.padolsey.com/usability/dont-use-important/を参照して、ここで説明するよりも完全な説明を参照してください。ただし、すぐに保守できなくなります (すべてが「重要」な場合はどうしますか)。ユーザー エージェント スタイルシート (ブラウザーのローカル) でスタイルをオーバーライドして、ページを読みやすくしたり使用したりしたい (フォント サイズを大きくしたり、背景色とのコントラストなど) ことを希望するユーザーがアクセスできます。