【前端小点】clearfix解决高度塌陷及外边距重叠

  • Post author:
  • Post category:其他




高度塌陷及外边距重叠

解决:

.clearfix:after,
.clearfix:before{
 content: '';
 display: table;
 clear: both;
}



一、高度塌陷问题

高度塌陷是浮动布局中比较常见的一个问题。在浮动布局中,父元素的高度默认是被子元素撑开的,但,当子元素浮动后,子元素会完全脱离文档流,无法撑起父元素的高度,导致父元素的高度丢失。父元素高度丢失后,其下的元素会上移,导致页面布局混乱。

举个栗子:

<body>
    <div class="div1">
        <div class="div2">
        </div>
    </div>
</body>

<style>
.div1{
	border: 10px solid red;
}
.div2{
    width: 100px;
    height: 100px;
    background-color: green;
    float: left;
}
</style>

运行结果如下:

在这里插入图片描述

很明显:红色父元素已经出现高度塌陷的问题。

为了解决这个问题,我们需要了解下BFC



使用BFC解决高度塌陷



BFC

BFC(Block Formatting Context)块级格式化上下文

BFC是一个css中的一个隐含属性,可以为一个元素开启BFC,开启BFC后,该元素会变成一个独立的布局区域



元素开启BFC后的特点:

  • 开启BFC的元素不会被浮动元素所覆盖

  • 开启BFC的元素子元素和父元素外边距不会重叠

  • 开启BFC的元素可以包含浮动的子元素



如何开启BFC

1、设置元素的浮动(不推荐)

2、设置元素为行内块元素(display:inline-block;不推荐)

3、将元素的overflow设置为一个非visible的值 – 常用方式: overflow: hidden/auto;

了解完BFC,我们就可以很好的解决高度塌陷问题了,只需要给父元素开启BFC即可:

.div1{
    border: 10px solid red;
    overflow: hidden;
}

运行看效果,可以看到,父元素已经被很好的撑开了

在这里插入图片描述



使用clear属性解决

我们也可以使用clear属性解决问题,

首先,在父元素中添加一个元素div3

<div class="div1">
    <div class="div2"></div>
    <div class="div3"></div>
</div>

为div3设置样式

.div3{
	clear: both;
}

看效果:

在这里插入图片描述



使用伪类解决高度塌陷

第三个可以很好的解决高度塌陷问题,但是我们凭空添加了一个div元素。所以我们想到了使用伪类解决这个问题,也是我们的终极方案:

.div1::after{
    content: "";
    display: block;
    clear: both;
}



二、外边距重叠问题

举个栗子

<div class="outer">
    <div class="inner">

    </div>
</div>

<style>
    *{
        padding: 0;
        margin: 0;
    }
    html{
        border: 1px solid #444444;
    }
    .outer{
        width: 200px;
        height: 200px;
        background-color: red;
    }
    .inner{
        margin-top: 30px;
        width: 100px;
        height: 100px;
        background-color: #008000;
    }
</style>

我们想让绿色盒子margin-top:20px;但是发现,红色盒子具备了这个属性,这就是外边距重叠问题

在这里插入图片描述

为了解决这个问题,我们可以给红色盒子,添加

padding:20px

解决,但不优雅,基于刚才的伪类元素,我们想到了使用before伪类添加一个元素将其与绿色盒子隔开即:

.outer::before{
    content: '';
    display: table;
    clear: both;
}

完美解決

在这里插入图片描述

综上所述,我们编写一个元素类clearfix,可以同时决绝高度塌陷和外间距重叠的问题,

.clearfix:after,
.clearfix:before{
 content: '';
 display: table;
 clear: both;
}



版权声明:本文为qiuqiu1628480502原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。