CSS之浮动(二)

1. 浮动的非本职工作

我们只要静下心来好好想想浮动的本质,实现的原理,就可以知道为什么浮动本不应该用来对页面进行布局。还记得上一部分所说的浮动的本质吗?即“包裹与破坏”。我们可以用这个(“包裹与破坏”)解释为什么浮动可以让li这类block水平的元素水平排列

1.1 单个无浮动的li元素

HTML:

这里写图片描述

这里写图片描述

这里的li元素为什么会有高度?如果您认真读过前半部分内容关于line boxes模型与高度的关系的内容,应该知道,由于图片没有应用float属性,其本身有一个正常的inline box,这个inline box高度等于图片的height,在这行元素中,图片这个inline box的高度最高,于是传递给了line box,line box是个真正意义上的高度,直接作用于containing box(就是这里的li元素,使li元素有一个高度)。理解了这个您就会明白为什么要是这里的图片添加了float属性,li高度会塌陷了:浮动破坏了inline box

1.2 单个左浮动的li元素

HTML:

这里写图片描述

这里写图片描述

通过添加浮动,让li丧失高度,现在的高度完全是由图片的自身高度撑起来的(包裹性)

浮动的“包裹性”让元素变成类似于inline box的元素,而浮动的“破坏性”正是破坏inline box元素的,这其中岂不有矛盾。其实非也,对于block水平的这类块状元素需要先让其变成类似效果的内联元素,然后再破坏之,实乃先诱拐再奸杀的生动实例啊!

1.3 多个左浮动的li元素

HTML:

这里写图片描述

这里写图片描述

因为浮动的破坏性导致添加浮动后的li元素的高度为0,所以所有的li都是并排显示,但是因为图片的真实存在所以并没有产生覆盖而是紧贴着显示

1.4 左浮动的li元素和无浮动的li元素

HTML:

这里写图片描述

这里写图片描述

因为添加浮动的li的高度为0,所以假设这个li压根是不存在的,从而后面的li直接无视前面的li元素,宽度100%显示,只是图片本身是实体的原因导致图片和图片之间无法重叠显示,所以图片靠在一起

2. 证据

前文是着重分析了浮动的“本职工作”:文字环绕显示;本文着重分析了浮动的“非本职工作”:列表布局;两者都是用的同样的原理解释的,那么有什么证据可以证明“页面布局”不是浮动的“本职工作”呢。答案关键字就是:高度塌陷

HTML:

这里写图片描述

这里写图片描述

上图显示ul高度为0,这是必然的,正常的,应该的。您要是在IE下看到ul有高度,认为这是Firefox等浏览器有问题就错了,您把ul的width属性去掉,看看,会发现IE下ul高度也为0, 这是IE的layout作祟。至于为什么ul高度为0,我前面很多地方都已经讲了,不再说了。但是,从中我们可以看到,浮动本不是用来列表布局的,而是用来使元素环绕显示的,因为元素环绕(例如文字),其自身是含有inline boxes高度的,这是inline水平的元素形成高度的基础,所以虽然浮动元素没有高度,但是其周围环绕的元素是有高度的,只要环绕元素比浮动元素高度高,父标签无高度的问题自然也就没有了,也就形成了文字环绕的效果,但是纯粹一堆浮动元素会有高度吗?没有,自然而然父元素高度就会塌陷。所以浮动元素塌陷的问题根本就不是浏览器的bug,而是我们没有正确地深入地了解浮动,是我们自己使用不当,因为浮动本不应该用在这里的

3. 解决高度塌陷的问题 – 清除浮动

CSS中有个讨论较多的话题就是如何清除浮动,清除浮动其实就一个目的,就是解决高度塌陷的问题。为什么会高度塌陷?什么时候会高度塌陷?塌陷原因是:元素含有浮动属性 – 破坏inline box – 破坏line box高度 – 没有高度 – 塌陷。什么时候会塌陷:当标签里面的元素只有样子没有实际高度时会塌陷。所以呢,并不是只要有浮动元素就会坍塌,就要清除的,CSS水平高低衡量的标准之一就是改用什么样式就用什么样式,不多用也不少用

