高度塌陷问题

在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。但是当为子元素设置浮动以后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。由于父元素的高度塌陷了,则父元素下的所有元素都会向上移动,这样将会导致页面布局混乱。所以在开发中一定要避免出现高度塌陷的问题,我们可以将父元素的高度写死,以避免塌陷的问题出现,但是一旦高度写死,父元素的高度将不能自动适应子元素的高度,所以这种方案是不推荐使用的。

解决方式

根据W3C的标准,在页面中元素都一个隐含的属性叫做Block Formatting Context简称BFC,该属性可以设置打开或者关闭,默认是关闭的。当开启元素的BFC以后,元素将会具有如下的特性:
1.父元素的垂直外边距不会和子元素重叠    
2.开启BFC的元素不会被浮动元素所覆盖
3.开启BFC的元素可以包含浮动的子元素

如何开启元素的BFC
1.设置元素浮动- 使用这种方式开启,虽然可以撑开父元素,但是会导致父元素的宽度丢失而且使用这种方式也会导致下边的元素上移,不能解决问题
 2.设置元素绝对定位
3.设置元素为inline-block 可以解决问题,但是会导致宽度丢失,不推荐使用这种方式
4.将元素的overflow设置为一个非visible的值

推荐方式:将overflow设置为hidden是副作用最小的开启BFC的方式。    
overflow: hidden;
                
但是在IE6及以下的浏览器中并不支持BFC,所以使用这种方式不能兼容IE6。 在IE6中虽然没有BFC,但是具有另一个隐含的属性叫做hasLayout,该属性的作用和BFC类似,所在IE6浏览器可以通过开hasLayout来解决该问题开启方式很多,我们直接使用一种副作用最小的:直接将元素的zoom设置为1即可

zoom表示放大的意思,后边跟着一个数值,写几就将元素放大几倍
zoom:1表示不放大元素,但是通过该样式可以开启hasLayout
zoom这个样式,只在IE中支持,其他浏览器都不支持

zoom:1;
overflow: hidden;

清除浮动

clear属性可以用于清除元素周围的浮动对元素的影响。也就是元素不会因为上方出现了浮动元素而改变位置。可选值:

– left:忽略左侧浮动
– right:忽略右侧浮动
– both:忽略全部浮动
– none:不忽略浮动,默认值

