首頁 web前端 H5教程 深入解析clearfix清除浮动

深入解析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 Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

html怎麼對齊輸入框 html怎麼對齊輸入框 Apr 05, 2024 am 10:18 AM

使用 HTML 對齊輸入框的方法有:使用 text-align 屬性指定 left、right 或 center 來對齊輸入框文字。使用 float 屬性將輸入框浮動到頁面左側或右側,以影響其相對對齊方式。

清除浮動的5種方式有哪些 清除浮動的5種方式有哪些 Nov 20, 2023 pm 04:27 PM

清除浮動的5種方式分別是:1、使用clear屬性;2、使用overflow屬性;3、使用偽元素clearfix;4、使用flex佈局;5、使用grid佈局。詳細介紹:1、使用clear屬性,這是最常用的清除浮動的方法,可以在浮動元素後面添加一個元素,並為其添加“clear: both;”樣式;2、使用overflow屬性,可以為父元素設定”overflow: auto;“等等。

清除浮動有什麼方法 清除浮動有什麼方法 Feb 22, 2024 pm 04:00 PM

清除浮動有什麼方法,需要具體程式碼範例在網頁佈局中,浮動是一種常用的佈局方法,可以讓元素脫離文件流,並相對其他元素進行定位。然而,使用浮動佈局時常常會遇到一個問題,就是父元素無法正確地包裹浮動元素,導致頁面產生佈局錯亂的情況。所以,我們需要採取措施來清除浮動,使得父元素能夠正確地包裹浮動元素。清除浮動的方法有多種,以下將介紹常用的幾種方法,並給出具體的程式碼範例

什麼是layout佈局? 什麼是layout佈局? Feb 24, 2024 pm 03:03 PM

layout版面是指在網頁設計中,為了讓網頁元素依照一定的規則和結構排列和展示而採取的一種排版方式。透過合理的佈局,可以讓網頁更加美觀、整齊,並且達到良好的使用者體驗。在前端開發中,有許多種佈局方式可以選擇,例如傳統的table佈局、浮動佈局、定位佈局等。但是,隨著HTML5和CSS3的推廣,現代的響應式佈局技術,如Flexbox佈局和Grid佈局,成為了

為什麼浮動元素不能被overflow屬性清除 為什麼浮動元素不能被overflow屬性清除 Jan 27, 2024 am 08:08 AM

解析為什麼使用overflow屬性無法清除浮動,需要具體程式碼範例引言:在網頁佈局中,常常會遇到浮動元素的問題。為了解決浮動元素所帶來的影響,我們通常會使用一種清除浮動的方法。然而,有時候我們會發現,使用overflow屬性無法很好地清除浮動,本文將深入探討這個問題並提供具體的程式碼範例。一、為什麼需要清除浮動?浮動元素是指透過設定float屬性使元素脫離文檔流

css清除浮動的方式有哪些 css清除浮動的方式有哪些 Oct 30, 2023 am 11:57 AM

css清除浮動的方式有使用clear屬性、overflow屬性、clearfix類別、父元素的clearfix類別、偽元素清除浮動、父元素的overflow屬性以及clear屬性和BFC相結合等。詳細介紹:1、使用clear屬性,一種簡單而常用的清除浮動的方法,透過在浮動元素的後面添加一個空的塊級元素,並為其設置clear屬性,可以清除前面的浮動影響,使其下方的元素正常佈局等等。

css中float的作用 css中float的作用 Apr 28, 2024 pm 01:51 PM

CSS 中 float 屬性允許元素脫離文件流並沿著其父元素邊緣排列,用於建立並排列、對齊文字圖像、浮動選單邊欄和重疊元素。浮動元素的屬性值包括 left(左浮動)、right(右浮動)、none(清除浮動)和 inherit(繼承)。為防止浮動元素導致父元素溢出,可以使用 clearfix 技術新增一個空元素並清除浮動。

CSS浮動與清除浮動:掌握浮動與清除浮動的技巧 CSS浮動與清除浮動:掌握浮動與清除浮動的技巧 Nov 18, 2023 am 10:56 AM

CSS浮動和清除浮動:掌握浮動和清除浮動的技巧,需要具體程式碼範例在網頁設計和開發中,CSS浮動(float)是常見的佈局技術之一。使用浮動可以將元素向左或向右移動,從而實現元素在頁面中的位置調整和排列。然而,浮動元素也會造成頁面一些問題,例如父元素高度塌陷等。因此,掌握浮動的使用和清除浮動的技巧非常重要。本文將重點放在CSS浮動和清除浮動的技巧,並提供具

See all articles