CSS盒子塌陷以及解决办法

一、什么是盒子塌陷

情况一:当子元素设置外边距,导致父元素连带向下,这就导致盒子模型塌陷

情况二:当父元素未设置高度,此时父元素的高度取决于子元素的高度,当子元素设置浮动后,会脱离文档流,造成子元素的内容在父元素外出现。

脱离文档流:在HTML中块级元素一个一排自上往下堆放,行内元素自左往右堆放,而脱离文档流就是不遵循这套标准,元素于元素之间开始堆叠。

二、解决办法

情况一示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>盒子塌陷1</title>

    <style>
        *{
            margin: 0; // 设置元素的外边距为0。
            padding: 0; //设置元素的内边距为0。
            box-sizing: border-box;  //并排放置两个带边框的框
        }
        .one{
            width: 400px;
            height: 400px;
            background-color: green;
        }
        .two{
            width: 200px;
            height: 200px;
            background-color: yellow;
            margin-top: 100px;  /*设置元素的上外边距。*/
            margin-left: 100px;  /*设置元素的左外边距。*/
        }
    </style>
</head>
<body>
    <div class="one">
        <div class="two"></div>
    </div>

</body>
</html>

原本是想呈现这样的效果:

 

可是实际上发生了盒子塌陷,变成了这样 :

 可以看到父元素被拉扯了下来,解决方案如下:

 .one{
     width: 400px;
     height: 400px;
     background-color: green;
     /*1.给父元素加上边框*/
     border: 1px solid;/*border定义边框 solid--实线*/
     /*2.给父元素设置上内边距*/
     padding-top: 1px; /*注意:此时父盒子高度为400px+1px*/
     /*3.给父元素加上overflow:hidden*/
     overflow: hidden;  /*overflow 属性规定当内容溢出元素框时发生的事情。hidden 内容会被修剪,并且其余内容是不可见的。*/
     /*4.给子盒子或父盒子加一个浮动*/
     /*4.1父盒子加浮动*/
     float: left;
     /*5.给父元素或子元素加上绝对定位*/
     /*5.1给父元素添加绝对定位*/
     position: absolute;  /*position 属性规定元素的定位类型。*/
}
     .two{
         width: 200px;
         height: 200px;
         background-color: yellow;
         margin-top: 100px;  /*设置元素的上外边距。*/
         margin-left: 100px;  /*设置元素的左外边距。*/
         /*4.2给子盒子加浮动*/
         float: left;
         /*5.2给子元素加上绝对定位*/
         position: absolute;
}

上述的方式任选一种即可解决该种情况的盒子塌陷问题。

情况二示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>盒子塌陷2</title>

    <style>
        .one{
            background-color: green;
        }
        .two{
            width: 200px;
            height: 200px;
            background-color: yellow;
            float: left;
        }
        .three{
            height: 200px;
            background-color: #50afeb;
        }
    </style>
</head>
<body>
    <div class="one">
        <div class="two"></div>
    </div>
    <div class="three"></div>

</body>
</html>

由于父元素未设置高度,所有父元素的高度由子元素决定,所以应该呈现的效果为:

但是由于子元素添加了浮动,所以效果变为下图:

可以看到子元素以脱离文档流,使父元素没有了高度支撑而消失,造成了父元素的高度塌陷。从而导致页面布局混乱。 

解决方法:

①给父元素设置高度,设置的高度需大于等于子元素

②在父元素中使用after清除浮动(最常用)。代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>盒子塌陷2</title>

    <style>
        .one{
            background-color: green;
        }
        .clearfix{
            zoom: 1;
        }
        .one:after{
            content: '';/*伪元素,内容为空*/
            display: table;/*规定元素应该生成的框的类型,此处只要不为默认就行*/
            clear: both;/*清除浮动*/
        }
        .two{
            width: 200px;
            height: 200px;
            background-color: yellow;
            float: left;
        }
        .three{
            height: 200px;
            background-color: #50afeb;
        }
    </style>
</head>
<body>
    <div class="one clearfix">
        <div class="two"></div>
    </div>
    <div class="three"></div>

</body>
</html>

③在父元素的最下方添加<br style="clear: both">清除浮动块

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>盒子塌陷2</title>

    <style>
        .one{
            background-color: green;
        }
        .two{
            width: 200px;
            height: 200px;
            background-color: yellow;
            float: left;
        }
        .three{
            height: 200px;
            background-color: #50afeb;
        }
    </style>
</head>
<body>
    <div class="one">
        <div class="two"></div>
        <br style="clear: both">
    </div>
    <div class="three"></div>

</body>
</html>
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
绝对定位盒子不会导致高度塌陷。高度塌陷是指当一个父元素包含了浮动元素时,父元素的高度会塌陷为0,不包含子元素的高度。这种情况下,可以通过以下方法解决高度塌陷的问题: 1. 设置父元素的高度:给父元素设置一个固定的高度,可以通过设置具体的像素值或百分比来确定高度。这样父元素的高度不会受到子元素浮动的影响。 2. 开启父元素的BFC属性:BFC(Block Formatting Context)是一个独立的渲染区域,可以避免浮动元素对父元素的影响。可以通过给父元素设置以下样式来开启BFC属性: ``` overflow: auto; ``` 或 ``` display: flow-root; ``` 3. 添加一个空白的块元素:在父元素的最后一个子元素后面添加一个空白的块元素,并给它设置以下样式: ``` clear: both; ``` 这样可以清除浮动元素对父元素高度的影响。 绝对定位盒子不会对父元素的高度造成影响,因为绝对定位的元素脱离了文档流,不会对其他元素的布局产生影响。所以绝对定位的盒子不会导致高度塌陷的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [CSS盒子塌陷及解决方法](https://blog.csdn.net/m0_46612221/article/details/121295507)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [解决高度塌陷的方法](https://blog.csdn.net/m0_72975897/article/details/126268027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值