CSS之浮动(一)

1. 浮动出现的意义其实只是用来让文字环绕图片而已,仅此而已。而我们目前用浮动实现页面布局本不是浮动该干的事情

2. 浮动的包裹性

撇开浮动的“破坏性”,浮动就是个带有方位的display:inline-block属性

display:inline-block某种意义上的作用就是包裹(wrap),而浮动也有类似的效果。举个常见例子,或许您有实现宽度自适应按钮的经验,实现宽度自适应的关键就是要让按钮的大小自适应于文字的个数,这就需要按钮要自动包裹在文字的外面。我们用什么方法实现呢?一就是display:inline-block;二就是float

浮动从某种意义上而言与display:inline-block属性的作用是一模一样的,所以类似于display:block; float:left;的CSS代码超过95%的情况是没有道理的(display:block是多余的)。然而,float无法等同于display:inline-block,其中原因之一就是浮动的方向性,display:inline-block仅仅一个水平排列方向,就是从左往右,而float可以从右往左排列,这就是两者的差异。然而,我们又有多少情况需要元素从右往左排列呢?很少,所以,CSS中,没有浮动这一属性不是什么大不了的事情,它其实就那么回事

3. 浮动的破坏性

文字之所以会环绕含有float属性的图片是因为浮动破坏了正常的line boxes

HTML:<p>这是一行普通的文字,这里有个 <em>em</em> 标签</p>

这段HTML代码涉及到4种boxes:

1. 首先是p标签所在的containing box,此box包含了其他的所有boxes

2. 然后就是inline boxes

这里写图片描述

inline boxes不会让内容成块显示,而是排成一行,如果外部包含inline属性的标签(span,a,cite等),则属于inline boxes,如果是个光秃秃的文字,则属于匿名inline boxes

3. line boxes

这里写图片描述

在containing boxes里,一个一个的inline boxes组成了line boxes。这是浮动影响布局的关键box类型

4. content area

这里写图片描述

content area 是一种围绕文字看不见的box。content area的大小与font-size大小相关

5. 正常的图文混排

默认情况下,图片与文字混排应该是这个样子:图片与文字基线对齐,图片与文字在同一行上

这里写图片描述

上图中,图片为一个inline boxes,两边的文字也是inline boxes。由于line boxes的高度是由其内部最高的inline boxes的高度决定的,所以这里line boxes的高度就是图片的高度。此时图片与文字是同一box类型的元素(都是inline boxes),是在同一行上的,所以,默认状态下,一张图片只能与一行文字对齐。而要想让一张图片要与多行文字对齐,您唯一能做的就是破坏正常的line boxes模型

6. 含有浮动属性的图片与文字

这里写图片描述

刚才说过,正常情况下,图片自身就是个inline boxes,与两侧的文字inline boxes共同组成了line boxes,但是,一旦图片加入了浮动,情况就完全变了。我认为是浮动彻底破坏了img图片的inline boxes特性,至少有一点我可以肯定,图片的inline boxes不存在了,被恶魔附体,变身了,而这个恶魔就是浮动。一旦图片失去了inline boxes特性就无法与inline boxes的文字排在一行了,其会从line boxes上脱离出来,跟随自身的方位属性,靠边排列。这种状态跟限制性内切酶起作用几乎一致,一条基因链上(line boxes)有很多的基因(inline boxes),然后限制性内切酶(float)会切除特定的DNA序列,此序列(float元素)就会从基因链上脱离出来

在目前的CSS的世界中,所有的高度都是有两个CSS模型产生的,一个是box盒状模型,对应CSS为”height+padding+margin”,另外一个是line box模型,对应CSS为”line-height”。前者的height属性分为明显的height值和隐藏的height值,所谓隐藏的height值是指图片的高度,一旦载入一张图片,其内在的height值就会起作用,即使您看不到”height”这个词。而后者line box则针对于文字等这类inline boxes的元素(图片也属于inline boxes,但其height比line-height作用更凶猛,故其inline boxes高度等于其自身高度,对line-height无反应),inline boxes的高度直接受line-height控制(改变line-height文字拉开或重叠就是这个原因),而真正的高度表现则是由每行众多的inline boxes组成的line boxes(等于内部最高的inline box的高度),而每个line boxes的高度垂直堆叠形成了containing box的高度,也就是我们见到的div或是p标签之类的高度了。所以,对于line box模型的元素而言,没有inline boxes,就没有高度了,而浮动却恰恰做了这么龌龊的事情,其直接将元素的inline boxes也破坏了,于是这些元素也就没有了高度

我们所需要的布局也就那么几个,其中之一就是文字环绕图片显示了,可是怎么实现这样的效果呢?聪明的CSS开发者就创造了一个修炼“魔功”的float属性,其作用就是破坏line boxes模型好让文字环绕图片显示,最后实现了吗?确实实现了。还记得我多次说到的浮动的意义吗——只是用来让文字环绕图片而已,而要实现这个就需要用到浮动的“破坏性”

