高度塌陷

高度塌陷


一、原因

高度塌陷:块元素的高度默认情况下是被子元素撑开的,
  如果子元素浮动,将会完全脱离文档流,脱离文档流子元素无法撑起父元素高度,
  将会导致父元素高度丢失,父元素一旦丢失页面的其他元素位置也会移动,导致布局的混乱

二、解决方法

1、BFC

BFC(Block Format Context)

  • 块级格式化环境
  • BFC是元素的一个隐藏的属性,一旦元素开了BFC它将会开启一个独立的布局的区域
    这个布局区域将会具有一些特殊的性质:
  1. 开启了BFC的元素子元素的垂直外边距不会传递给父元素
  2. 开启了BFC的元素不会被浮动的元素所覆盖
  3. 开启了BFC的元素可以包含浮动的子元素
  • BFC无法直接开启,需要通过一些属性来开启BFC
  1. 设置元素浮动可以开启BFC
  2. 将元素设置为行内块元素
  3. 可以将元素的overflow设置为一个非visible的值
  • 我们可以通过overflow:hidden来开启元素的bfc,从而解决高度塌陷的went

1.1 示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    
    <style>
        .box1{
/*            height: 200px;*/
            border: 10px red solid;
/*            float: left;*/
/*            display: inline-block;*/
            overflow: hidden;
        }
        
        .box2{
            width: 200px;
            height: 200px;
            background-color: #bfa;
/*            设置元素浮动*/
            float: left;
            
        }
        
        .box3{
            width: 300px;
            height: 300px;
            background-color: orange;
        }
    </style>
</head>
<body>
   
   <div class="box1">
       <div class="box2"></div>
   </div>
   
   <div class="box3"></div>
    
</body>
</html>

2.clear

实际上是浏览器自动在上部增加了一个【外边距=浮动元素的高度】
clear 用来清除浮动元素对当前元素的影响
可选值:

  • none 默认值 不清除
  • left 清除左侧浮动元素对当前元素的影响
  • right 清除右侧浮动元素对当前元素的影响
  • both 清除两侧中对当前元素影响最大的那一侧

2.1 示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box1{
            width: 200px;
            height: 400px;
            background-color: #bfa;
            float: left;
        }
    
        .box2{
            width: 300px;
            height: 300px;
            background-color: #ff0;
            float: right;
        }
    
        .box3{
            width: 300px;
            height: 300px;
            background-color: orange;
            clear: both;
        }
    
    </style>
</head>
<body>
   
   <div class="box1"></div>
   <div class="box2"></div>
   <div class="box3"></div>
    
</body>
</html>

三、总结

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    
    <style>
        .box1{
            border: 10px red solid;
        }
        
        .box2{
            width: 200px;
            height: 200px;
            background-color: #bfa;
            float: left;

            
        }
        
        .box3{
            clear: both;
        }
        
        .clearfix::before,
        .clearfix::after{
            content: '';
            display: table;
            clear: both;
        }
       
    </style>
</head>
<body>
   
   <div class="box1 clearfix">
       <div class="box2"></div>
   </div>
   
    
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值