.menu
内に があり、のような css セレクターを介して の子#header
にアクセスすると、代わりに が使用される場合があります。.menu
.menu a
#header a
要素に近いため、 が.menu a
をオーバーライドすることを期待していました。なぜこれが起こらないのですか?以下の例に基づいて、IDと比較してクラスであると仮定しています。#header a
a
この例では、親スタイルを制限せずに#red span
css をオーバーライドする良い方法はありますか?.blue span
「良い方法」とは、柔軟な意味だと思います。たとえば.blue
、多くの場所で使用される php フレームワークによって作成された要素である可能性があります (おそらく id スタイルの親要素内ではないか、別の ID でスタイル設定された親要素内である可能性があります)。
ここに例があります。以外#green
はすべて赤のままです。
HTML:
<div id="red">
<span>red</span>
<div class="blue">
<span>blue(class) - should be blue</span>
</div>
<div id="green">
<span>green(id) - should be green</span>
</div>
<div class="green">
<span>green(class) - should be green</span>
</div>
<div>
<span>no child div style - should still be red</span>
</div>
</div>
CSS:
#red span {
color: red;
}
.blue span {
color: blue;
}
.green, #green span {
color: green;
}