深入解析clearfix清除浮动

Mar 17, 2017 pm 04:27 PM
クリアフロート

深入解析clearfix清除浮动

深入解析clearfix清除浮动

我想大家在写CSS的时候应该都对清除浮动的用法深有体会,今天我们就还讨论下clearfix的进化史吧。

.clear{clear:both;line-height:0;}
ログイン後にコピー

clearfix清除浮动

首先在很多很多年以前我们常用的清除浮动是这样的。
现在可能还可以在很多老的站点上可以看到这样的代码,相当暴力有效的解决浮动的问题。但是这个用法有一个致命伤,就是每次清除浮动的时候都需要增加一个空标签来使用。
这种做法如果在页面复杂的布局要经常清除浮动的时候就会产生很多的空标签,增加了页面无用标签,不利于页面优化。但是我发现大型网站中 居然还在使用这种清除浮动的方法。有兴趣的同学可以上他们首页搜索一下他们的.blank0这个样式名称。
因此有很多大神就研究出了 clearfix 清除浮动的方法,直接解决了上面的缺陷,不需要增加空标签,直接在有浮动的外层加上这个样式就可以了,这也是我们今天要讨论的clearfix进化史。
起源

.clearfix:after { 
    visibility: hidden; 
    display: block; 
    font-size: 0; 
    content: " "; 
    clear: both; 
    height: 0; 
} 
.clearfix { display: inline-table; } 
* html .clearfix { height: 1%; }//Hides from IE-mac 
.clearfix { display: block; }//End hide from IE-mac
ログイン後にコピー

解释一下以上的代码:
对大多数符合标准的浏览器应用第一个声明块,目的是创建一个隐形的内容为空的块来为目标元素清除浮动。
第二条为clearfix应用 inline-table 显示属性,仅仅针对IE/Mac。利用 * 对 IE/Mac 隐藏一些规则:
height:1% 用来触发 IE6 下的haslayout。
重新对 IE/Mac 外的IE应用 block 显示属性。
最后一行用于结束针对 IE/Mac 的hack。(是不是觉得很坑爹,Mac下还有IE)
起源代码可能也是很早期的时候了,再往后Mac下的IE5也发展到IE6了,各种浏览器开始向W3C这条标准慢慢靠齐了。所以就有了下面这个写法出现了。

.clearfix:after { 
    visibility: hidden; 
    display: block; 
    font-size: 0; 
    content: " "; 
    clear: both; 
    height: 0; 
} 
* html .clearfix { zoom: 1; } /* IE6 */
ログイン後にコピー

IE6 和 IE7 都不支持 :after 这个伪类,因此需要后面两条来触发IE6/7的haslayout,以清除浮动。幸运的是IE8支持 :after 伪类。因此只需要针对IE6/7的hack了。
在一个有float 属性元素的外层增加一个拥有clearfix属性的p包裹,可以保证外部p的height,即清除"浮动元素脱离了文档流,包围图片和文本的 p 不占据空间"的问题。
Jeff Starr 在这里针对IE6/7用了两条语句来触发haslayout。我在想作者为什么不直接用 * 来直接对 IE6/7 同时应用 zoom:1 或者直接就写成:

.clearfix:after { 
    visibility: hidden; 
    display: block; 
    font-size: 0; 
    content: " "; 
    clear: both; 
    height: 0; 
} 
.clearfix{*zoom:1;}
ログイン後にコピー

但是对于很多同学这种优化程度代码还是不够给力,clearfix 发展到现在的两个终极版。
重构clearfix浮动
构成Block Formatting Context的方法有下面几种:
float的值不为none。
overflow的值不为visible。
display的值为table-cell, table-caption, inline-block中的任何一个。
position的值不为relative和static。
很明显,float和position不合适我们的需求。那只能从overflow或者display中选取一个。
因为是应用了.clearfix和.menu的菜单极有可能是多级的,所以overflow: hidden或overflow: auto也不满足需求(会把下拉的菜单隐藏掉或者出滚动条),那么只能从display下手。
我们可以将.clearfix的display值设为table-cell, table-caption, inline-block中的任何一个,但是display: inline-block会产生多余空白,所以也排除掉。
剩下的只有table-cell, table-caption,为了保证兼容可以用display: table来使.clearfix形成一个Block Formatting Context。
因为display: table会产生一些匿名盒子,这些匿名盒子的其中一个(display值为table-cell)会形成Block Formatting Context。
这样我们新的.clearfix就会闭合内部元素的浮动。
后面又有人对此进行了改良:
终极版一:

.clearfix:after { 
    content:"\200B"; 
    display:block; 
    height:0; 
    clear:both; 
} 
.clearfix {*zoom:1;}/*IE/7/6*/
ログイン後にコピー

解释下:content:"\200B";这个参数,Unicode字符里有一个“零宽度空格”,即 U+200B,代替原来的“.”,可以缩减代码量。而且不再使用visibility:hidden。
终极版二:

.clearfix:before,.clearfix:after{ 
    content:""; 
    display:table; 
} 
.clearfix:after{clear:both;} 
.clearfix{ 
    *zoom:1;/*IE/7/6*/
}
ログイン後にコピー

这两个终极版代码都很简洁,终极版一和二都可以使用,以上代码都经过测试,大家赶紧用一下吧,如果有什么问题请及时跟我反馈,如果你还停留在clearfix的老代码的时候就赶紧更新一下代码吧。

以上就是clearfix清除浮动进化史的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关文章:

css之clearfix的用法深入理解

浅谈css清除浮动clearfix和clear的用法介绍

