2011-09-12 11 views
3

私はCSS3 Selectors specを少し見ましたが、この問題を解決する方法は何も見つかりませんでした。さらに、私は、CSS宣言を動かすときにこの結果が変わることを期待していませんでしたが、それはそうです。どんな助けも素晴らしいだろう。それはすべての主要なブラウザとIEとの互換性があり、このチャートhttp://www.quirksmode.org/css/contents.htmlによるスタイルシートの順序に基づくCSSの特定性/優先度?

div.green_colour > div.has_colour{ 
    background-color: green; 
} 
div.red_colour > div.has_colour{ 
    background-color: red; 
} 

div.green_colour div.has_colour{ 
 
    background-color: green; 
 
} 
 
div.red_colour div.has_colour{ 
 
    background-color: red; 
 
}
<div class="red_colour"> 
 
    <div class="green_colour"> 
 
    <div class="has_colour"> 
 
     I would like this to be green 
 
    </div> 
 
    </div> 
 
</div> 
 
<div class="green_colour"> 
 
    <div class="red_colour"> 
 
    <div class="has_colour"> 
 
     I would like this to be red 
 
    </div> 
 
    </div> 
 
</div>

+0

ちょうど参照のために、それはCSS3セレクターの仕様です。 CSS3はモジュール式なので、51の仕様があります - http://www.w3.org/Style/CSS/current-workを参照してください。 HTML5と同様に、それは大きなことではありません。 –

+0

そして私は、移動したときに異なる効果を持つスタイルに関連する問題は、[CSSカスケードと継承 "仕様](http://www.w3.org/TR/css3-cascade/)で説明されていると思います。 –

+0

ブリリアント。リンクポールのおかげで多くの。 – AJP

答えて

5

は、次のような問題の解決策としてE > F子セレクタを使用することができます7+

上記のソリューションを実装するには、他の方法があります(javascriptなど)もし興味があれば。

- 編集:

私は仕事しないソリューションの理由が原因のブラウザでは、左から右への代わりに、右から左にCSSを解析するという事実のためであれば、100%わからないんだけど、私は仮定それはそれと関係があります。私が間違っているなら誰か私を修正してください。

+0

「Link-」は素晴らしいです。本当にありがとう。実際には私はjavascriptを避けようとしていましたが、今は全体の負荷をより多く切り出すことができます。本当にありがとう。 QuirksModeリンクにも感謝します。これは優先順位を強制することについて話しませんが、ここでは[子コンバイナのw3仕様](http://www.w3.org/TR/css3-selectors/#child-combinators)です。 – AJP

+1

緑色のルールの後に赤色のルールが宣言されている必要があります。両方の 'has_colour'要素はこの規則にマッチしますが、赤色が最後のものなので、この規則が適用されます。これは、 'reset.css'ファイルを最初にインポートし、HTMLヘッドの最後ではないのも理由です。 –

+0

@Benjaminは同意しますが、 'has_colour'は先祖の' div.green_colour'で下位コンビネータ関係として宣言されますが、ブラウザはその一部だけでなくルール全体をチェックするべきですか?したがって、右から左への構文解析の私の理論。 – Bassem

関連する問題