2012-01-12 15 views
5

私は、 (div A内の複数のdiv)のようなものを含むHTMLを持っています。Cssは継承された値をオーバーライドしません

<div class="a"> 
    <div class="b"></div> 
</div> 

私のCSSは以下のようになります。何らかの理由でBの値について

.a div { 
    border: solid; 
    border-width: thin; 
} 

.b { 
    border: none; 
    border-width: 0px; 
    border-collapse: collapse; 
} 

が上書きされることはありません。 しかし、 "a .div"ではなく "a"だけを書くと、内部の他のdivの動作を期待できません。

これを動作させる唯一の方法は、「重要」を使用することです。 (つまり、 "border:none!important";)しかし、これはエレガントではないようです。

が...そこに何が起こっているかのよう

エフードを任意のアイデアが大好きです。

答えて

1

.a divは、.bより高い特異性を有する。
.bのCSSが.aのものを上書きするようにするには、さらに高い特異性を与えます(例:.a div.b)。

(それとも、はい、!importantを使用することができますが、それはここで推奨されていません。)

+0

これは、私にとっては少なくとも直感的ではありませんが、魅力のように働きます(私はちょうど ".b div"を使いました)。 – EhudFisher

+0

これは奇妙です、 '.b div'はうまく動作しません。少なくとも、あなたの例ではなく、.bの中にdivがないからです。とにかく、特異性はCSSの中で非常に重要な概念です。私はそれを読むことをお勧めします。 –

3

セレクタが間違っています。

代わりの

a. div { 

書き込み

div.a { 

( "A" のクラスを持つdiv要素を選択)

代わりの

b { 

(実際にはなりますすべてのスタイルを試してくださいのB要素)

使用

.b { 

( "B" のクラスによって定義されているものを選択すると言うもの)

EDIT(応答に応じて)

divの内部にあるすべてのdivを "a"のクラスで選択するには、次のセレクタを使用します。 -

div.a div 
+0

私のセレクタは大丈夫だったという宣言を完成させるために宣言で!importantを使用することができ、私が質問に入れたことは明らかに間違っていた。私のセレクタは ".b"と ".a div"です。申し訳ありませんが、元の投稿を編集します。しかし、その解決法は私のためには機能しません。 私が選択しようとしているのは、クラスaを持つすべてのdivではなく、クラスがaである要素の下のすべてのdivです。 – EhudFisher

+0

あなたのために新しいセレクターで編集されました。 –

0

特異性はスコアCSSコンパイラによって計算され、宣言の中での最高スコアがコンテンツを変更するために取得します。特異性のそれぞれのタイプはdoesnの場合> 0 - 特異性のそれぞれのタイプはコード
($)に存在する場合> 1 -

inline id-element class-element no.-of-elements 
    $   $    $    $ 

($):

スコアは、一般的にこの順序によって計算されます「Tは0011
明らかに最初のものになります.bスコアのために0012
になりますので、ここでのコード
.a divスコアのため

に存在します勝ったので、それを上書きするためにもかかわらず.b試行内容を変更するために取得します.a div

(OR)

あなたは(コードで)

関連する問題