您现在的位置是:网站首页> 编程资料编程资料
css解决浮动导致父元素高度坍塌的几种方法CSS清楚浮动clear:both的实例代码详解CSS布局中浮动问题的四种解决方案关于CSS浮动与取消浮动的问题
2021-09-03
923人已围观
简介 这篇文章主要介绍了css解决浮动导致父元素高度坍塌的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一、文档流与浮动
1、’什么是文档流?
在html中,文档流也可以叫做标准流或普通流。元素的显示方式是自上而下,从左到右,其中,块级元素默认占据一行,行内或行内块级元素只占据内容部分或自身的所占据的部分,并不会像块级元素一样霸道的占据一行,其实这也跟自然现象中的瀑布自上而下流动是一个道理^_^。
2、不安分的浮动
在上面我们已经初步了解了文档流,但是元素在网页中的显示仅仅依靠文档流是不够的,就比如说天猫商城的商标导航部分,无序列表ul的每个列表项li是块级元素(display:list-item),按照文档流来说,块级元素是占据一行的,所以每个li会自上而下一行行显示,但实际上每个li却只占据了自身的部分,请看下图:
那么为什么这些li元素不按照文档流的方式显示,原因就是他们已经脱离了文档流。想让一个元素脱离文档流,方法有两种:第一种是浮动(float);第二种就是定位(position)。
如果说,文档流是别人家做什么事都听父母的话,是个很乖很懂事的孩子,嘿嘿,那么浮动就是自家做什么事都不听话,不安分的孩子。就像我们小时候,父母经常对我们说你看看别人家孩子多么多么听话,你再看看你,怎么怎么样…
二、浮动是把双刃剑
既然浮动已经让元素脱离了文档流,那么我们就可以让元素的显示更为灵活,比如简易导航栏的制作:

