2012-03-15 1 views
-1

まず、HTMLマークアップ、'body {padding:0;}'のとき、 'float'と 'clear'は変な動作をしています。どうして?

<p>Bananas For BreakFast</p> 

<h1>What the what!?</h1> 

...とCSS、

body, p, h1, h2, h3, h4{ 
    margin: 0; padding: 0; 
} 

body{ 
    padding: 30px; 
} 


/*remove the comment to trigger the effect 

body{ 
    padding: 0; 
} 

*/ 


p{ 
    float: left; 
    background-color: red; /*just to aid visualization*/ 
} 

h1{ 
    clear: both;  
    margin-top: 200px; 
    background-color: grey; /*just to aid visualization*/ 
} 

あなたは以下のtinkerbinページでアクションでそれを見ることができます。

http://tinkerbin.com/FJcLuxBr

だから、私の問題は何ですか?

シンプル:ボディエレメントにパディングがあり、クリアされたエレメントのマージントップが適用されます。 'パディング:0;'同じ消去された要素の「margin-top」が機能しなくなります。

なぜですか?

クリアされた要素は、それより上の要素でマージンコラプスに参加しないため、マージントップのマージンをボディマージンと一緒に折りたたむことはできません。たとえそれがあったとしても、ボディ要素にマージンを適用して全体を押し下げる必要がありますが、そうではありません。間にclear div要素を追加

+0

あなたは何をしたいですか?ボディのみにパディングを適用し、マージントップをh1要素にのみ適用しますか? – redDevil

+0

いいえ、これは私が出会ったばかりの奇妙な振る舞いで、その説明が不思議でした。私はレイアウトを達成しようとしていません - 私はちょうどその動作を理解しようとしています。 – banzomaikaka

+1

body {float:left} ha - 他にどのような悪影響があるのか​​はっきりしていませんが、問題を修正しているようです。 – mikevoermans

答えて

0

クリア要素が、それ以上の要素を持つ余裕が崩壊に参加していないので、これはマージントップにはできません体のマージンと崩壊する。

http://www.w3.org/TR/CSS2/box.html#collapsing-marginsを参照してください。私は要素をクリアしたものを見つけることができません。要素は、別のクリアされた要素または境界/パディングによって親から分離されてはならないことに注意してください。

そして、たとえそれがあったとしても、ボディ要素にマージンを適用して全体を押し下げる必要があります。再び

号、仕様を参照:要素のマージンは、その親のトップマージンで折りたたまれている場合

を、ボックスの上部境界エッジは親と同じになるように定義されます。

+0

私はそれを理解しました。私が意味することは、「クリアされた要素がマージンの崩壊に参加しない」ということです。実際に「クリアランス」を導入する要素を意味していました。仕様を参照するか、または私の答えを待っています(私は時間があるときに投稿します) 。しかし、はい、私はひどく自分自身を説明したと思います。 – banzomaikaka

+0

...しかし、私はちょうど 'クリアランス'事実を迅速に明らかにする。それはあなたに答えのヒントを与えるかもしれません。前の浮動要素の下端よりも「クリア:両方、左または右」の「要素」が既に存在する場合、仕様で指定されているように「クリアランス」は導入されません。この場合、marginが適用されます、そしてマージンが崩壊する。さもなければ、これは、クリアランスが導入されたときに、マージントップが適用されず、崩壊しない。とにかく、ちょっと時間があるとすぐに、上のケースを例にして、適切で構造的な答えを与えます。 – banzomaikaka

+0

@JOPLOmacedo:あなたはそれをかなり理解したと思います。私はもう答えを書く必要はありません:) – BoltClock

関連する問題