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,一经查实,立即删除!

相关文章

CSS之浮动(二)

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

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

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

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

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

Taro+react开发(48)taro中switchTab

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

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

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

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…

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

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

Taro+react开发(51) 数组对象和数组得处理

for (var key of value) {arrcode.push(selectorIndustry.find(obj > obj.value key));}

大小不固定的图片和多行文字的垂直水平居中

1. 单行文字 可能很多人都知道如何让单行文字垂直居中显示&#xff0c;就是使用line-height&#xff0c;将line-height值与外部标签盒子的高度值设置成一致就可以了 2. 多行文字 说白了就是把文字当图片处理。用一个span标签将所有的文字封装起来&#xff0c;设置文字与图片相…

移动端中使用调试控制台

一、一般移动端&#xff1a;在html head中引入移动端调试控制台代码并初始化&#xff1a; <head><meta charset"UTF-8">....<!-- 移动端调试控制台 --><script src"https://cdn.bootcss.com/eruda/1.4.3/eruda.min.js"></scri…

GPT每预测一个token就要调用一次模型

问题&#xff1a;下图调用了多少次模型&#xff1f; 不久以前我以为是调用一次 通过看代码是输出多少个token就调用多少次&#xff0c;如图所示&#xff1a; 我理解为分类模型 预测下一个token可以理解为分类模型&#xff0c;类别是vocab的所有token&#xff0c;每一次调用都…

display:table-cell的集中应用

1. display:table-cell属性指让标签元素以表格单元格的形式呈现&#xff0c;类似于td标签。我们都知道&#xff0c;单元格有一些比较特别的属性&#xff0c;例如元素的垂直居中对齐&#xff0c;关联伸缩等&#xff0c;所以display:table-cell还是有不少潜在的使用价值的 与其他…

基于display:table的CSS布局

CSS表格能够解决所有那些我们在使用绝对定位和浮动定位进行多列布局时所遇到的问题。例如&#xff0c;“display:table;”的CSS声明能够让一个HTML元素和它的子节点像table元素一样。使用基于表格的CSS布局&#xff0c;使我们能够轻松定义一个单元格的边界、背景等样式&#xf…

ASP.NET MVC Training Kit发布了

Scott Guthrie昨天宣布了ASP.NET MVC 按照Ms-PL协议开源发布&#xff0c;具体内容参见ASP.NET MVC 1.0 has been released&#xff0c;也可以参看Scott Hanselman的新闻稿Microsoft ASP.NET MVC 1.0 is now Open Source MS-PL。 微软同时也推出了一套ASP.NET MVC frameworke培训…

JS实现滚动监听以及滑动到顶部

效果图: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><!-- <meta name"viewport" content"widthdevice-width, initial-scale1.0" /> --><meta name"viewport" …

display:table-cell自适应布局下连续单词字符换行

1. display:table-cell自适应布局 典型的双栏布局类名使用如下&#xff1a; 这种方式实现的自适应布局&#xff0c;元素宽度无需定值&#xff0c;且margin(浮动部分)与padding自由设置&#xff0c;支持百分比宽度&#xff08;table-cell内&#xff09;&#xff0c;且可以无限制…

javascript学习系列(21):数组中的reduceRight法

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说…

向高手学习--第3列数据是第2列从头到当前行的值之和

From: http://topic.csdn.net/u/20111203/13/1fb6742b-205f-4bc0-bdeb-ba26a7e174aa.html?14713 问题描述&#xff1a; 我现在有一个表&#xff0c;名字为 table1, 表里有两列&#xff0c;一列是序号ID&#xff0c;一列是数量 NUM1&#xff0c;比如ID1 NUM11 202 303 504 10…

JS滚动条位置,顶部,底部,触发事件

效果图: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-equiv"X-UA-Compatible" c…