zoukankan      html  css  js  c++  java
  • 父标签浮动(float)“塌陷”问题

    浮动“塌陷”

    float参见:

      http://www.cnblogs.com/bigtreei/p/8110090.html

      http://www.w3school.com.cn/css/css_positioning_floating.asp

    ·使用浮动(float)的一个比较疑惑的事情是他们怎么影响包含他们的父元素的。如果父元素只包含浮动元素,且父元素未设置高度和宽度的时候。

    那么它的高度就会塌缩为零。如果父元素不包含任何的可见背景,这个问题会很难被注意到,但是这是一个很重要的问题。在这里我们可以称为“塌陷”。如下图

    8

    代码:

    <div>
    
    <div><span>块1</span> float:left</div>
    
    <div><span>块2</span> float:left</div>
    
    <div><span>块3</span> float:left</div>
    
    </div>

    解决“塌陷”三个方法
    1.在使用float元素的父元素结束前加一个高为0宽为0且有clear:both样式的div 如下图
    9

    代码:

    <div>
    
    <div><span>块1</span> float:left </div>
    
    <div><span>块2</span> float:left</div>
    
    <div><span>块3</span> float:left</div>
    
    <div></div>
    
    </div>

    2.在使用float元素的父元素添加overflow:hidden;如下图
    10

    代码:

    <div>
    
    <div><span>块1</span> float:left </div>
    
    <div><span>块2</span> float:left</div>
    
    <div><span>块3</span> float:left</div>
    
    </div>

    3 .使用after伪对象清除浮动 如下图

    11

    代码:

    <div>
    
    <div><span>块1</span> float:left </div>
    
    <div><span>块2</span> float:left</div>
    
    <div><span>块3</span> float:left</div>
    
    </div>

     IE6双边距问题

    ·IE6双边距问题:一个居左浮动(float:left)的元素放置进一个容器盒(box),并在浮动元素上使用了左边界(margin-left) 在ie6内便产生双倍边距。如下图

    12

    IE7、IE8和Firefox

    13 IE6

    代码:
    <div>
    <div><span>块1</span> float:left marin_left:10px; </div>

    <div><span>块2</span> float:left marin_left:10px; </div>

    <div><span>块3</span> float:left</div>

    </div>
    这个Bug仅当浮动边界和浮动元素的方向相同时出现在浮动元素和容器盒的内边缘之间,在这之后的任意有着相似边界的浮动元素不会呈现双倍边界。只有特定的浮动行的第一个浮动元素会遭遇这个Bug。像居左的情况一样,双倍边界同样神秘地显示在居右的相同方式。

    解决IE6双边距问题: display:inline; 使浮动忽略 如下图

    14

    代码:
    <div>

    <div><span>块1</span>float:left; marin_left:10px; display:inline; </div>

    <div><span>块2</span> float:left marin_left:10px; </div>

    <div><span>块3</span> float:left</div>

    </div>

    IE6文本产生3象素的bug

    ·浮动IE6文本产生3象素的bug时指挨着浮动元素的文本会神奇的被踢出去3像素,好像浮动元素的周围有一个奇怪的力场一样。如下图

    15 firefox、IE7、IE8

    16 IE6

    代码:
    <div>

    <div>float:left;200px; height:100px; </div>

    <div> margin-left:200px; 150px; height:100px; </div>

    </div>
    解决浮动IE文本产生3象素问题以下有两个方法
    1.左边对象浮动,右边采用外补丁的左边距来定位  如下图
    17 firefox、IE7、IE8、IE6

    代码:
    <div>

    <div>margin-right:-3px; float:left;200px; height:100px; </div>

    <div>150px; height:100px; </div>

    </div>
    2.左边对象浮动,右边对象也浮动 如下图

    18 firefox、IE7、IE8、IE6

    代码:
    <div>

    <div> float:left; 200px;height:100px; </div>

    <div> float:left;150px; height:100px; </div>

    </div>

    IE6,IE7 中,底边距 bug

    ·IE6,IE7 中,底边距 bug是当浮动父元素有浮动子元素时,这些子元素的底边距会被父元素忽略掉。如下图

    19 firefox

    20 IE6、IE7

    代码:
    <div>

    <div> margin-bottom:10px; float:left;</div>

    <div> margin-bottom:10px; float:left;</div>

    <div> margin-bottom:10px; float:left;</div>

    <div> margin-bottom:10px; float:left;</div>

    </div>
    解决IE6,IE7 中,底边距 bug:用父元素的底内补白(padding)代替。如下图

    21 firefox、IE7、IE8、IE6

    代码:
    <div>

    <div>float:left;</div>

    <div>float:left;</div>

    <div> float:left;</div>

    <div>float:left;</div>

    </div>

    这个方法的缺点是不能换行,如果想要换行的话,建议将浮动父元素的浮动子元素设置padding值。

  • 相关阅读:
    BT协议分析(1)—1.0协议
    Qt线程(2) QThread中使用WorkObject
    新浪微博的开放平台官方文档太粗略,记:仿大平台来实现
    58同城 骗子太多
    代码实现业务经验(程序员的核心能力)
    gitbash 本地文件提交为一个新的项目 到 gitlab
    Spring 核心容器 IOC
    spring AOP 理解
    java不返回某些字段,包括 null
    CentOS7安装 Redis5 单实例
  • 原文地址:https://www.cnblogs.com/bigtreei/p/8111018.html
Copyright © 2011-2022 走看看