フローティング(高さ崩壊)をクリアする方法と原理!

なぜクリアフロート?

(フロートをクリアすることは、主に、子要素のフローティングによって引き起こされる親要素の内部高さが0であるという問題を解決することです)

1.以下のように、親ボックスにボーダーを設定し、中に大小2つのボックスを入れます。大小にフロートが設定されていない場合、デフォルトで親ボックスが開きます。

ここに写真の説明を挿入

2.内側の2つのボックスにfloat属性を追加すると

ここに写真の説明を挿入

上部の紺色のボックスが表示され、高さが設定されておらず、大小が浮いているため、親ボックスが線になります。

結論として:

  • 親要素が高さを与えない場合、

  • 内部要素が浮いていないとき、それらは広がります

  • フローティングの場合、親要素は線になります

現時点では、多くの人が新しいラベルを明確だと思うでしょう。両方とフロートの方法ですが、これら2つの方法はお勧めしません。

明確なこと:両方

クリア:両方:本質はフロートを閉じることです。つまり、親ボックスに出口と入口を閉じさせ、子ボックスが出ないようにします。

フロートをクリアする方法(最も一般的に使用される4つ)

1.追加のラベリング方法

(最後のフローティングラベルの後に、新しいラベルを追加し、クリアに設定します:両方;)(非推奨)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .fahter{
     
     
            width: 400px;
            border: 1px solid deeppink;
        }
        .big{
     
     
            width: 200px;
            height: 200px;
            background: darkorange;
            float: left;
        }
        .small{
     
     
            width: 120px;
            height: 120px;
            background: darkmagenta;
            float: left;
        }
        .footer{
     
     
            width: 900px;
            height: 100px;
            background: darkslateblue;
        }
        .clear{
     
     
            clear:both;
        }
    </style>
</head>
<body>
    <div class="fahter">
        <div class="big">big</div>
        <div class="small">small</div>
        <div class="clear">额外标签法</div>
    </div>
    <div class="footer"></div>
</body>
</html>

現時点では

ここに写真の説明を挿入

フロートをクリアすると、親要素は自動的に子ボックスの最高の高さを検出し、次に同じ高さを検出します。

利点:理解しやすく便利です

短所:意味のないタグの追加、不十分なセマンティクス

使用はお勧めしません。

2.オーバーフロー属性を親に追加します

(オーバーフローを追加:親要素に非表示)(非推奨)

BFCメソッドをトリガーすることにより、フローティングがクリアされます

.fahter{
    
    
    width: 400px;
    border: 1px solid deeppink;
    overflow: hidden;
}

利点:シンプルなコード

短所:コンテンツが増えると、自動行折り返しなしでコンテンツが非表示になりやすく、オーバーフローした要素を表示できません。

推奨されません

3. after疑似要素を使用して、フロートをクリアします(推奨)

.clearfix:after{
    
    /*伪元素是行内元素 正常浏览器清除浮动方法*/
    content: " ";/* content中包含的空格也能生效,旧版本Opera浏览器中有个隐藏的bug,需要添加一个空格字符才能解决 */
    display: block;
    clear:both;
    /* 
    下面两个属性取消后,也可以清除浮动。
    我个人理解如下,为了保证after不在界面显示,所以使用了下方属性。 
    */
    height: 0;/* 高度为0,隐藏元素 */
    visibility: hidden;/* 元素隐藏,原位置还在 */
}
.clearfix{
    
    
    *zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
}

<body>
    <div class="fahter clearfix">
        <div class="big">big</div>
        <div class="small">small</div>
        <!--<div class="clear">额外标签法</div>-->
    </div>
    <div class="footer"></div>
</body>

利点:クローズドフローティングのアイデアに沿って、構造は意味的に正しい

短所:ie6-7は疑似要素をサポートしていません:その後、zoom:1を使用してhasLayoutをトリガーします。

推奨用途

4.前後の二重疑似要素を使用してフロートをクリアします(推奨)

/* 提示:当我们不想要外边距折叠(重叠取最大值)时,这个版本的清除浮动非常有效 */
.clearfix:after,.clearfix:before{
    
    
    content: " ";/* content中包含的空格也能生效,旧版本Opera浏览器中有个隐藏的bug,需要添加一个空格字符才能解决 */
	/* 外边距无法通过单元格元素折叠 */
    display: table;/* 防止伪元素外边距折叠 */
}
/* 只有after伪元素需要清除浮动 */
.clearfix:after{
    
    
    clear: both;
}
.clearfix{
    
    
    *zoom: 1;
}
<div class="fahter clearfix">
    <div class="big">big</div>
    <div class="small">small</div>
</div>
<div class="footer"></div>

利点:コードがより簡潔になります

短所:zoom:1を使用してhasLayoutをトリガーします。


この記事は他のブロガーによって転載されています。違反がある場合は
、転載元を削除するために連絡してください:https://blog.csdn.net/h_qingyi/article/details/81269667
説明:元のコンテンツの一部です。削除して追加しました(リファレンスブック:CSSの詳細な分析)。

おすすめ

転載: blog.csdn.net/qq_27802993/article/details/109274851