zoukankan      html  css  js  c++  java
  • 关于clearfix清除浮动

    起源:

    .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 的遗忘。

  • 相关阅读:
    UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
    initWithFrame方法的使用
    加载xib文件,如果想在初始化的时候就添加点东西就重载-(id)initWithCoder:(NSCoder *)aDecoder
    Mac os 下brew的安装与使用—— Homebrew
    Mac os系统gdb调试器的安装与使用
    项目里如何访问AppDelegate
    leetcode 141. Linked List Cycle
    leetcode 206. Reverse Linked List
    从阿里巴巴面试题到java类加载机制
    SpringBoot处理日期转换问题
  • 原文地址:https://www.cnblogs.com/iloveyoucc/p/2688895.html
Copyright © 2011-2022 走看看