clear,clearfix,フローティングクリア
6730 ワード
フローティングとクローズフローティングのクリア
WHYクリアフローティング
CSSでの位置決めメカニズム:通常フロー、フローティング、絶対位置決め(「position:fixed」は「position:absolute」のサブクラス).
フローティングのクリア
brラベルとそれ自体のhtmlプロパティを使用して、
長所:分かりやすく、把握しやすい
欠点:この方法によって、どれだけ無意味な空のラベルが追加され、構造と表現の分離に反し、後期メンテナンスで悪夢になるか想像できます.
<div class="warp" id="float3" style="overflow:hidden; *zoom:1;">
<h2>3) overflow </h2>
<div class="main left">.main{float:left;}</div>
<div class="side left">.side{float:right;}</div>
</div>
<div class="footer">.footer</div>
利点:構造や意味化の問題がなく、コード量が極めて少ない.
欠点:コンテンツが増えると自動的に改行しないため、コンテンツが隠され、オーバーフローする要素が表示されなくなりやすい.04年にPOPOPOはoverflow:hiddenが中キーを失効させることを発見しました.これは私がマルチタグ閲覧制御として受け入れられないことです.だから使わないでください.
利点:構造と意味化の問題がなく、コード量が極めて少ない
欠点:複数のネスト後、firefoxはコンテンツをすべて選択する場合があります.IEではmouseoverによって幅が変わると最外層モジュールにスクロールバーなどがあり、firefoxの初期バージョンでは理由もなくfocusなどが発生するので、嗷のDemoを見て使用しないでください
利点:構造と意味化の問題がなく、コード量が極めて少ない
欠点:親要素に隣接する要素のレイアウトに影響を与えるため、bodyまでフローティングすることはできません.推奨しません.
IE 6-7は:afterをサポートしていないため、zoom:1を使用してhasLayoutをトリガーします.
この方法は、How To Clear Floats Without Structural Markupに由来する
原文のすべてのコードは以下の通りです.
<style type="text/css">
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {display: inline-block;} /* for IE/Mac */
</style>
<!--[if IE]> <style type="text/css">
.clearfix {zoom: 1;/* triggers hasLayout */
display: block;/* resets display for IE/Win */}
</style>
<![endif]-->
IE/Macの市場占有率が極めて低いことを考慮して、私たちは直接無視して、最後に簡素なコードは以下の通りです.
.clearfix:after {content:"."; display:block; height:0; visibility:hidden; clear:both; }
.clearfix { *zoom:1; }
利点:構造と意味化が完全に正確で、コード量が中央にある
欠点:多重方式が適切でないとコード量が増加する
精進する
上に7種類のクローズドフローティングの方法を列挙したが,第3節の解析の原理から,display:table-cell,display:inline-blockなどBFCの属性値をトリガすればクローズドフローティングが可能であることが分かった.各方面から比較すると,after擬似要素閉鎖フローティングは比較的良好な解決策であるに違いないが,以下ではこの方法を詳細に述べる.
.clearfix:after {content:"."; display:block; height:0; visibility:hidden; clear:both; }
.clearfix { *zoom:1; }
分析によると、clear:bothがフローティングをクリアするために使用されているほか、他のコードはcontentが生成した内容を隠すために使用されているにほかならない.これは、他のバージョンの閉じたフローティングがfont-size:0、line-height:0を持っている理由である.
精進方案一:
.clearfix:after {content:"\200B"; display:block; height:0; clear:both; }
.clearfix { *zoom:1; }.
精進方案二:
Nicolas Gallagher大湿から抽出された、原文:A new micro clearfix hack、この方法にもfirefox中の空隙の問題は存在しない.
/* For modern browsers */
.cf:before,.cf:after {
content:"";
display:table;
}
.cf:after { clear:both; }/* For IE 6/7 (trigger hasLayout) */
.cf { zoom:1; }
次の点に注意してください。
上の方法は使いました:beforeの偽元素、多くの人はこれに対して少し迷って、いったい私はいつbeforeを使う必要がありますか?どうして案が一つもないのですか.内部要素floatがBFCを作成したため、内部要素のmargin-topと前の箱のmargin-bottomが重なり合うのを処理するために使用されます.もしこれがあなたが望んでいないならば、beforeを加えることができて、単純な閉じた浮動だけならば、afterは十分です!砂漠の「Clear Float」で述べたように、clearfix:afterのみを使用する場合、ブラウザ間互換性の問題で垂直マージンが重なるバグがあります.これはバグではなく、BFCにあるべき特性です.
テキストリンク:http://www.cnblogs.com/mofish/archive/2012/05/14/2499400.html
原文参考記事:
番外整理:
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}
.clearfix{*+height:1%;}
使用法は簡単で、フローティング要素の親クラウドにclass=「demo clearfix」を追加します.
.demo:after,.demo2:after{content:".";display:block;height:0;clear:both;visibility:hidden}
.demo,.demo2{*+height:1%;}
以上の書き方でhtml構造の変更を回避し,cssで直接解決した..clearfix{overflow:auto;_height:1%}
.clearfix{overflow:hidden;_zoom:1;}