高度塌陷问题

高度塌陷:

当子元素有浮动并且父元素没有设置高度的情况下父元素会出现高度塌陷
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            background: #2f7688;
            /* 不给父元素设置高度,默认高度被子元素撑开 */
        }
        .box div{
            width: 80px;
            height: 80px;
            border: 3px solid #cc4141;
        }
    </style>
</head>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
    </div>
</body>
</html>

在这里插入图片描述
给子元素设置浮动:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            background: #2f7688;
            /* 不给父元素设置高度,默认高度被子元素撑开 */
        }
        .box div{
            width: 80px;
            height: 80px;
            border: 3px solid #cc4141;
            /* float: left;给子元素添加浮动 */
        }
    </style>
</head>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
    </div>
</body>
</html>

在这里插入图片描述

解决办法:

  • 方法一:给父元素添加声明overflow:hidden;(触发一个BFC)

    优点:浏览器支持好,简单;
    缺点:当子元素有溢出时,设置 overflow: hidden; 容器以外的部分会被裁剪掉。

  • 方法二: 在浮动元素下方添加空div,并给该元素添加声明:

    优点:所有浏览器都支持,并且容器溢出不会被裁剪;
    缺点:在页面中添加无意义的div,容易造成代码冗余。

div{
	clear:both; 
	height:0; 
	overflow:hidden;
	}
  • 方法三: 万能清除浮动法
  
  父元素:after{
    content: "";
    height: 0;
    clear: both;
    overflow: hidden;
    display: block;
    visibility: hidden;
}
   优点:不会造成代码冗余,剩余代码性能优化,推荐使用。
  1. 方法一代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            background: #2f7688;
            /* 不给父元素设置高度,默认高度被子元素撑开 */
            overflow: hidden;/* 方法一 */
        }
        .box div{
            width: 80px;
            height: 80px;
            border: 3px solid #cc4141;
            float: left;/*子元素添加浮动 */
        }
    </style>
</head>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
    </div>
</body>
</html>

父元素高度撑开在这里插入图片描述

  1. 方法二代码:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        .box {
            background: #2f7688;
            /* 不给父元素设置高度,默认高度被子元素撑开 */
        }

        .box p {
            display: block;
            width: 80px;
            height: 80px;
            border: 3px solid #cc4141;
            float: left;/* 给子元素添加浮动*/
        } 

        .box .last{
            clear: both;
            height: 0px;
            overflow: hidden;
        }

    </style>
</head>

<body>
    <div class="box clearfix"><!-- 给父元素添加类名clearfix -->
        <p>1</p>
        <p>2</p>
        <p>3</p>
        <p>4</p>
        <p>5</p>
        <div class="last"></div><!-- 添加空元素 -->
        
    </div>
</body>

</html>
  1. 方法三代码:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            background: #2f7688;
            /* 不给父元素设置高度,默认高度被子元素撑开 */
        }

        .box div {
            width: 80px;
            height: 80px;
            border: 3px solid #cc4141;
            float: left;
            <!-- 给子元素添加浮动 -->
        }
        .clearfix:after {
            /* 清除浮动 */
            content: "";
            width: 0;
            height: 0;
            visibility: hidden;
            display: block;
            clear: both;
            overflow: hidden;
        }
    </style>
</head>

<body>
    <div class="box clearfix"><!-- 给父元素添加类名clearfix -->
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
    </div>
</body>

</html>

▶父元素固定宽高:不推荐,不能把高度固定死,不适合做自适应的效果
▶父元素浮动:不推荐,因为父容器浮动会影响到后面的元素。
▶display:inline-block(BFC规范),不推荐,父容器会影响到后面的元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值