2012-01-01 9 views
7

私のコードでは、h1のより細かいルールを#inner h1として定義し、より具体的なルールは#container h1として定義しています。しかし、もし#container h1が#inner h1の後に置かれれば、それは有効になり、#inner h1は無視されますが、より具体的であるべきではありません。より具体的なCSSルールが機能していません

問題を理解するのに手伝ってください。

CSS:

#inner h1 { font-size:25px; } 
#container h1 { font-size:15px; } 

HTML:

<div id="container"> 
    <div id="inner"> 
    <h1>Hello World!</h1> 
    </div> 
</div> 
+3

いいえ、 '#inner h1'は' #container h1'より具体的ではありません。彼らはどちらも101の特異性を持っています(私は信じています、http://www.htmldog.com/guides/cssadvanced/specificity/)。ある要素がINSIDEであるという理由だけで、別の要素が内部のものをより具体的にすることはありません。 – Charlie

+1

@Charlie:文字通り100ではないことに注意してください.1つのクラスセレクタは、たとえば、単一のIDセレクタをオーバーライドしません。これは、1つ1つのようなものです。 – BoltClock

+0

清潔さありがとう – Charlie

答えて

6

あなたの特異性のアイデアはちょっとしたものかもしれません。特異性はコンテキストフリーのアイデアでなければなりません.HTMLとは独立してCSSを読み込むことができるので、どのルールがより特定的であるかを推測するHTMLドキュメントは必要ありません。この他の有効な例を考え:

<div id="inner"> 
    <div id="container"> 
    <h1>Hello World!</h1> 
    </div> 
</div> 

このスニペットでは、あなたはinnerは、より具体的でなければならないこと、あなたの初期の推測に反するなければならないでしょう。これはあなたの解釈に必要な文脈(CSSにはない)を意味します。

重要な点は、両方のルールが等しい特異性(h1要素の子孫がidであること)であり、セレクタがより近い子孫に優先度を与えていないことです。

等しい特異性の2つのルールが適用される場合、優勝者はCSSで最後に宣言されたものです。

+0

良い説明 – grc

+0

別のこと:結合子は特異性に寄与しないので、 '>'のために領域を入れ替えてもどちらの規則も優先されません。なぜなら両方の結合子には特異性がないからです。 [この質問](http://stackoverflow.com/questions/8096829/why-do-foo-bar-and-foo-bar-have-the-same-specificity-in-css)を参照してください。 – BoltClock

-2

これはすべての:) CSSでの問題ではありませんが、クラスを次々に解析し、以前であれば、最後のルールはもちろん、以前よりも優先されますより具体的でないか、または重要な記述を含まない場合は、font-size:25px!important;最後のルールを上書きするか、それ以外の場合はクラスの場所を変更する

+1

クラス?どんな授業ですか? – grc

+0

#inner h1は具体的ではありませんか? –

+0

@grc、css classes lol –

3

これらはどちらも同じ特異性を持ちますが、スタイルシートに表示される順序は適用されるスタイルルール。

ルールを構造化してより具体的なものにすることはできますが、一般的には!important修飾子から離れることになります。

詳細については、W3のCSS仕様の6.4.3 Calculating a selector's specificityを参照してください。

+0

#inner h1は具体的ではありませんか? –

+1

セレクターの特異性に関する記事(昨日と同様の質問がありました)、http://www.htmldog.com/guides/cssadvanced/specificity/ – Charlie

+1

@ShawnTaylorいいえ、これらの2つは同じ特異性を持っています。 – steveax

関連する問題