body{ margin:0; background-color:#333; } ul{ list-style:none; width:500px; margin:100px auto 0; padding:0; } .clearfix:after{ content:""; display:block; clear:both; } ul li{ float:left; width:100px; height:30px; background-color:#fff; } ul li a{ display:block; height:100%; line-height:30px; color:#000; text-decoration:none; text-align:center; }又比如早之前的圣杯布局

body{ margin:0; } .wrap{ padding:0 300px; } .clearfix:after{ content:""; display:block; clear:both; } .middle,.left,.right{ float:left; position:relative; height:100px; } .middle{ width:100%; background-color:#333; } .left{ left:-300px; width:300px; margin-left:-100%; background-color:#ccc; } .right{ right:-300px; width:300px; margin-left:-300px; background-color:#f00; }同时,浮动也会带来其他的影响,比如,浮动的元素会覆盖后面处于文档流中的元素,

body{ margin:0; } .box-1{ float:left; width:200px; height:200px; background-color:#333; } .box-2{ width:200px; height:300px; background-color:#ccc; }为了解决上面这种问题,我们只要给BOX-2清除浮动就行了
.box-2{ clear:both; width:200px; height:300px; background-color:#ccc; }此外,浮动元素会导致父元素高度坍塌,如果一个没有高度的块级元素的子元素浮动的话,则这个块级父元素的高度为0,请看如下代码:
body{ margin:0; } .box-1{ width:300px; background-color:#333; } .box-2{ float:left; width:200px; height:300px; background-color:#ccc; }
大家应该知道,对于一个元素来说,不给他固定高度的时候他的高度是由内容撑开的,也就是说,如果这个元素里面没有任何内容,他的高度就是0,当这个元素有内容的时候,他就有了高度(也就是内容的高度),请看下图:
.box-1{ width:100px; background-color:#f00; }
我是内容
而在上面中父元素BOX-1虽然有了子元素BOX-2,但是他的高度却为0,这到底是怎么回事呢?就是因为BOX-2浮起来了,子元素BOX-2和父元素BOX-1不在同一高度,从而BOX-1无法包裹住BOX-2,请看下图:
上图就是浮动带来的父元素高度坍塌问题
三、如何解决浮动带来的父元素高度坍塌问题
1、子级方法
在子元素的最后添加一个高度为0的子元素,并且让他清除浮动,请看一下代码:
body{ margin:0; } .box-1{ width:300px; background-color:#f00; } .box-2{ float:left; width:200px; height:150px; background-color:#ff0; } .box-3{ clear:both; }效果图如下,红色盒子是父元素,黄色盒子是子元素BOX-2
2、父级方法
给父元素设置display:inline-block;
代码如下:
body{ margin:0; } .box-1{ display:inline-block; width:300px; background-color:#f00; } .box-2{ float:left; width:200px; height:150px; background-color:#ff0; }给父元素设置overflow:hidden;
代码如下:
body{ margin:0; } .box-1{ overflow:hidden; width:300px; background-color:#f00; } .box-2{ float:left; width:200px; height:150px; background-color:#ff0; }上面这两种方法其实是根据BFC(块级格式化上下文),因为BFC会让父元素包含浮动的子元素,从而解决父元素高度坍塌问题,所以只要能触发BFC就行。
给父元素固定的高度
这个没什么好说的,就不赘述了,因为在实际开发中高度一般都由内容撑开。
利用伪元素:after,并且清除浮动
请看如下代码:
body{ margin:0; } .clearfix{ width:300px; background-color:#f00; } .clearfix:after{ content:""; display:block; clear:both; } .box{ float:left; width:200px; height:150px; background-color:#ff0; }四、最后
到此这篇关于css解决浮动导致父元素高度坍塌的几种方法的文章就介绍到这了,更多相关css父元素高度坍塌内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- css下div下同行多元素右对齐div中加入span右对齐后出现换行显示两种解决思路
- css实现元素垂直居中显示的7种方式CSS实现子元素div水平垂直居中的示例css常用元素水平垂直居中方案css实现元素垂直居中的常用方法(总结)利用css设置元素垂直居中的解决方法汇总css实现元素水平垂直居中常见的两种方式实例详解DIV+CSS垂直居中一个浮动元素css3设置box-pack和box-align让div里面的元素垂直居中html元素水平居中、垂直居中、水平垂直居中于其父级元素的方法网页布局 CSS简单实现垂直居中-CSS教程-网页制作-网页教学网
- 纯css实现流向性和动态线条效果的代码css 收货地址平行四边形的线条样式示例代码纯css3绘制花瓣和线条旋转加载特效线条状的CSS3多种不同颜色进度条css实现0.5px线条解决移动端兼容问题(推荐)
- 详解CSS 子元素相对于父元素固定定位解决方案纯CSS让子元素突破父元素的宽度限制css子元素相对父元素进行定位的实现CSS子元素跟父元素的高度一致的实现方法CSS子元素选择父元素的实现解决CSS中子元素z-index与父元素兄弟节点的层级问题css中子元素设置margin-top为什么影响了父元素CSS如何只改变父元素背景透明度不改变子元素透明度css匹配选择属于其父元素的第N个子元素的方法父元素与子元素之间的margin-top问题(css hack)
- CSS实现子元素div水平垂直居中的示例使用CSS实现盒子水平垂直居中的方法(8种)CSS 水平居中并限定最大的宽度实现CSS中的translate(-50%,-50%)实现水平垂直居中效果css3 flex实现div内容水平垂直居中的几种方法CSS3 不定高宽垂直水平居中的几种方式CSS3实现水平居中、垂直居中、水平垂直居中的实例代码手把手教你CSS水平、垂直居中的10种方式(小结)web前端之css水平居中代码解析
- 纯CSS让子元素突破父元素的宽度限制css子元素相对父元素进行定位的实现CSS子元素跟父元素的高度一致的实现方法CSS子元素选择父元素的实现解决CSS中子元素z-index与父元素兄弟节点的层级问题css中子元素设置margin-top为什么影响了父元素CSS如何只改变父元素背景透明度不改变子元素透明度css匹配选择属于其父元素的第N个子元素的方法父元素与子元素之间的margin-top问题(css hack)
- css子元素相对父元素进行定位的实现CSS子元素跟父元素的高度一致的实现方法CSS子元素选择父元素的实现解决CSS中子元素z-index与父元素兄弟节点的层级问题css中子元素设置margin-top为什么影响了父元素CSS如何只改变父元素背景透明度不改变子元素透明度css匹配选择属于其父元素的第N个子元素的方法父元素与子元素之间的margin-top问题(css hack)
- CSS子元素跟父元素的高度一致的实现方法CSS子元素选择父元素的实现解决CSS中子元素z-index与父元素兄弟节点的层级问题css中子元素设置margin-top为什么影响了父元素CSS如何只改变父元素背景透明度不改变子元素透明度css匹配选择属于其父元素的第N个子元素的方法父元素与子元素之间的margin-top问题(css hack)css子元素相对父元素进行定位的实现
- CSS 选择所有子元素添加样式的方法HTML外部样式表如何引入CSS样式详解CSS3中常用的样式【基本文本和字体样式】编程式处理Css样式的示例代码CSS常用样式之绘制双箭头的示例代码详解中文字体在CSS样式中font-family对应的英文名称CSS实现鼠标悬停改变其他标签样式的示例代码解决ElementUI自定义CSS样式不生效的问题
- css 收货地址平行四边形的线条样式示例代码纯css实现流向性和动态线条效果的代码纯css3绘制花瓣和线条旋转加载特效线条状的CSS3多种不同颜色进度条css实现0.5px线条解决移动端兼容问题(推荐)