导航条

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>导航条</title><style type="text/css">/** 清除默认样式*/*{margin:0;padding:0;}/** 设置ul*/.nav{/*去除项目符号*/list-style: none;/*为ul设置一个背景颜色*/background-color: #6495ED;/*设置一个宽度*//** 在IE6中,如果为元素指定了一个宽度,则会默认开启hasLayout*/width: 1000px;/*设置元素居中*/margin: 50px auto;/*解决高度塌陷*/overflow: hidden;}/*** 设置li*/.nav li{/*设置li向左浮动*/float: left;width: 12.5%;}.nav a{/*将a转换为块元素*/display: block;/*为a指定一个宽度*/width: 100%;/*设置文字居中*/text-align: center;/*设置一个上下内边距*/padding: 5px 0;/*去除下划线*/text-decoration: none;/*设置字体颜色*/color: white;/*设置加粗*/font-weight: bold;}/** 设置a的鼠标移入的效果*/.nav a:hover{background-color: #c00;}</style></head><body><!-- 创建导航条的结构 --><ul class="nav"><li><a href="#">首页</a></li><li><a href="#">新闻</a></li><li><a href="#">联系</a></li><li><a href="#">关于</a></li><li><a href="#">首页</a></li><li><a href="#">新闻</a></li><li><a href="#">联系</a></li><li><a href="#">关于</a></li></ul></body>
</html>

高度塌陷问题解决二

可以直接在高度塌陷的父元素的最后,添加一个空白的div,由于这个div并没有浮动,所以他是可以撑开父元素的高度的,然后在对其进行清除浮动,这样可以通过这个空白的div来撑开父元素的高度,  基本没有副作用。使用这种方式虽然可以解决问题,但是会在页面中添加多余的结构。

高度塌陷问题最终解决

通过after伪类,选中box1的后边。可以通过after伪类向元素的最后添加一个空白的块元素,然后对其清除浮动,这样做和添加一个div的原理一样,可以达到一个相同的效果,而且不会在页面中添加多余的div,这是我们最推荐使用的方式,几乎没有副作用

.clearfix:after{/*添加一个内容*/content: "";/*转换为一个块元素*/display: block;/*清除两侧的浮动*/clear: both;
}

在IE6中不支持after伪类 所以在IE6中还需要使用hasLayout来处理

.clearfix{zoom:1;
}

H5学习笔记(九)高度塌陷问题相关推荐

  1. OpenCV学习笔记(九)——图像轮廓(下)

    <OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...

  2. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  3. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...

  4. 吴恩达《机器学习》学习笔记九——神经网络相关(1)

    吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...

  5. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  6. at24c16如何划分出多个读写区_AVR学习笔记九、基于AT24C16的数据存储实验

    Ema{@AVR 学习笔记九.基于 AT24C16 的数据存储实验 ------- 基于 LT_Mini_M16 9.1 用 I/O 口模拟 I2C 总线实现 AT24C16 的读写 9.1.1 .实 ...

  7. JavaScript学习笔记(九)(验证框架,layer弹出层)

    JavaScript学习笔记(九) 一.jQuery Validate验证框架 1.引入相关插件路径 2. 修改一些规则 3. 自定义验证规则 4.异步验证 整体代码 二.layer弹出层 1.引入相 ...

  8. Polyworks脚本开发学习笔记(九)-公差控制及制作报告

    Polyworks脚本开发学习笔记(九)-公差控制及制作报告 定义公差 系统有默认的公差设置,可以在选项中进行系统的默认设置,但往往不是想要的.比如下图的XYZ三向都是-/+1,我想只控制Y向并且公差 ...

  9. 步步为营 .NET 代码重构学习笔记 九

    步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...

最新文章

  1. Arduino可穿戴开发入门教程LilyPad介绍
  2. centos7安装wget_Centos7系统切换Python2到Python3.x
  3. 云炬随笔20180419
  4. python文件数据总和计算_python 计算文件夹里所有内容的大小总和
  5. 在MAC系统的eclipse里打开android sdk manager
  6. 10.18 nslookup:域名查询工具
  7. 王荣刚:视频画质评定是个“大坑”
  8. VB与C#代码转换在线工具,亲测好用
  9. 赛码网算法: 上台阶 ( python3实现 、c实现)
  10. 移动工具V和选区工具M
  11. c 用户控件 多语言,多语言文本控件重叠解决方案
  12. http请求requestUtils
  13. 水经注叠加cad_如何下载等高线并在CAD中与卫星影像叠加
  14. 扎克伯格、张一鸣的技术“原罪”
  15. android 打开免打扰模式,Android 6.0设置模块免打扰功能浅析
  16. 适合于图像处理方向的SCI期刊杂志列表【转】
  17. 辽宁电信TY12008-Z_智能机顶盒2.0_S905MB_线刷固件包
  18. linux 安装sz,linux中rz、sz命令的安装配置方法
  19. BacNet IP开发过程
  20. html 的scor属性,[HTML] 通过 scrollWidth 属性滚动内容

热门文章

  1. ZT210打印标签方法及常见问题20230110
  2. 金海佳学C++primer 练习9.43
  3. App二维码邀请的解决方案
  4. 重装上阵怎么造简便机器人_重装上阵机器人蓝图怎么做?机器人蓝图制作方法详解[多图]...
  5. SpringMVC Controller中常用到的一些注解
  6. 说出ArrayList,Vector,nbsp;Linke…
  7. OCC实战1:搭建QT+OCC+VS环境
  8. 开发板Linux手指滑动方向,移动应用滑动屏幕方向判断解决方案,JS判断手势方向...
  9. 计算机网络技术高职单招题库上机,全国高职单招计算机类模拟试卷及答案-20210522020322.docx-原创力文档...
  10. Houdini_grass_sim (关于植物结算)