3.1 投机取巧法

就是直接一个
放到当作最后一个子标签放到父标签那儿,此方法屡试不爽,兼容性强,使用方便,是初学时使用的上佳之选。但是我从来不用,因为我看到的是个巨大的浪费,浪费了一个标签,而且只能使用一次,我个人是无法容忍的,所以这个方法不推荐。而且有时候一不留神中间多了个空格会产生一段空白高度的

3.2 overflow + zoom方法

这里写图片描述

此方法优点在于代码简洁,涵盖所有浏览器,可谓不错的选择啊。不过也是有问题的,就是这个overflow:hidden;是个小炸蛋,要是里面的元素要是想来个margin负值定位或是负的绝对定位,岂不是直接被裁掉了,所以此方法是有不小的局限性的。我一般不用这个方法,只是有时候顺便去除浮动时用用

3.3 after + zoom方法

先来简单讲讲after,所谓after,就是指标签的最后一个子元素的后面。于是呢,我们可以用CSS代码生成一个具有clear属性的元素,其中的关键样式就是content了。或许您从网上看到的content里面的内容是”.”一个点,我了很多次,貌似随便写什么东西都没有问题,比如content:’clear both’;没问题,或是content:’张鑫旭’也是ok的。于是有

这里写图片描述

这里的line-height:0写成height:0也是可以的。此方法可以说是综合起来最好的方法了,我都是用这个样式清除浮动的,不会影响任何其他样式,通用性强,覆盖面广,我很推荐哦

总结:

1. 清除浮动的方法还是推荐使用’after+zoom’

2. 添加浮动后的图片的容器的高度因为浮动的破坏性其高度变成了0,但是因为实体图片自身的高度,所以后面的元素并不会覆盖它,这也是浮动元素和绝对定位元素的最大区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos配置ftp

centos配置ftp 1、终端命令:yum -y install vsftpd,这样将会自动在网上down and setup vsftpd。 2、创建ftp用户组及用户: $ groupadd ftpgroup $ useradd ftpuser -g ftpgroup -d /webroot/myftpdir -m $ passwd ftpuser 码密 /webroot/myftpdir是ftp用户访问的文件…

iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)

本文转载至 http://blog.csdn.net/liuwuguigui/article/details/39494597IOS8UIAlertViewUIActionSheetiOS8推出了几个新的“controller”,主要是把类似之前的UIAlertView变成了UIAlertController,这不经意的改变,貌似把我之前理解的“contro…

嵌入式学习路线

ARMLINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2)必须掌握一个嵌入式操作系统(初步定为uclinux…

Taro+react开发(47)taro中消息机制

import Taro, { Events } from tarojs/taroconst events new Events()// 监听一个事件,接受参数 events.on(eventName, (arg) > {// doSth })// 监听同个事件,同时绑定多个 handler events.on(eventName, handler1) events.on(eventName, handler2) …

纯js监听滚动条到底部(vue版)

项目中,因为数据量过大,为提高页面性能,采用页面滑动 滚动条到底部的时候再进行数据请求分页,这边给大给个核心,结合vue的生命周期用纯javascript写的一个监听函数 第一个我们需要知道几个属性值,判断滚动…

记腾讯互娱网站布局(1)

1.导航栏 第一步:设置最外层的容器的定位方式、宽度和高度以及背景 第二步:给第二层容器设置内容的居中显示 第三步:设置居中的logo的定位和位置 第四步:设置6个标志的布局 设置所有的导航栏项目的定位和距离顶部的距离&#xff0…

第五——十三章的作业

第五章 1.团队模式和团队的开发模式有什么关系? 答:团队模式指团队的分工模式,团队内部的结构,团队开发模式指团队开发的流程及步骤 2.如果你领头开展一个全新的项目,你要怎么选择“合适”的团队模式? 答&a…

Taro+react开发(48)taro中switchTab

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

JS中完美兼容各大浏览器的scrolltop方法

1、各浏览器下 scrollTop的差异 IE6/7/8/9/10: 对于没有doctype声明的页面里可以使用 document.body.scrollTop 来获取 scrollTop高度 ; 对于有doctype声明的页面则可以使用 document.documentElement.scrollTop ; Safari: safari 比较特…

记腾讯互娱网站布局(2)

2.头图特效 给头图设置宽度100%以及定高1110px,同时设置display为table,和定位方式fixed 通过设置绝对定位以及固定宽高和背景的方式来实现 存放动态特效的盒子采用绝对定位,并且触发流体特效以及百分百宽的方式 主图上标志的实现是采用外部容…

DB Reindex

数据库在使用一段时间后,就会出现很多的索引碎片。declare ID int set IDOBJECT_ID(SMT_QC) dbcc showcontig(ID)Scan Density值越低代表越需做DBCC ReIndex ,刚做完DBCC会等于 ReIndex100% 下面是Reindex的存储CREATE procedure [dbo].[DBReindex] DB varchar(20)…

ABBYY

ABBYY FineReader Engine泰比OCR文字识别控件移动版 产品功能:OMR识别控件 平台: 开发商:ABBYY”‘Š€ 版本:产品介绍:手机识别的高品质和精度 泰比(ABBYY)Mobile OCR Engine是基于对世界知名的…

JS预编译过程

首先讲预编译过程 JS代码执行过程三部曲 过程 语法分析:首先扫描一遍,看有没有低级的语法错误预编译解释执行:解释一行执行一行 预编译low讲 函数声明整体提升,变量 的声明提升(这个其实很low,点击low…

codeforces 476B.Dreamoon and WiFi 解题报告

题目链接:http://codeforces.com/problemset/problem/476/B 题目意思:给出两个字符串str1, str2,其中,str1 只由 和 - 组成,而str2 由 ,-和?组成。初始点在原点0的位置,经过 str1 的变换最终会…

在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误

在应用程序级别以外使用注册为 allowDefinitionMachineToApplication 的节是错误 在web.config文件之外注册为 allowDefinitionMachineToApplication 的节是错误 遇到这个问题,我真是晕啊! 以下是我个人的经验解决上述的二个问题,至今有时还…

bash删除文件中的空行

方法一:sed /^$/d a.txt 所以如果要将删除后的结果替换原文件中的内容,就可以用: sed /^$/d a.txt > temp; mv temp a.txt 然后在弹出提示符下选择Y就可以了。 方法二:在vi命令提示符下,输入:%s/^\n/…

Taro+react开发(50) 小程序触底操作

onReachBottom() {console.log("我在触底");const { pageIndex, pageSize, getStauList } this.state;if (pageIndex * pageSize > getStauList.length) return;this.setState({pageIndex: pageIndex 1},() > {this.getStatusList();});}

记腾讯互娱网站布局(3)

3.图文回顾 先看看整个网站的全貌 这里’display:table;width:100%;table-layout:fixed’是约定俗成的写法,用来保证固定的表单布局,同时让连续的英文单词不会超出 内部采用’display:table-cell’属性将内容当做表格的td标签一样显示,设置v…

JS阻止冒泡和取消默认事件(默认行为)

阻止事件冒泡 function stopPropagat(e) {if (e && e.stopPropagation) {e.stopPropagation();//标准浏览器} else {window.event.cancelBubble true;//兼容IE的方式来取消事件冒泡}}阻止默认行为 function stopDefault(e) {if (e && e.preventDefault) {e.pr…

如何提高个人的职涯“本钱”

何所谓职业生涯的本钱?简单来说,必须涵盖三个方面,一是充分的能力,包括专业技能、管理知识的储备等;二是态度,即工作态度及风格是否契合你所希望就职公司的文化,开阔的视野、兼容并包的心胸、善…