フローティングの仕組み
フローティング要素はドキュメント フローから分離されており、スペースを占有しません。フローティング要素は、それを含む境界線またはフローティング要素の境界線に当たると、そのまま残ります。
浮動要素によって引き起こされる潜在的な問題
1. 親要素の高さを拡張することはできず、親要素と同じレベルの要素に影響します
2. 浮動要素と同じレベルの非浮動要素それに従います
3. 最初の要素がフローティングされていない場合、その前の要素もフローティングにする必要があります。そうしないと、ページの表示構造に影響します
フロートをクリアする解決策は何ですか?
一般的に、3つの方法があります。
1. 空のタグを使用してフローティングタグをクリアします
すべてのフローティングタグの後に空のタグを追加し、CSS 属性clear:bothを定義します
比較画像: divは引き伸ばされていません
空のタグを追加するだけです, 欠点は、非セマンティックなタグが追加されることです
<style type="text/css"> html,body,div{ margin: 0;padding: 0;} .box{border: 1px solid #333;} p{border: 1px dotted #333;} .box img{float: left;} .box p{float: left;} .cb{clear: both;} </style></head><body><div class="box"><img src="1.jpg" width="50px" height="50px"> <p>one</p><!--在这里增加 <div class="cb"></div> --></div></body>
もちろん、floated 要素の後ろにある要素を float にする必要がない場合は、clear:both を追加することもできます。これも良いことです。
2. overflow を使用します
浮動要素を含む親要素タグに CSS 属性を追加します ( overflow: hidden または auto;zoom:1 は、IE6 との互換性のために使用されます)。3. after 疑似オブジェクトを使用してフロートをクリアします。
ただし、このメソッドは IE 以外のブラウザにのみ適用できます。これを使用するときは、フローティング要素をクリアする必要がある疑似オブジェクトに必ず height:0 を設定してください。そうしないと、オブジェクトが複数のオブジェクトになることにも注意してください。実際よりも高いピクセル数になります。
<head><style> html,body,div{ margin: 0;padding: 0;} .box{border: 1px solid #333;} p{border: 1px dotted #333;} .box img{float: left;} .box p{float: left;} .cb{clear: both;} .clearfix{display: inline-block; /*zoom:1;*/ } /* for IE ; or use zoom:1 to trigger the hasLayout; */ .clearfix:after{content: "."; display: block; height: 0; visibility: hidden;clear: both;} </style></head><body><div class="box clearfix"><img src="1.jpg" width="50px" height="50px"> <p>one</p></div></body>
4. フローティング要素の親要素もフローティングされますが、要素全体が再びフローティングされるため、お勧めできません~
5. フローティング要素に直接属性を追加する方法もあります。要素の表示: Table;
FF Chrome およびその他のサポート、IE6/IE7 テストではサポートされていないことが示されているため、Haslayout に加えて Zoom: 1 または Display: Inline-Block をトリガーする必要があります。