2017-03-03 14 views
3

spec状態すなわち:クリアランスが存在するときにマージンが崩壊するのはなぜですか?

その兄弟はクリアランスを有している場合を除き、インフローブロックレベル要素の下マージンは常に、その次に、フローブロックレベルの兄弟の上マージンと崩壊します。

しかし、予期せぬことがありました。codeは次のとおりです。

<div style="margin-bottom: 100px; "></div> 
<div style="float:left;width:10px;height: 10px; background: red"></div> 
<div style="margin: 100px;clear: left"></div> 
test 

divの下マージン及び「その兄弟は、クリアランスがない限り、」違反第div崩壊の余白。

どのように状況を説明するには?上記のルールをより正確に説明するための具体的な例をいくつか教えていただけますか?

+0

*「最初のdivの下の余白と第三のdiv崩壊のマージン、,,,」* || Chromeでは、崩壊しないで、どのブラウザを使用していますか? – zer00ne

答えて

1

質問の前提が正しくありません。すべてのシナリオでは、マージンは崩壊しません。

最も単純なケースは、与えられた例では、3番目の要素にクリアランスがあり、1番目のdivの下端が3番目のdivの余白と崩れず、計算されたクリアランスは-90px。容器の頂部から90PX = 110px - そう3番目のボックスの上部には100pxに100pxに+です。

この計算はclearプロパティのCSS 2.2仕様、実施例2に記載されています。

同様に、FirefoxまたはEdgeでは、例の前に何らかのコンテンツがある場合、または本体に上の境界線がある場合でも、余白は崩壊せず、クリアランスは-90pxです。身体への前のコンテンツ又は上の境界が存在しない場合

例外的な場合には、Firefoxとエッジです。この場合、Edgeは余白を崩壊させず、クリアランスを0に計算します.Firefoxは余白を崩壊させます。

+0

3番目のdivの 'clear'プロパティが 'none'の場合、3番目のdivの上端が浮動要素の右側にプッシュされます。この[ケース](https://jsfiddle.net/weapon1991/6ducphav/)に '**過去**' を理解するにはどのように? –

関連する問題