HTML+CSS基础(解决高度塌陷问题)
2021/12/4 23:18:04
本文主要是介绍HTML+CSS基础(解决高度塌陷问题),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
元素脱离文档流导致的高度塌陷问题
1.问题描述:
在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。但是当子元素设置浮动之后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>网页标题</title> <style type="text/css"> .box1{ border: 10px red solid; } .box2{ background-color: yellow; width: 100px; height: 100px; float: left; } </style> </head> <body> <div class="box1"> <div class="box2"></div> </div> </body> </html>
元素脱离文档流的结果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>网页标题</title> <style type="text/css"> .box1{ border: 10px red solid; } .box2{ background-color: yellow; width: 100px; height: 100px; /* float: left; */ } .box3{ height: 100px; background-color: green; } </style> </head> <body> <div class="box1"> <div class="box2"></div> </div> <div class="box3"></div> </body> </html>
想要这样的效果.png
设置浮动之后(高度塌陷问题).png
- 由于父元素的高度塌陷,则父元素的所有元素都会向上移动,这样会导致页面布局混乱,所以在开发中一定要避免出现高度塌陷问题
2.问题解决一:
根据W3C标准,在页面中元素都有一个隐藏的属性叫Block Formatting Context,简称BFC,该属性可以设置打开或者关闭,默认是关闭的。
当开启BFC后,元素将会具有以下特性:
- 元素的垂直外边距不会和子元素重叠
- 开启BFC的元素不会被浮动元素所覆盖
- 开启BFC的元素可以包含浮动元素
如何开启BFC:
-
1)设置元素的浮动(虽然可以撑开父元素,但是会导致父元素的宽度丢失,而且会导致下边的元素上移,不能解决问题)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网页标题</title>
<style type="text/css">
.box1{
border: 10px red solid;
/非父元素设置浮动/
float: left;
}
.box2{ background-color: yellow; width: 100px; height: 100px; float: left; } .box3{ height: 100px; background-color: green; } </style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
<div class="box3"></div>
</body>
</html>
![给父元素设置浮动的结果.png](http://upload-images.jianshu.io/upload_images/3063110-e3f921af945a6f10.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + 2)设置元素的绝对定位(和1效果差不多,不推荐) + 3)设置元素的inline-block(父元素的宽度又没了,不推荐使用)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网页标题</title>
<style type="text/css">
.box1{
border: 10px red solid;
display: inline-block;
}
.box2{ background-color: yellow; width: 100px; height: 100px; float: left; } .box3{ height: 100px; background-color: green; } </style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
<div class="box3"></div>
</body>
</html>
![第三种方式的效果图.png](http://upload-images.jianshu.io/upload_images/3063110-39b189264d80ed92.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + 4)将元素的overflow设置为一个非visible的值(推荐这种方式开启BFC,副作用小,IE6及以下不支持,此时可以使用hasLayout,给父元素设置```zoom:1```,此处不赘述)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网页标题</title>
<style type="text/css">
.box1{
border: 10px red solid;
overflow: hidden;
}
.box2{ background-color: yellow; width: 100px; height: 100px; float: left; } .box3{ height: 100px; background-color: green; } </style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
<div class="box3"></div>
</body>
</html>
![overflow为hidden.png](http://upload-images.jianshu.io/upload_images/3063110-ed5337266a7dad7a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ****** > ***3.问题解决二:*** clear属性可以用于清除元素周围的浮动对元素的影响。也就是元素不会因为上方出现了浮动元素而改变位置。 + 可选值: - left :忽略左侧浮动 (清除左侧浮动对当前元素的影响) - right :忽略右侧浮动 (清除右侧浮动对当前元素的影响) - both :忽略全部浮动 (清除两侧对他影响最大的浮动对) - none :不忽略浮动,默认值
/通过空白撑开父元素,清除浮动,基本没有副作用,可以兼容各种浏览器/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网页标题</title>
<style type="text/css">
.box1{
border: 10px red solid;
clear: left;
}
.box2{ background-color: yellow; width: 100px; height: 100px; float: left; } .clear{ clear: left; } .box3{ height: 100px; background-color: green; } </style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
<div class="clear"></div>
</div>
<div class="box3"></div>
</body>
</html>
![clear.png](http://upload-images.jianshu.io/upload_images/3063110-adcdc009e889bc38.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ****** > ***4.问题解决三:***通过after伪类,和添加div效果一样,而且不会再页面中添加div,最推荐的方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网页标题</title>
<style type="text/css">
.box1{
border: 10px red solid;
clear: left;
}
/* 通过after伪类来选择box1的后面 */ .clearfix:after{ /* 必须设置一个空的congtent,否则不起作用 */ content: ""; /* 转换成块元素 */ display: block; clear: both; } /*为了兼容IE6*/ .clearfix{zoom:1} .box2{ background-color: yellow; width: 100px; height: 100px; float: left; } .box3{ height: 100px; background-color: green; } </style>
</head>
<body>
<div class="box1 clearfix">
<div class="box2"></div>
</div>
<div class="box3"></div>
</body>
</html>
作者:槑如是
链接:https://www.jianshu.com/p/f09f40591d97
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这篇关于HTML+CSS基础(解决高度塌陷问题)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Vite多环境配置学习:新手入门教程
- 2024-11-23实现OSS直传,前端怎么实现?-icode9专业技术文章分享
- 2024-11-22在 HTML 中怎么实现当鼠标光标悬停在按钮上时显示提示文案?-icode9专业技术文章分享
- 2024-11-22html 自带属性有哪些?-icode9专业技术文章分享
- 2024-11-21Sass教程:新手入门及初级技巧
- 2024-11-21Sass学习:初学者必备的简单教程
- 2024-11-21Elmentplus入门:新手必看指南
- 2024-11-21Sass入门:初学者的简单教程
- 2024-11-21前端页面设计教程:新手入门指南
- 2024-11-21Elmentplus教程:初学者必备指南