2012-04-28 9 views
1

:not()を使用してdiv.note emを太字から除外するにはどうすればよいですか?CSS3:not()selector

div#content em { 
    font-weight: bold; 
} 

/* I want to remove the following 
    in favor of the :not selector being applied to the above */ 
div#content div.note em { 
    font-weight: normal; 
} 

PS:これは削ぎ落とした例ですが、私は実際に私がdiv.note em以外のすべてに適用するdiv#content emでのスタイルの数を持っています。そのため、後で手動で上書きする必要はありません。

+0

子孫コンビネータの性質上、 ':not()'だけでこれを確実に行うことはできません。あなたのHTML構造に依存する何らかの複雑なセレクタを作成する必要があります。そのための努力は、代わりに 'div#content div.note em'のルールをオーバーライドするだけの価値はありません。 – BoltClock

+0

(このようなセレクタが可能であるかどうかは分かりませんが、実際にはマークアップに依存します) – BoltClock

+0

マークアップはCSSの示唆に非常によく似ています... 'div#content'が' article'そして 'div.note'は、' p's、 'blockquote's、imagesなどの他のすべてのもののほかに、その記事内の1つのハイライトされた情報ボックスになります。 – Ben

答えて

3

#content.noteの間の正確な階層がわかっている場合は、子セレクタを使用してネゴシエーションを機能させることができます。 .note#contentの子である場合は、使用:あなたはおそらく、あなたが持っているものを使用したほうが良いです

#content > div > div > :not(.note) em, #content > em {} 

#content > :not(.note) em, #content > em {} 

2つの<div> sが#content.noteの間である場合は、のような何かをしかし、注釈の子孫であるem要素を単にオーバーライドするだけです。

+0

また、タグを追加するとセレクタが変更されない限り(つまり、#contentまたは.note要素がdivではない場合)、タグでIDとクラスセレクタを修飾する必要はありません。 – HaleFx