CSS之关于clearfix清除浮动方法

整理的最全的css clearfix清除浮动的方法

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLで入力ボックスを整列させる方法 HTMLで入力ボックスを整列させる方法 Apr 05, 2024 am 10:18 AM

HTML を使用して入力ボックスを配置する方法には、text-align 属性を使用して入力ボックスのテキストを左、右、または中央に配置するように指定する方法があります。 float プロパティを使用して、入力ボックスをページの左側または右側にフロートさせ、相対的な配置に影響を与えます。

フロートをクリアする5つの方法とは何ですか? フロートをクリアする5つの方法とは何ですか? Nov 20, 2023 pm 04:27 PM

float をクリアする 5 つの方法は次のとおりです: 1. clear 属性を使用する、2. overflow 属性を使用する、3. 疑似要素 clearfix を使用する、4. flex レイアウトを使用する、5. グリッド レイアウトを使用する。詳細な紹介: 1. フロートをクリアするために最も一般的に使用されるメソッドである、clear 属性を使用します。フローティング要素の後に要素を追加し、それに「clear: Both;」スタイルを追加できます。2. overflow 属性を使用して、親要素を設定します。「overflow: auto;」などを設定します。

フロートをクリアする方法はありますか? フロートをクリアする方法はありますか? Feb 22, 2024 pm 04:00 PM

フロートをクリアする方法はありますか? 特定のコード例が必要です。Web ページのレイアウトでは、フロートは要素をドキュメント フローから切り離して他の要素と相対的に配置できるようにする一般的なレイアウト方法です。ただし、フローティング レイアウトを使用するときによく発生する問題は、親要素がフローティング要素を正しくラップできず、ページのレイアウトが乱れることです。したがって、親要素が float 型要素を正しくラップできるように、float をクリアする措置を講じる必要があります。 float をクリアする方法は数多くありますが、ここではよく使用されるいくつかの方法と具体的なコード例を紹介します。

レイアウトレイアウトとは何ですか? レイアウトレイアウトとは何ですか? Feb 24, 2024 pm 03:03 PM

レイアウトとは、Web ページの要素を特定の規則と構造に従って配置および表示するために Web デザインで採用される組版方法を指します。合理的なレイアウトにより、Web ページはより美しく、整然とし、優れたユーザー エクスペリエンスを実現できます。フロントエンド開発では、従来のテーブル レイアウト、フローティング レイアウト、位置決めレイアウトなど、多くのレイアウト方法から選択できます。しかし、HTML5 や CSS3 の推進により、Flexbox レイアウトやグリッド レイアウトなどの最新のレスポンシブ レイアウト技術が主流になりました。

フロート要素をオーバーフロー プロパティでクリアできない理由 フロート要素をオーバーフロー プロパティでクリアできない理由 Jan 27, 2024 am 08:08 AM

オーバーフロー属性を使用してフローティングをクリアできない理由を分析するには、特定のコード例が必要です はじめに: Web ページのレイアウトでは、フローティング要素に関する問題がよく発生します。フローティング要素の影響を解決するには、通常、フロートをクリアする方法を使用します。ただし、オーバーフロー属性を使用して浮動小数点をうまくクリアできない場合があるため、この記事ではこの問題を詳しく掘り下げ、具体的なコード例を示します。 1. なぜフロートをクリアする必要があるのですか?フローティング要素とは、float 属性を設定して要素をドキュメント フローから取り出すことを意味します。

CSSにおけるfloatの役割 CSSにおけるfloatの役割 Apr 28, 2024 pm 01:51 PM

CSS の float プロパティを使用すると、要素がドキュメント フローから抜け出して親要素の端に沿って整列することができ、テキスト イメージ、フローティング メニュー サイドバー、重なり合う要素の作成と位置合わせに使用されます。フローティング要素の属性値には、left (左フロート)、right (右フロート)、none (クリアフロート)、inherit (継承) があります。 float 要素によって親要素がオーバーフローするのを防ぐには、clearfix 手法を使用して空の要素を追加し、float をクリアします。

CSSでフロートをクリアする方法は何ですか CSSでフロートをクリアする方法は何ですか Oct 30, 2023 am 11:57 AM

CSSでfloatをクリアする方法には、clear属性、overflow属性、clearfixクラス、親要素のclearfixクラス、floatをクリアする擬似要素、親要素のoverflow属性、clear属性とBFCの組み合わせなどがあります。詳細な紹介: 1. フロートをクリアする簡単で一般的な方法であるクリア属性を使用します。フローティング要素の後ろに空のブロックレベルの要素を追加し、それにクリア属性を設定すると、以前のフローティング効果をクリアして、フローティング要素をクリアすることができます。以下の要素は通常どおりに配置されます。

オーバーフロークリアフロートが効果がないのはなぜですか? オーバーフロークリアフロートが効果がないのはなぜですか? Oct 17, 2023 pm 02:29 PM

オーバーフロークリアフロートが無効な理由としては、フローティング要素の高さが設定されていない、フローティング要素がクリアされている、クリア要素がフローティング要素の前にある、クリア要素の高さが設定されていない、またはクリア要素が考えられます。浮動要素の後などです。詳細な紹介: 1. フローティング要素の高さが設定されていません。フローティング要素の高さが設定されていない場合、クリアできない可能性があります。フローティング要素の高さはコンテンツによって決定されるため、コンテンツに設定がない場合は、高さ、フローティング要素にも高さはありません; 2. フローティング要素はクリアされますが、フローティング要素がクリアされるときに、オーバーフロー プロパティがクリアされない可能性があります。

See all articles