温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

CSS中怎么使用clearfix清除浮动

发布时间:2021-08-03 21:10:01 来源:亿速云 阅读:180 作者:chen 栏目:web开发

这篇文章主要介绍“CSS中怎么使用clearfix清除浮动”,在日常操作中,相信很多人在CSS中怎么使用clearfix清除浮动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS中怎么使用clearfix清除浮动”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

  首先在很多很多年以前我们常用的清除浮动是这样的。
 

CSS Code复制内容到剪贴板

  1. .clear{clear:both;line-height:0;}  

  现在可能还可以在很多老的站点上可以看到这样的代码,相当暴力有效的解决浮动的问题。但是这个用法有一个致命伤,就是每次清除浮动的时候都需要增加一个空标签来使用。

  这种做法如果在页面复杂的布局要经常清楚浮动的时候就会产生很多的空标签,增加了页面无用标签,不利于页面优化。但是我发现大型网站中 居然还在使用这种清楚浮动的方法。有兴趣的同学可以上他们首页搜索一下他们的.blank0这个样式名称。

  因此有很多大神就研究出了 clearfix 清除浮动的方法,直接解决了上面的缺陷,不需要增加空标签,直接在有浮动的外层加上这个样式就可以了,这也是我们今天要讨论的clearfix进化史。

  起源
 

CSS Code复制内容到剪贴板

  1. .clearfix:after {    

  2.     visibilityhidden;    

  3.     displayblock;    

  4.     font-size: 0;    

  5.     content" ";    

  6.     clearboth;    

  7.     height: 0;    

  8. }    

  9. .clearfix { displayinline-table; }    

  10.     

  11. * html .clearfix { height: 1%; }//Hides <span style="width: auto; height: auto; float: none;" id="5_nwp"><a style="text-decoration: none;" mpid="5" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=3fdf214c8ec2a5ea&k=from&k0=from&kdi0=0&luki=1&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=eaa5c28e4c21df3f&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6259%2Ehtml&urlid=0" id="5_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">from</span></a></span> IE-mac    

  12. .clearfix { displayblock; }//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这条标准慢慢靠齐了。所以就有了下面这个写法出现了。
 

CSS Code复制内容到剪贴板

  1. .clearfix:after {    

  2.     visibilityhidden;    

  3.     displayblock;    

  4.     font-size: 0;    

  5.     content" ";    

  6.     clearboth;    

  7.     height: 0;    

  8. }    

  9. * <span style="width: auto; height: auto; float: none;" id="4_nwp"><a style="text-decoration: none;" mpid="4" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=3fdf214c8ec2a5ea&k=html&k0=html&kdi0=0&luki=5&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=eaa5c28e4c21df3f&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6259%2Ehtml&urlid=0" id="4_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">html</span></a></span> .clearfix { zoom: 1; } /* IE6 */  

  10. *:first-child+html .clearfix { zoom: 1; } /* IE7 */  

  IE6 和 IE7 都不支持 :after 这个伪类,因此需要后面两条来触发IE6/7的haslayout,以清除浮动。幸运的是IE8支持 :after 伪类。因此只需要针对IE6/7的hack了。

  在一个有float 属性元素的外层增加一个拥有clearfix属性的div包裹,可以保证外部div的height,即清除"浮动元素脱离了文档流,包围图片和文本的 div 不占据空间"的问题。

  Jeff Starr 在这里针对IE6/7用了两条语句来触发haslayout。我在想作者为什么不直接用 * 来直接对 IE6/7 同时应用 zoom:1 或者直接就写成:
 

CSS Code复制内容到剪贴板

  1. .clearfix:after {    

  2.     visibilityhidden;    

  3.     displayblock;    

  4.     font-size: 0;    

  5.     content" ";    

  6.     clearboth;    

  7.     height: 0;    

  8. }    

  9. .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就会闭合内部元素的浮动。

  后面又有人对此进行了改良:

  终极版一:
 

CSS Code复制内容到剪贴板

  1. .clearfix:after {    

  2.     content:"\200B";    

  3.     display:<span style="width: auto; height: auto; float: none;" id="2_nwp"><a style="text-decoration: none;" mpid="2" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=3fdf214c8ec2a5ea&k=block&k0=block&kdi0=0&luki=6&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=eaa5c28e4c21df3f&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6259%2Ehtml&urlid=0" id="2_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">block</span></a></span>;    

  4.     height:0;    

  5.     clear:both;    

  6. }    

  7. .clearfix {*zoom:1;}/*IE/7/6*/  

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

  终极版二:
 

CSS Code复制内容到剪贴板

  1. .clearfix:before,.clearfix:after{    

  2.     content:"";    

  3.     display:table;    

  4. }    

  5. .clearfix:after{clear:both;}    

  6. .clearfix{    

  7.     *zoom:1;/*IE/7/6*/  

  8. }  

到此,关于“CSS中怎么使用clearfix清除浮动”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI