当前位置:网站首页>如何解决高度塌陷
如何解决高度塌陷
2022-08-11 01:51:00 【恁180】
什么是高度塌陷?
父元素的高度一般是被子元素或者叫内容撑开的,若设置子元素浮动,则子元素就会脱离文档流,也就撑不开父元素的高度了,从而导致父元素的高度丢失,页面布局混乱
如何解决高度塌陷?
方法一:
设置父元素的高度(这种方法一般不推荐使用)
例如不设置高度的情况下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.outer {
border: 10px red solid;
}
.inner {
width: 100px;
height: 100px;
background-color: blue;
float: left;
}
.box3 {
height: 100px;
background-color: yellow;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner"></div>
</div>
<div class="box3"></div>
</body>
</html>
效果图:
这样蓝色盒子就脱离文档流了,页面布局就混乱了。
设置父元素高度:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.outer {
border: 10px red solid;
height: 100px;
}
.inner {
width: 100px;
height: 100px;
background-color: blue;
float: left;
}
.box3 {
height: 100px;
background-color: yellow;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner"></div>
</div>
<div class="box3"></div>
</body>
</html>
效果图:
设置父元素高度就解决了高度塌陷
方法二:
页面元素中的隐含属性:Block Formatting Context 即块格式化上下文,简称BFC
当开启元素的BFC以后,元素会变成一个独立的布局区域,不会在布局上影响到外面的元素
BFC 理解为一个封闭的大箱子,箱子内部的元素不会影响到外部。
如何开启元素的BFC
1.设置元素浮动(不推荐)
- 使用这种方式开启,虽然可以撑开父元素,但是会导致父元素的宽度丢失
而且使用这种方式也会导致下边的元素上移,不能解决问题
2.设置元素为inline-block(不推荐)
- 可以解决高度丢失的问题,但是会导致宽度丢失,而且会有一个三像素的空白,不推荐使用这种方式
3.将元素的overflow设置为一个非visible的值
副作用比较小,推荐使用
4.设置元素绝对定位
元素也会脱离文档流,虽然可以撑开父元素,但是会导致父元素的宽度丢失
而且使用这种方式也会导致下边的元素上移,不能解决问题
推荐方式:将overflow设置为hidden是副作用最小的开启BFC的方式。
开启BFC后,元素将会具有如下的特性:
1.父元素的垂直外边距不会和子元素重叠(解决父子外边距重叠的问题)
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.outer {
width: 400px;
height: 300px;
background-color: #ccc;
}
.inner {
width: 100px;
height: 100px;
background-color: blue;
margin-top: 100px;
}
*/
}
</style>
</head>
<body>
<div class="outer">
<div class="inner"></div>
</div>
</body>
</html>
效果图:
可以看到外边距重叠的问题并没有解决
若我们设置灰色的盒子浮动,就可以解决外边距重叠的问题
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.outer {
float: left;
width: 400px;
height: 300px;
background-color: #ccc;
}
.inner {
width: 100px;
height: 100px;
background-color: blue;
margin-top: 100px;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner"></div>
</div>
</body>
</html>
效果图:
2.开启BFC的元素不会被浮动元素所覆盖
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.outer {
width: 400px;
height: 300px;
background-color: #ccc;
}
.inner {
width: 100px;
height: 100px;
background-color: blue;
}
.box3 {
width: 100%;
height: 100px;
background-color: yellow;
float: left;
}
</style>
</head>
<body>
<div class="box3"></div>
<div class="outer">
<div class="inner"></div>
</div>
<div class="box3"></div>
</body>
</html>
如图所示:
蓝色的盒子就被覆盖了
我们可以设置元素为inline-block(不推荐)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
.outer {
display: inline-block;
width: 400px;
height: 300px;
background-color: #ccc;
}
.inner {
width: 100px;
height: 100px;
background-color: blue;
}
.box3 {
width: 100%;
height: 100px;
background-color: yellow;
float: left;
}
</style>
</head>
<body>
<div class="box3"></div>
<div class="outer">
<div class="inner"></div>
</div>
<div class="box3"></div>
</body>
</html>
如图所示:
3.开启BFC的元素可以包含浮动的子元素(可解决高度塌陷)
方法三:
可以直接在高度塌陷的父元素的最后,添加一个空白的块元素,由于这个块元素并没有浮动,所以他是可以撑开父元素的高度的,然后在对其进行清除浮动,这样可以通过这个空白的块元素来撑开父元素的高度,基本没有副作用。
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title></title>
<style type="text/css">
.box1 {
border: 10px solid red;
}
.box2 {
width: 100px;
height: 100px;
background-color: blue;
float: left;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2">box2</div>
</div>
</body>
</html>
效果图:
我们设置一个空白的块元素
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title></title>
<style type="text/css">
.box1 {
border: 10px solid red;
}
.box2 {
width: 100px;
height: 100px;
background-color: blue;
float: left;
}
.box3{
clear:both ;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2">box2</div>
<div class="box3">box3</div>
</div>
</body>
</html>
效果如图:
方法四:
可以通过after伪类向元素的最后添加一个空白的块元素,然后对其清除浮动, 这样做和添加一个div的原理一样,可以达到一个相同的效果,而且不会在页面中添加多余的div,这是我们最推荐使用的方式,几乎没有副作用
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title></title>
<style type="text/css">
.box1 {
border: 10px solid red;
}
.box2 {
width: 100px;
height: 100px;
background-color: blue;
float: left;
}
.c::after {
content: "";
display: block;
clear: both;
}
</style>
</head>
<body>
<div class="box1 c">
<div class="box2"></div>
</div>
</body>
</html>
这样也能解决高度塌陷的问题,这是我们最推荐使用的方式,几乎没有副作用
边栏推荐
- 【websocket】
- 惨遭面试官吊打高并发系统设计,回来学习 2400 小时后成功复仇
- 微服务概念
- This Thursday evening at 19:00, Lesson 5 of the sixth phase of knowledge empowerment丨OpenHarmony WiFi subsystem
- 导入数据包上传宝贝提示“类目不能为空”是什么原因,怎么解决?
- 软件测试面试题:单元测试的策略有哪些?
- Alibaba 最新神作!耗时 182 天肝出来 1015 页分布式全栈手册太香了
- Shengxin experiment record (part2)--tf.reduce_sum() usage introduction
- 研发项目流程规范
- 【HFSS学习记录2】腔体滤波器的设计与仿真
猜你喜欢
络达开发---自定义BLE服务(二):功能实现
深度解析:什么是太爱速M抢单模式?
Deep Learning【第二章】
一次简单的 JVM 调优,拿去写到简历里
88Q2110 access C45 phy address through C22
划分字母区间[贪心->空间换时间->数组hash优化]
OpenHarmony啃论文俱乐部-啃论文心得
[Server data recovery] Data recovery case of lvm information and VXFS file system corruption caused by raid5 crash
The statistical data analysis, interview manual"
Update chromedriver driver programming skills │ selenium
随机推荐
生信实验记录(part3)--scipy.spatial.distance_matrix
ora-00001违反唯一约束
软件测试面试题:谈谈你对 cmm 和 is9000 的认识?
gRPC基础概念:闭包
Ora - 00001 in violation of the only constraint
Engineering Design of Single-sided PCB Routing Impedance
进程间通信(IPC)的分类以及通信方式的发展
MySQL indexes and transactions
【websocket】
uni-app实现app和H5调用手机拨号功能
Successfully resolved TypeError: can't multiply sequence by non-int of type 'float'
软件测试面试题:什么是α测试,β测试?
安装dlib库
[Server data recovery] Data recovery case of lvm information and VXFS file system corruption caused by raid5 crash
软件测试面试题:什么是Negative测试?
基于 HPSO 与多核 LSSVM 的网络入侵检测
惨遭面试官吊打高并发系统设计,回来学习 2400 小时后成功复仇
C# WebBrower1控件可编辑模式保存时会提示“该文档已被修改,是否保存修改结果”
How to create an index when sql uses where and groupby?
[oops-framework] Template project [oops-game-kit] Introduction