前端必会的 HTML+CSS 常用技巧 之 解决父元素高度消失或最小高度不能自适应问题

一、问题阐述

  问题 1:高度消失

    先解释一下什么是高度消失(高度消失也叫高度塌陷)如下图所示:
高度塌陷
  上图的代码如下:

    <style>
        .box{
            width: 600px; background: pink; margin: 0 auto;
        }
        .box1{
            width: 150px; height: 80px; background: #ccc; margin: 5px;
            float: left;
        }
    </style>
    
    <div class="box">
        <div class="box1"></div>
    </div>

  正常情况下,默认是子元素会把父元素的高度撑开,然而并没有;从图中我们可以看出,父元素相当于是“消失”了。
  当我们打开控制台查看时,发现并没有,该元素以及设置的css属性依然在:
高度塌陷2
  这种情况就是高度塌陷,是指在子元素设置了浮动,父元素没有设置高度的情况下,父元素会出现高度塌陷
  

  问题 2:父元素设置了最小高度但不能实现高度自适应

    父元素高度不能自适应问题
        最小高度(min-height:当内容增多的时候,内容会把容器撑开;当内容减少的时候,容器会保持最小高度)
    如下图所示:
高度塌陷3
  我们的初衷是实现高度自适应(随着子元素的增加,元素的高度随之增加,且不改变原始布局),但是很明显,父元素是设置了最小高度min-height的,却并没有实现我们的需求。

  
  

二、解决方案

    其实,我们都已经发现了出现这些问题的根本原因就是浮动:float,那么我们又要如何解决这些问题呢?下面就让我们一起来看一下解决方案以及各自的优缺点。
  

  第一个方法

    给父元素添加溢出属性:overflow: hidden;
    代码如下:

    <style>
        .box{
            width: 600px; background: pink; margin: 0 auto;
            min-height: 100px;
            overflow: hidden;
        }
        .box1{
            width: 150px; height: 80px; background: #ccc; margin: 5px;
            float: left;
        }
    </style>

    <div class="box">
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
    </div>

优点:简单;
缺点:由于设置了 overflow: hidden; (溢出隐藏),那么也会隐藏掉其他的作用在当前元素上的其他元素或内容。
  

  第二个方法

    在浮动元素的下面添加一个空的块状元素,并且给空元素设置样式{clear:both;} (清除浮动!)
    注意是 块状元素!块状元素!块状元素!
    代码如下:

    <style>
        .box{
            width: 600px; background: pink; margin: 0 auto;
            min-height: 100px;
        }
        .box1{
            width: 150px; height: 80px; background: #ccc; margin: 5px;
            float: left;
        }
        .clear_fix{
            clear: both;
        }
    </style>

    <div class="box">
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="clear_fix"></div>
    </div>

优点:简单,并且不会有影响布局。
缺点:当一个项目有很多需要添加浮动的元素时,为了解决以上问题就会出现很多没有意义的空元素,形成代码的冗余,平白消耗性能。
  

  第三个方法

    俗称万能清除法,利用伪对象选择器:after
    具体代码如下:

<!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{
            width: 600px; background: pink; margin: 0 auto;
            min-height: 100px;
        }
        .box1{
            width: 150px; height: 80px; background: #ccc; margin: 5px;
            float: left;
        }
        .clear_fix::after{
            content: ".";
            display: block;
            clear: both;
            height: 0px;
            overflow: hidden;
            visibility: hidden;
        }
    </style>
</head>
<body>
    <div class="box clear_fix">	// 添加 万能清除法
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
    </div>
</body>
</html>

注意:万能清除法是添加在出现问题的元素上的

优点:完美解决问题,并且不会有任何弊端。
缺点:缺点我只能说代码量多了些,不够简单。

  完美效果如下:
解决方案
好的,以上就是本人对此的粗浅认识,如有不足之处,望诸位大神们不吝赐教,谢谢!
  
  
如果对您有所帮助,不妨 点个赞 谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用以下代码实现: ```css .parent { height: auto; /* 让元素高度适应 */ } .child { height: 100%; /* 让子元素高度跟随元素适应 */ } ``` 在这里,`.parent` 是元素的类名,`.child` 是子元素的类名。你需要确保在 HTML 中给元素和子元素都加上了这些类名。 注意,如果元素高度是固定的,那么子元素高度跟随元素高度变化。 例如: ```css .parent { height: 200px; /* 元素高度是固定的 */ } .child { height: 100%; /* 子元素高度跟随元素高度变化 */ } ``` 希望这能帮到你。 ### 回答2: 要实现元素高度适应,子元素高度跟随元素适应,可以使用CSS的flex布局。 首先,为元素添加以下样式: ```css .parent { display: flex; flex-direction: column; } ``` 上述代码将元素设置为flex布局,并且设置主轴方向为竖直方向。 然后,为子元素添加以下样式: ```css .child { flex: 1; } ``` 上述代码中的`flex: 1`表示子元素占据元素剩余的空间,从而实现子元素高度跟随元素适应。 最后,将元素和子元素高度设置为100%: ```css html, body, .parent, .child { height: 100%; } ``` 上述代码中的`html, body`是为了确保整个页面都能够自适应高度,`.parent`和`.child`是为了使元素和子元素高度都为100%。 以上就是实现元素高度适应,子元素高度跟随元素适应的代码。 ### 回答3: 实现元素高度适应,子元素高度跟随元素适应,可以通过以下CSS代码实现: 元素样式: ```css .parent { display: flex; flex-direction: column; } ``` 子元素样式: ```css .child { flex-grow: 1; } ``` 以上代码中,元素使用了flex布局,并设置了flex-direction为column,表示子元素在垂直方向上从上到下排列。 子元素的样式中,使用了flex-grow: 1,表示子元素占据剩余空间,使其高度跟随元素的自适应。 通过以上代码,元素高度适应元素高度,同时子元素高度跟随元素的自适应变化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuangvi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值