沿用上面图片的例子。浮动破坏了图片的inline box,产生了两个结果:一是图片无法与文字同行显示,脱离了其原来所在的line box链;二是没有了高度(无inline box -> 无line box -> 无高度)

我们可以拿浮动元素与绝对定位元素做对比或许可以帮助理解。与浮动元素一样,绝对定位元素也具有“包裹性”,此“包裹性”适用于任何元素。那么,浮动元素与绝对定位元素的差别在哪里呢?我觉得最主要的差别在于:绝对定位的元素脱离了文档流,而浮动元素依旧在文档流中;而这造成的显示上的差异就是:同处于文档流中的文字实体不会与浮动元素重叠,而会与绝对定位元素重叠。这就是文字环绕显示的重要原因之一:虽然图片实际占据的高度为0,但是由于其宽度实体存在(包裹性),同样是content area 实体的文字不会与之重叠(外部的容器盒子containing box(p,div,ul,li)会重叠),这就好比篮球场上站了个植物人,虽然其几乎不可能得分,运球之类,但是他的实体在那里,它可以阻挡同一水平空间上的同一类型的个体(即人)直接穿过去,要通过,得绕道。但是其无法阻挡整个球队的向前推进。见下图(firebug显示截图)

这里写图片描述

总结:

1. 浮动元素的破坏性虽然破坏了inline boxes,但其内容还是真实存在的(图片占据的高度为0,但是因为包裹性的原因其实体还是存在),所以和绝对定位元素不同的就是被破坏掉的元素并没有脱离文档流,仍然会占据一定的空间

2. 浮动元素的包裹性是指浮动元素实际就是一个block元素,或者带方向的inline-block属性,那么等同于是根据内容来决定宽度或者高度的意思

3. 浮动元素的破坏性是指破坏了inline boxes导致的

4. CSS中的高度由2个模型产生,一个是盒模型的margin+padding+content,另一个则是专门用来衡量文字的line boxes,文字的高度一般由line-height属性决定

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

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

相关文章

一个怎样得到treeView值的小例子

阅读全文&#xff1a;http://www.cckan.net/forum.php?modviewthread&tid40 private void treeViewMenu_MouseDown(object sender, MouseEventArgs e) { if (e.Button MouseButtons.Right) { Point ClickPoint new Poi…

jquery miniui , 普加甘特图,流程管理

http://www.miniui.com/docs/quickstart/index.html 普加 甘特图 流程管理 http://www.plusgantt.com/project/demo/Project.html转载于:https://www.cnblogs.com/qq-757617012/p/4021130.html

Taro+react开发(46)taro中环境判断

环境判断 Taro.ENV_TYPE# ENV_TYPE.WEAPP 微信小程序环境ENV_TYPE.SWAN 百度小程序环境ENV_TYPE.ALIPAY 支付宝小程序环境ENV_TYPE.TT 字节跳动小程序环境ENV_TYPE.WEB WEB(H5)环境ENV_TYPE.RN ReactNative 环境ENV_TYPE.QUICKAPP 快应用环境ENV_TYPE.QQ QQ小程序 环境ENV_TYPE…

Linux shell重复执行某命令n次

方法一 for i in {1..10}; do echo "Hello"; done方法二 在~/.bashrc文件中创建一个run函数&#xff08;函数名字随意&#xff09;&#xff1a; function my_repeat() {number$1shiftfor n in $(seq $number); do$done }使./bashrc生效 souce ~/./bashrc示例 run…

CSS之浮动(二)

1. 浮动的非本职工作 我们只要静下心来好好想想浮动的本质&#xff0c;实现的原理&#xff0c;就可以知道为什么浮动本不应该用来对页面进行布局。还记得上一部分所说的浮动的本质吗&#xff1f;即“包裹与破坏”。我们可以用这个&#xff08;“包裹与破坏”&#xff09;解释为…

centos配置ftp

centos配置ftp 1、终端命令&#xff1a;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”&#xff0c;主要是把类似之前的UIAlertView变成了UIAlertController&#xff0c;这不经意的改变&#xff0c;貌似把我之前理解的“contro…

嵌入式学习路线

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

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

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

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

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

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

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

第五——十三章的作业

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

Taro+react开发(48)taro中switchTab

跳转到 tabBar 页面&#xff0c;并关闭其他所有非 tabBar 页面

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

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

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

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

DB Reindex

数据库在使用一段时间后&#xff0c;就会出现很多的索引碎片。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文字识别控件移动版 产品功能&#xff1a;OMR识别控件 平台&#xff1a; 开发商&#xff1a;ABBYY”‘Š€ 版本&#xff1a;产品介绍&#xff1a;手机识别的高品质和精度 泰比&#xff08;ABBYY&#xff09;Mobile OCR Engine是基于对世界知名的…

JS预编译过程

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

codeforces 476B.Dreamoon and WiFi 解题报告

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

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

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