2012-01-07 4 views
1

clear: rightは、すべての連続フロートのためにclear: leftも発生するようです! http://jsfiddle.net/Mx7zu/11/か、このコードを参照してください。clear:rightもクリアします:left ??奇妙な浮動の振る舞い

<html> 
<head> 
<style> 
div { margin: 16px; width: 200px; height: 130px; border: solid red 1px; } 
#right1 { float: right; } 
#right2 { float: right; clear: right; } 
#left1, #left2 { float: left; } 
</style> 
</head> 
<body> 
<div id="right1">Right 1</div> 
<div id="right2">Right 2</div> 
<div id="left1">Left 1</div> 
<div id="left2">Left 2</div> 
</body> 
</html> 

私はdiv要素のleft1とleft2がRIGHT1と同じレベルで、一番上にあることを期待!私は最後の一つとしてclear: right(right2)とのdivを配置する場合にのみ発生:

<div id="right1">Right 1</div> 
<div id="left1">Left 1</div> 
<div id="left2">Left 2</div> 
<div id="right2">Right 2</div> 

あなたはこの奇妙な振る舞いを説明していただけますか?前もって感謝します! FF 9.0.1でテストされています。

+0

同じ要素にクリアとフロートを割り当てることはできません。 –

+0

@ Jaa-c、なぜですか?何が起こるでしょうか?私はそれを行うことができ、それが動作することがわかります - div right2は浮動小数点ともクリアです。 – TMS

+1

@ Jaa-c:そうではありません。 float要素はそれ自身をクリアすることはできませんが、以前のfloatをクリアすることができます。これは 'clear'プロパティが行うことです。 – BoltClock

答えて

3

ブラウザをデフォルトでは、ページを左から右、上から下にレイアウトすると考えてください。

コンテンツの開始点は、最初は左上にあります。

float:right#right1は、divをラップして右側に移動します。その左側のスペースは他のコンテンツにも使用できます。

float:rightは、divをラップして右に移動しようとします。しかしclear:rightは、それが#right1 divの横に行かないようにします。したがって、配置するコンテンツの開始点は、#right2 divが正常に配置されるまで下に移動します。それは次に右に置かれます。

#left1 divが配置されます。 float:leftシュリ​​ンクは、divをラップし、コンテンツの開始点に配置しようとします。コンテンツの開始点は、すぐに#right2の左になります。 #right2の左のスペースは#left1を含むのに十分な大きさなので、ここには#left1が置かれています。

同様に、#right2の左側へと#left1の右側の空間が#left2が配置されることだ、#left2を収容するのに十分な大きさです。

+0

Alohciですが、 'clear:right'は右側だけに影響するのであって、両方には影響しません!それ以外の場合は 'clear:both'を使用します。それは私が求めている不明なことです!私はあなたの記事の場所にコメントを直接置いた。 – TMS

+0

私はあなたが誤解していると思います。 CSS 2.1のコメント:[このプロパティは、要素のボックスのどの辺が以前のフローティングボックスに隣接していないかを示します。](http://www.w3.org/TR/CSS2/visuren.html#flow-control )。すなわち、コンテンツがその横に並ぶのを止めることなく、要素が先行するコンテンツの横に並ぶのを止める。 – Alohci

+0

@Tomas - つまり、 'clear:right'は'#right1'を右に持つ '#right2'を停止します。他に何もない。 – Alohci