码迷,mamicode.com
首页 > Web开发 > 详细

CSS高度塌陷

时间:2014-09-22 11:32:42      阅读:567      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   ar   2014   div   sp   

问题描述:当父元素只包含浮动的元素的时候,且父元素没有设置高度,如果父元素设置了边框border,那么看起来子元素不在父元素之内。

比如这样:

html:

<div id="parent">
    <div class="left"></div>
    <div class="right"></div>
</div>

CSS:

    div {
        border: 2px solid #000;
    }
    .left {
        width: 100px;
        height: 100px;
        float: left;
    }
    .right {
        width: 200px;
        height: 200px;
        float: left;
    }

结果是这样的:

bubuko.com,布布扣

这就是高度塌陷的问题,各个浏览器,包括IE6都是这样的。

 

解决方法:

父元素设置overflow:hidden 即:

    #parent {
        overflow: hidden;
    }

或者:

添加一个子元素清除浮动。

    .clear {
        width: 0;
        height: 0;
        clear: both;
        visibility: hidden;
    }

 

上面的方法在除了IE6的浏览器都是有效的,效果图:

bubuko.com,布布扣

但IE6中,overflow:hidden,直接没作用,清除浮动后却是这样的:

bubuko.com,布布扣

父元素断了。。。。。

 

可以使用IE6中的一个bug,他的height和min-height作用一样,所以可以给父元素任意设置一个高度。

    #parent {
        * height: 1%;
    }

由于是专为IE6设置的,前面加个*号,只有IE识别。

这样不论是overflow还是clear效果都可以了。

 

但是还有一个问题,虽然高度都扩展了,但是使用overflow,底边是紧贴的,使用清除浮动时候的是有一定间距的。

在《精通CSS》一书中是这样的解决的。

    .clear:after {
        content: ‘.‘;
        height: 0;
        clear: both;
        visibility: hidden;
        display: block;
    }

以这样的方式来清除浮动。

这样效果就统一了。

bubuko.com,布布扣

 

在其他的博客中,还看到,其实针对IE6还可以使用zoom:1。

 

总结一下,方法还是挺多,使用overflow简单,也不用额外引入元素,但有时候会引起滚动条的问题。

清除浮动通用,但会引入其他外部元素。

CSS高度塌陷

标签:style   blog   http   color   使用   ar   2014   div   sp   

原文地址:http://www.cnblogs.com/zjzhome/p/3985418.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!