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*/

}

 

posted @   Gaochunling  阅读(122)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示