起源:
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
.clearfix { display: inline-table; }
/* Hides from IE-mac \*/
* html .clearfix { height: 1%; }
.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下的IE5 ),或正在靠近
标准的路上,这个方法就不再那么与时俱进了。
抛掉对 IE/Mac 的支持之后,新的清除浮动方法:
/* new clearfix */
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
* html .clearfix { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */
说明:
IE6 和 IE7 都不支持 :after 这个伪类,因此需要后面两条来触发IE6/7的haslayout,以清除浮动。幸运的是IE8支持 :after 伪类。因此只需要针对IE6/7的hack了。
糖伴西红柿说:
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;}
以我目前的浅薄认知来讲,以上写法应该也可以直接达到同样效果。关于这个地方,在文章的评论里也有些讨论,我希望再听听大家的高见。
我平时都是用 overflow:hidden 来清除浮动的,因为够简单粗暴。但是 overflow 有时候也不太适用:
父级元素使用 overflow:hidden 时,如果其子元素定位到部分或全部在父元素之外,父元素就会对超出其外的子元素部分进行裁剪。
对 css3 来说,也会 overflow:hidden 也会对一些属性产生影响。
例如 box-shadow, 当父元素使用 overflow:hidden 属性时,box-shadow 会被裁剪。
其他可能被影响的元素如 text-shadow 和 transform。可以参考 Andy Ford 的 demo
对于那些不愿意再给标签添加额外的 clearfix 类来清除浮动的人来说,直接将需要清除浮动的元素添加进清除浮动代码块这个组也是一个办法。
.group:after,
#content:after,
#sidebar:after,
#some .other .thing:after
{
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
zoom:1;
}
这种情况下,html 和 css 文件就像一个跷跷板的两头。html 代码倒是整洁了,css 代码却出现了一定的繁冗。而且一旦专题页面过长,或者在项目中使用,用这个清除组的方式反而会不胜其扰。
归结下来,还是得看个人、项目的权衡选择.虽然我一直用简单粗暴的overflow:hidden,但是现在更倾向于使用 clearfix,感觉这种一体化的东西更靠谱,能避免偶尔对 zoom 的遗忘。
成熟的东西稳定性好,但是会比较复杂、厚重;简单的灵活性好,但是过于零散、随意,没有组织性,还没那么稳定.权衡决定到底要使用那种方法,有时候反而比问题本身还让人头疼.
我个人的想法是没有好与坏的区别,只有合适不合适的区别。但是我们一直都受困于所受的教育,什么问题都有标准答案,非对即错,非好即坏。经常可见对
一些工具的讨论,都是奔着争出个谁好谁坏而去的,例如 jQuery mootools
YUI.相比起到底是好谁坏,我们还是最好赶紧转变思想,摒弃”一刀切”的思想吧。
分享到:
相关推荐
为了解决这个问题,开发者们发展出多种清除浮动的方法,其中一种常用且优雅的解决方案就是clearfix。本文将深入探讨clearfix方法,以及其发展历程和不同实现方式。 首先,传统的清除浮动方法是通过添加额外的`clear...
在CSS布局中,`clearfix`是一个常见的解决方案,用于清除浮动元素带来的影响,防止父元素因浮动元素而高度塌陷。`clearfix`方法的出现,主要是为了处理传统浮动布局(如左侧导航和右侧主要内容)中,父容器无法包含...
但这样增加了页面的结构的源代码,造成代码的拥肿,其实也可以有更好的办法, 在浮动元素的外包clearfix样式 复制代码代码如下: ”clearfix”> ”fl”></div> ”fr”></div> </div> .clearfix:after{ visibility:...
总结来说,CSS中的清除浮动有多种方法,包括传统的`clearfix`方法、使用`:clearfix`伪类和采用Flexbox布局。选择哪种方法取决于项目的需求,如兼容性、代码简洁性和布局复杂性等因素。理解这些方法的原理和应用场景...
关于 clearfix 和 clear 的样式在这里我就不写了。 下面就谈谈对于这两个 class 的用法,首先我们先看个例子: XML/HTML Code复制内容到剪贴板 <!DOCTYPE HTML> <html lang="en-US"> <head>...
为了解决这个问题,开发者通常会使用“清除浮动”(clearing the float)的方法,`.clear 万能清除浮动`(clearfix:after)就是一种常用的解决方案。 `.clear 万能清除浮动` 实际上是一种 CSS 技巧,用于修复由于...
除此之外,`.clearfix`类还包含了一种只针对IE6和IE7的清除浮动的方法`*zoom:1;`。这个技巧利用了IE的`hasLayout`特性,通过设置`zoom`属性,触发了IE浏览器的布局重绘,从而清除浮动。 在实际应用中,`clearfix`类...
`clearfix`类通常会应用到包含浮动元素的父容器上,通过CSS的伪类选择器来实现清除浮动的效果。在现代浏览器中,我们可以使用`:before`和`:after`伪元素来实现,如下所示: ```css .clearfix::before, .clearfix...
CSS清除浮动是为了应对浮动元素对周围元素布局的影响,特别是防止父元素因子元素浮动而高度塌陷的问题。在Web开发中,有多种方法可以清除浮动,以下将详细介绍四种常见的清除浮动的方法。 一、使用带有`clear`属性...
为了解决这个问题,我们可以使用CSS的clearfix技术,特别是通过`:after`伪元素来清除浮动。 `:after`伪元素是CSS中的一种特殊选择器,它用于在元素的内容之后插入内容。在清除浮动的上下文中,`:after`伪元素通常被...
`clearfix` 类是最常用的清除浮动方法之一,它并不需要添加额外的HTML元素,而是利用CSS伪类来解决。这种方法适用于那些不支持CSS3的旧版浏览器。以下是`clearfix`类的源代码: ```css .clearfix:after { content:...
在Web前端开发中,清除浮动(Clear ...总结起来,`.clearfix:after` 方法是一种优雅地清除浮动的解决方案,它利用CSS伪元素和特定属性组合,有效地解决了浮动元素导致的父元素高度塌陷问题,而且代码简洁,易于维护。
### XHTML + CSS清除浮动的三种方法 在XHTML与CSS页面重构过程中,处理浮动元素是一项关键技术。当元素被设定为浮动后,它们会脱离正常的文档流,并向左或向右移动,直到碰到容器边缘或其他浮动元素。这为布局带来...