深入解析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)!
相关文章:

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

使用 HTML 对齐输入框的方法有:使用 text-align 属性指定 left、right 或 center 来对齐输入框文本。使用 float 属性将输入框浮动到页面左侧或右侧,以影响其相对对齐方式。

清除浮动的5种方式分别是:1、使用clear属性;2、使用overflow属性;3、使用伪元素clearfix;4、使用flex布局;5、使用grid布局。详细介绍:1、使用clear属性,这是最常用的清除浮动的方法,可以在浮动元素后面添加一个元素,并为其添加“clear: both;”样式;2、使用overflow属性,可以为父元素设置”overflow: auto;“等等。

清除浮动有什么方法,需要具体代码示例在网页布局中,浮动是一种常用的布局方法,可以让元素脱离文档流,并相对其他元素进行定位。然而,使用浮动布局时常常会遇到一个问题,就是父元素无法正确地包裹浮动元素,导致页面产生布局错乱的情况。所以,我们需要采取措施来清除浮动,使得父元素能够正确地包裹浮动元素。清除浮动的方法有多种,下面将介绍常用的几种方法,并给出具体的代码示例

layout布局是指在网页设计中,为了使网页元素按照一定的规则和结构进行排列和展示而采取的一种排版方式。通过合理的布局,可以使网页更加美观、整齐,并且达到良好的用户体验。在前端开发中,有许多种布局方式可以选择,比如传统的table布局、浮动布局、定位布局等。但是,随着HTML5和CSS3的推广,现代的响应式布局技术,如Flexbox布局和Grid布局,成为了

解析为什么使用overflow属性无法清除浮动,需要具体代码示例引言:在网页布局中,经常会遇到浮动元素的问题。为了解决浮动元素所带来的影响,我们通常会使用一种清除浮动的方法。然而,有时候我们会发现,使用overflow属性无法很好地清除浮动,本文将深入探讨这个问题并提供具体的代码示例。一、为什么需要清除浮动?浮动元素是指通过设置float属性使元素脱离文档流

CSS 中 float 属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。浮动元素的属性值包括 left(左浮动)、right(右浮动)、none(清除浮动)和 inherit(继承)。为防止浮动元素导致父元素溢出,可以使用 clearfix 技术添加一个空元素并清除浮动。

css清除浮动的方式有使用clear属性、overflow属性、clearfix类、父元素的clearfix类、伪元素清除浮动、父元素的overflow属性以及clear属性和BFC相结合等。详细介绍:1、使用clear属性,一种简单而常用的清除浮动的方法,通过在浮动元素的后面添加一个空的块级元素,并为其设置clear属性,可以清除前面的浮动影响,使其下方的元素正常布局等等。

overflow清除浮动无效的原因可能是浮动元素未设置高度、浮动元素被清除、清除元素在浮动元素之前、清楚元素未设置高度或清楚元素在浮动元素之后等。详细介绍:1、浮动元素未设置高度,当浮动元素没有设置高度时,它可能无法被清除,浮动元素的高度由其内容决定,因此如果内容没有高度,那么浮动元素也没有高度;2、浮动元素被清除,当浮动元素被清除时,overflow属性可能无法清除等等。
