何为高度塌陷,如何解决?

在文档流中,父元素的高度默认是被子元素撑开的(没有设置宽高的时候),也就是子元素多高,父元素就多高。 当父元素的子元素设置为浮动类型时,那么因为其子元素脱离正常文档流,所以父元素无法检测到子元素的高度而产生折叠,这就是所谓的高度塌陷。

<head>
<style>
.right {
height: 100px;
width: 100px;
background-color: yellow;
float: right;
}

.block {
/* height: 200px;
width: 200px; */
background-color: green;
}
</style>
</head>

<body>
<div class="block">
<div class="right">右浮动</div>
</div>
</body>


如图可知,由于发生了高度塌陷,父元素完全折叠,我们看不到父元素。

高度塌陷引发的问题:

由于父元素的高度塌陷了,则父元素下的所有元素都会向上移动,这样将会导致页面布局混乱。

如何解决高度塌陷问题?

1,给父元素设置宽高,因为宽高已规定,所以不存在高度塌陷问题。但是一旦高度写死,父元素的高度将不能自动适应子元素的高度,所以这种方案是不推荐使用的。

2,给父元素开启BFC(有较小的副作用,后面的文章会专门介绍BFC)

3,使用clear属性清除浮动影响 (有瑕疵)

可以直接在高度塌陷的父元素的最后,添加一个空白的div,由于这个div并没有浮动,所以他是可以撑开父元素的高度的,然后在对其进行清除浮动,这样可以通过这个空白的div来撑开父元素的高度,基本没有副作用。

<style>
.right {
height: 100px;
width: 100px;
background-color: yellow;
float: right;
}

.block {
/* height: 200px;
width: 200px; */
background-color: green;
}

.empty {
clear: both;
}
</style>
<div class="block">
<div class="right">右浮动</div>
<div class="empty"></div>
</div>


使用这种方式虽然可以解决问题,但是会在页面中添加多余的结构。

4,使用伪元素::after (推荐)

<style>
.right {
height: 100px;
width: 100px;
background-color: yellow;
float: right;
}

.block {
/* height: 200px;
width: 200px; */
background-color: green;
}

.block::after{
content: "";
display: block;
clear: both;
}
</style>
<div class="block">
<div class="right">右浮动</div>
</div>

 

5,使用伪类.clearfix(一个特殊的伪类,可以当作了解)

<style>
.right {
height: 100px;
width: 100px;
background-color: yellow;
float: right;
}

.block {
/* height: 200px;
width: 200px; */
background-color: green;
}

.clear::before,
.clear::after {
content: "";
display: block;
clear: both;
}
</style>
<div class="block clear">
<div class="right">右浮动</div>
</div>

————————————————
版权声明:本文为CSDN博主「鲤鱼C c」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_48643318/article/details/126424291

posted @ 2022-10-10 13:17  青Fire  阅读(72)  评论(0编辑  收藏  举报