2016-05-18 4 views
1

私は:not()疑似クラスを使って、最初のものを取り消すための2番目の不要な宣言でオーバーライドする必要がなくなりました。 今、Safariが:not()内の子孫セレクタを受け入れ、 Chromeはそうではありません。Does:not()否定は子孫セレクタを受け入れますか?

私はa:not(.blue a)のようなものを使用。

私は答えを探しましたが、私はまだその理由を十分に理解していません。
子孫セレクタは実際に仕様によって許可されていますか?ここで

はデモです:Selectors Level 3

a:not(.blue a) { 
    color: red; 
} 
<div><a>this one should be in red</a></div> 
<div class="blue"><a>this one shouldn't</a></div> 

http://codepen.io/oscarmarcelo/pen/YqboQJ?editors=1100

+0

@TylerH:a :(.blue a)は.blue要素の子孫ではない要素を表します。 – BoltClock

+0

@BoltClockそれは他とは違ってユニークで -/ – TylerH

答えて

1

、答えはNOでしょう。 :not()表記では、シンプルセレクタしか受け付けません。

6.6.7. The negation pseudo-class

否定擬似クラス、:not(X)、 引数として単純セレクタ(否定擬似クラス自体を除く)をとる関数表記です。これは、引数 で表されていない要素を表します。

単純なセレクタとは何ですか? selector syntaxから

単純セレクタは、タイプセレクタ、普遍的なセレクタ、属性セレクタ、クラスセレクタ、IDセレクタ、又は擬似クラスのいずれかです。

子孫セレクタについては何も。

もつともは、Selectors Level 4に、:not()は子孫結合子を含むであろう複合セレクタを受け付けます。ブラウザのサポートは、この仕様では依然として非常に弱いです。

+0

これは、CSS4では 'a:not(.blue a)'が許可されているということですか? – oscarmarcelo

+0

それは正しいです。 https://www.w3.org/TR/selectors4/#negation –

関連する問題