2012-01-12 3 views
0

私はこのコードを持っており、!important(これは決してそれを使わない方法があることを知っているので、私は使用したくありません)なしでは動作しません。これはなぜ "!important"でのみ機能するのですか?

興味深いのは、CSSのラインが他のすべての後にある(と私の知る限り、これは他のものを上書きしなければならない)ということである

ライブデモjsFiddle

HTMLの構造:

<div id="body"> 
    <div class="box"> 
     <p>...</p> 
    </div> 
    <p>...</p> 
</div> 

CSS:

#body{ 
    padding:18px 35px; 
} 

#body p{ 
    margin-bottom:18px; 
} 

.box{ 
    background:#ddd; 
    border:1px solid #000; 
    padding:5px; 
} 

.box p{ 
    margin:0;/*works with !important*/ 
} 
+0

私は '.box p 'の前に'#body'を追加して動作させることができました。これらの種類のものは、私がCSSをマスターすることはないと思うようになります.... – ajax333221

答えて

5

#body pのIDが.box pのクラスよりも具体的なセレクタであるためです。重要なのはそのカスケードを単純に上書きします。

+0

CSSは次のように解析されます:少なくとも2つ以上の人が同じパスを共有している場合の唯一の例外は、順序は関係ありません(順序は関係しますか?) – ajax333221

+0

それらは特異性が同等である場合にだけ問題を発注します。 .class {color:red;} .class {color:blue;}は順序に依存します。 –

2

#bodyとpのマッチングは、.boxとpのマッチングよりも高い特異性を持っています。 CSSの仕様のspecificity sectionを読んでください。試してみてください

#header .box p { margin: 0; } 

#headerと.boxの間のスペースは重要です。

0

あなたの#body pは、より高い特異性値を持っています。一般的に、特異性値の計算方法については、hereを読むことができます。

関連する問題