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

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

    解释:

    1) display:block 使生成的元素以块级元素显示,占满剩余空间;

    2) height:0 避免生成内容破坏原有布局的高度。

    3) visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;
    4)通过 content:"."生成内容作为最后一个元素,至于content里面是点还是其他都是可以的,例如oocss里面就有经典的 content:"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",有些版本可能content 里面内容为空,一丝冰凉是不推荐这样做的,firefox直到7.0 content:”" 仍然会产生额外的空隙;
    5)zoom:1 触发IE hasLayout。
    通过分析发现,除了clear:both用来清除浮动的,其他代码无非都是为了隐藏掉content生成的内容,这也就是其他版本的闭合浮动为什么会有font-size:0,line-height:0。

    精益求精方案一:
    相对于空标签闭合浮动的方法代码似乎还是有些冗余,通过查询发现Unicode字符里有一个“零宽度空格”,也就是U+200B ,这个字符本身是不可见的,所以我们完全可以省略掉 visibility:hidden了

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

    精益求精方案二:

    由Nicolas Gallagher 大湿提出来的,原文:A new micro clearfix hack,该方法也不存在firefox中空隙的问题。

    /* For modern browsers */
    .cf:before,.cf:after {content:"";display:table;}
    .cf:after { clear:both; }/* For IE 6/7 (trigger hasLayout) */
    .cf { zoom:1; }

    需要注意的是:
    上面的方法用到了 :before伪元素,很多人对这个有些迷惑,到底我什么时候需要用before呢?为什么方案一没有呢?其实它是用来处理margin边距重叠的,由于内部元素 float 创建了BFC,导致内部元素的margin-top和 上一个盒子的margin-bottom 发生叠加。如果这不是你所希望的,那么就可以加上before,如果只是单纯的闭合浮动,after就够了!并不是如同大漠《Clear Float》一文所说的:但只使用clearfix:after时在跨浏览器兼容问题会存在一个垂直边距叠加的bug,这不是bug,是BFC应该有的特性。

    触发BFC(Block formatting contexts 块级格式化上下文)
    float 除了none以外的值
    overflow 除了visible 以外的值(hidden,auto,scroll )
    display (table-cell,table-caption,inline-block)
    position(absolute,fixed)
    fieldset元素

    触发hasLayout的条件:
    position: absolute
    float: left|right
    display: inline-block
    除 “auto” 外的任意值
    height: 除 “auto” 外的任意值 (例如很多人清除浮动会用到 height: 1% )
    zoom: 除 “normal” 外的任意值 (MSDN) http://msdn.microsoft.com/worksh ... properties/zoom.asp
    writing-mode: tb-rl (MSDN) http://msdn.microsoft.com/worksh ... ies/writingmode.asp
    在 IE7 中,overflow 也变成了一个 layout 触发器:
    overflow: hidden|scroll|auto ( 这个属性在IE之前版本中没有触发 layout 的功能。 )
    overflow-x|-y: hidden|scroll|auto (CSS3 盒模型中的属性,尚未得到浏览器的广泛支持。他们在之前IE版本中同样没有触发 layout 的功能)

    综上所述:
    在支持BFC的浏览器(IE8+,firefox,chrome,safari)通过创建新的BFC闭合浮动;
    在不支持 BFC的浏览器 (IE6-7),通过触发 hasLayout 闭合浮动。

    更详细请看:http://www.iyunlu.com/view/css-xhtml/55.html

  • 相关阅读:
    day77
    75
    ElasticSearch集群的配置
    虚拟机VMware Workstation搭建Linux集群——VMware Tools的安装与配置
    ElasticSearch通过Rest Http API完成基本操作
    Maven笔记
    Oracle通过PL/SQL Developer导出数据为CSV格式,VARCHAR2类型的字段如果存入的是数值(例如3307830000004059)太长,最后一位会被置为0
    Redis的安装与配置
    2017 3月份以来入职感受
    Java设计模式(05-- 代理模式模式 )
  • 原文地址:https://www.cnblogs.com/everyone/p/2821924.html
Copyright © 2011-2022 走看看