CSS盒子模型——高度塌陷问题

一、相邻(兄弟)盒子塌陷

1、描述

若两相邻兄弟盒子上外边距相同,给其中一个盒子设置浮动类型,另一个盒子的左外边距设置为与它的兄弟盒子宽度相同时(也可以不设置,第一个盒子的大小大于等于第二个盒子是也可以直接观察到效果),两个盒子都能够全部显示在页面内容区域,但是这两个盒子无法对齐。

例:

<style>

    #d1{

        width: 300px;

        height: 300px;

        margin-top: 10px;

        background-color: dodgerblue;

        float: left;

    }

    #d2{

        width: 300px;

        height: 300px;

        margin-top: 10px;

        background-color: darkviolet;

        margin-left: 300px;

    }

</style>

<body>

    <div id="d1"></div>

    <div id="d2"></div>

</body>

浏览器效果如下:

若不设置第二个盒子左外边距效果:

 

若设置第二个盒子左外边距效果:

 

2、解决办法

①添加一个父盒子,并设置父盒子的上边框。(此方法有背景颜色局限性)

在上述例子下进行:

<style>

    .c1{

        border-top: 1px solid white;

        clear: both;

    }

    #d1{

        width: 300px;

        height: 300px;

        margin-top: 10px;

        background-color: dodgerblue;

        float: left;

    }

    #d2{

        width: 300px;

        height: 300px;

        margin-top: 10px;

        background-color: darkviolet;

        margin-left: 300px;

    }

</style>

<body>

    <div class="c1">

        <div id="d1"></div>

        <div id="d2"></div>

    </div>

</body>

浏览器效果如下:

 

②添加一个父盒子,并且不给设置为浮动类型的盒子设置上外边距。

以上述例子进行:

<style>

    .c1{

        /* border-top: white solid 1px; */

        /* clear: both; */

    }

    #d1{

        width: 300px;

        height: 300px;

        /* margin-top: 10px; */

        background-color: dodgerblue;

        float: left;

    }

    #d2{

        width: 300px;

        height: 300px;

        margin-top: 10px;

        background-color: darkviolet;

        margin-left: 300px;

    }

</style>

<body>

    <div class="c1">

        <div id="d1"></div>

        <div id="d2"></div>

    </div>

</body>

浏览器效果如下:

 

二、父子嵌套margin塌陷

1、出现的原因:

当父元素没有设置足够大小时,而子元素设置了浮动的属性,子元素就会跳出父元素的边界(即脱离文档流),尤其是当父元素的高度为auto时,而父元素中又没有其他非浮动的可见元素时,父盒子的高度就会直接塌陷为零。

2、解决办法

①将盒子大小固定。给每个盒子设置固定的width和height,直到合适为止。

优点是简单方便,兼容性好,适合只改动少量内容不涉及盒子排布的版面;

缺点是非自适应,浏览器的窗口大小直接影响用户的体验。

②给外部的父盒子也添加浮动,让其脱离标准文本流。

优点是方便;

缺点是对页面的布局不是很友好,不易维护。

③给父盒子添加overflow属性。

overflow: auto ; (有可能出现滚动条,影响美观)

overflow: hidden ;(有可能会带来内容不可见的问题)

④在父盒子中最下方引入清除浮动快。(<br style="clear:both";>)

不推荐使用,因为引入了不必要的冗余元素。

⑤after伪类清除浮动。

外部盒子的after伪元素设置clear属性。

#parent:after{
                clear: both;

                content: "";

                width: 0;

                height: 0;

                display: block;

                visibility: hidden;

}

这种方法是纯CSS解决浮动造成盒子塌陷的方法,没有引入任何冗余元素。但是低版本IE不兼容。 

三、边距塌陷

1、描述

流内块级元素的top与bottom外边距有时会合并(塌陷)为单个外边距(合并后最大的外边距),这样的现象称之为外边距塌陷(margin collapsing)。

2、不同情况

①两个相邻的外边距都是正数时,外边距结果是两者之间较大的值。

②两个相邻的外边距都是负数时,外边距结果是两者绝对值的较大值。

③两个相邻的外边距相同时,外边距结果是两者中任意一个。

④两个相邻的外边距一正一负时,外边距结果时两者相加的和。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值