最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

闲聊CSS之关于clearfix清除浮动[转]_html/css_WEB-ITnose

来源:懂视网 责编:小采 时间:2020-11-27 16:11:44
文档

闲聊CSS之关于clearfix清除浮动[转]_html/css_WEB-ITnose

闲聊CSS之关于clearfix清除浮动[转]_html/css_WEB-ITnose:.clearfix:after { content: ; display: block; clear: both; height: 0;}.clearfix { zoom: 1; display: table;} 转载地址:http://www.imooc.com/wenda/detail/11605 闲聊CSS之关于clearfix--清除浮
推荐度:
导读闲聊CSS之关于clearfix清除浮动[转]_html/css_WEB-ITnose:.clearfix:after { content: ; display: block; clear: both; height: 0;}.clearfix { zoom: 1; display: table;} 转载地址:http://www.imooc.com/wenda/detail/11605 闲聊CSS之关于clearfix--清除浮

.clearfix:after { content: " "; display: block; clear: both; height: 0;}.clearfix { zoom: 1; display: table;}

转载地址:http://www.imooc.com/wenda/detail/11605

闲聊CSS之关于clearfix--清除浮动

一,什么是.clearfix

你只要到Google或者Baidu随便一搜"css清除浮动",就会发现很多网站都讲到"盒子清除内部浮动时可以用到.clearfix"。

.clearfix:after {
content: " ";
display: block;
clear: both;
height: 0;
}
.clearfix {
zoom: 1;
}



上面的代码就是.clearfix的定义和应用,简单的说下.clearfix的原理:

1、在IE6, 7下zoom: 1会触发hasLayout,从而使元素闭合内部的浮动。

2、在标准浏览器下,.clearfix:after这个伪类会在应用到.clearfix的元素后面插入一个clear: both的块级元素,从而达到清除浮动的作用。


二,.clearfix的弊端

在上面的代码中可以看到,抛开IE6, 7不谈,.clearfix在标准浏览器下插入了一个clear: both的元素,这样很可能清除掉不必要的浮动。举例来说明:




Demo







  • Menu Item

  • Menu Item

  • Menu Item

  • Menu Item

  • Menu Item

  • Menu Item





  • 上面的代码构成一个两列布局的页面。注意.menu这个菜单设置了边框,但是由于.menu的li元素是左浮动的,导致.menu没有高度,于是可以用.clearfix来清除.menu内部的浮动。代码如下:


  • Menu Item

  • Menu Item

  • Menu Item

  • Menu Item

  • Menu Item

  • Menu Item

  • 但是应用完.clearfix后,在标准浏览器下页面变得很乱,这是因为.clearfix:after把.left-col的浮动也给清除掉了。

    三,重构.clearfix

    在遭遇到上面的错误之后,分析一下除了.clearfix:after这种方式之外还有没有别的方法清除元素内部的浮动。答案是有的,在白话Block Formatting Contexts这篇文章中提到过构成Block Formatting Context的元素可以清除内部元素的浮动。那么只要使.clearfix形成Block Formatting Context就好了。构成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。

    .clearfix {
    zoom: 1;
    display: table;
    }

    四,总结

    在IE6, 7下面只要是触发了hasLayout的元素就可以清除内部浮动了。而在标准浏览器下面清除元素内部浮动的方法有很多,除了.clearfix:after这种方式,其余的方法无非就是产生新的Block Formatting Context以达到目的。如果可以做到在什么条件下用哪种方法,我认为这样就足够了......

    文档

    闲聊CSS之关于clearfix清除浮动[转]_html/css_WEB-ITnose

    闲聊CSS之关于clearfix清除浮动[转]_html/css_WEB-ITnose:.clearfix:after { content: ; display: block; clear: both; height: 0;}.clearfix { zoom: 1; display: table;} 转载地址:http://www.imooc.com/wenda/detail/11605 闲聊CSS之关于clearfix--清除浮
    推荐度:
    标签: css web 浮动
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top