在网页布局中我们经常会遇到高度塌陷的这样的问题,那么什么是高度塌陷呢?
父元素高度自适应,子元素float之后,造成父元素高度为0,称为高度塌陷。他的产生条件就是子元素浮动
这里作者总结了8中解决方法和每种方法的优缺点
给父元素添加固定高度,适合做高度固定的布局
<!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>
.parent{
/* 添加固定高度 */
height: 400px;
border: 5px solid red;
}
.son {
width: 200px;
height: 200px;
background: yellow;
float: left;
}
</style>
</head>
<body>
<div class="parent">
<div class="son"></div>
</div>
</body>
</html>
给父元素添加overflow:hidden
<!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>
.parent{
border: 5px solid red;
/* 使用overflow:hidden可以让父元素的盒子自动撑开
注意为了解决IE兼容问题我们需要添加zoom:1属性
*/
overflow: hidden;
}
.son {
width: 200px;
height: 200px;
background: yellow;
float: left;
}
</style>
</head>
<body>
<div class="parent">
<div class="son"></div>
</div>
</body>
</html>
给父元素结尾添加div标签clear:both
<!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>
.parent{
border: 5px solid red;
}
.son{
width: 400px;
height: 400px;
background-color: yellow;
float:left;
}
span{
clear: both;
/* 下面两行代码是解决IE兼容问题,因为在IE兼容部分块元素会自带16px的高度 */
height: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div class="parent">
<div class="son"></div>
<div></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>
.parent{
border: 5px solid red;
}
.son {
width: 400px;height: 400px;
background: yellow;
float: left;
}
.parent::after{
content: "";
display: block;
clear: both;
/* height:0;和overflow:hidden;是为了解决IE兼容的问题 */
height: 0;
overflow: hidden;
/* visibility:hidden;是为了去除content中的文字 */
visibility: hidden;
}
</style>
</head>
<body>
<div class="parent">
<div class="son"></div>
</div>
</body>
</html>
父级定义overflow:auto
<!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>
.parent{
border: 5px solid red;
/* 此方法与overflow:auto的原理是一样不过auto是内容超出后出现滚动条 */
overflow: auto;
}
.son {
width: 400px;
height: 400px;
background: yellow;
float: left;
}
</style>
</head>
<body>
<div class="parent">
<div class="son">使用父级元素dingyioverflow:auto方法</div>
</div>
</body>
</html>
父级容器一起浮动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width= , initial-scale=1.0">
<title>Document</title>
<style>
.parent{
border: 5px solid red;
float: left;
}
.son {
width: 400px;
height: 400px;
background: yellow;
float: left;
}
</style>
</head>
<body>
<div class="parent">
<div class="son"></div>
</div>
</body>
</html>
父级容器定义display:table;
<!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>
.parent{
border: 5px solid red;
/* 改变元素类型 inline-block/flex/inlin-flex/table/table-cell/table-caption都可以 */
display: table;
}
.son{
width: 400px;
height: 400px;
background: yellow;
float: left;
}
</style>
</head>
<body>
<div class="parent">
<div class="son">父级元素类型定义为table</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>
.parent{
border: 5px solid red;
}
.son {
width: 400px;
height: 400px;
float: left;
background: yellow;
}
/* 给br标签清除浮动 */
br{
clear: both;
height: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div class="parent">
<div class="son">给父元素结尾添加br标前然后clear:both;</div>
<br>
</div>
</body>
</html>
? 逆战班_许富荧
原文:https://www.cnblogs.com/xfy196/p/12354087.html