探究浮动

最近研究清除浮动和布局相关的问题,感觉概念很多很杂,而且这些东西经常用到,今天才有时间来好好整理一下不懂的和懂得,来把他们一起结合起来看。

浮动元素与absolute
了解下float的起源和现状
浮动早期是用来文字环绕的,文字环绕图片。

至于为什么浮动能做自适应,环绕图片?
这里我们可以看看张鑫旭博客的例子,当图片和文字排列在一起的时候,他们自我形成了很多line box,而利用浮动就能破坏这些line box,具体参见css两种模型,其实归根结底文字环绕的原理也是破坏这些line box。所以当我们设置float left的时候会碰到一个常见的问题,那就是高度塌陷的问题,父元素并没有了高度,因为浮动的元素并没有高度,所以父元素没高度。这时候清除浮动就派上用场了。可以说我们是一边享受着浮动带给我们的便利,一边还要承担它的后果,只是因为我们使用的场景有问题,那么问题来了,有没有一劳永逸的办法呢。

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

height与line height
这里额外提到一个知识点,关于line box的heigt与line height,可以看到当把文字的line height设置为0,没有了height,而拥有line height,文字size设置为0,height确实存在的,证明决定高度的在于这个line height,一般来说我们设置heght与line height一样即可是垂直居中(实际并不需要heigt),就是这个道理。关于这两个属性还需提到的就是line height不会使用haslayout,而height会使用haslayout,line height能让文字自适应,而height 是block,占满一行。

为什么文字环绕图片不用清除浮动,而布局需要?
一句话,因为元素环绕(例如文字),其自身是含有inline boxes高度的,这是inline水平的元素形成高度的基础,所以,虽然浮动元素没有高度,但是其周围环绕的元素是有高度的,只要环绕元素比浮动元素高度高,父标签无高度的问题自然也就没有了,但是纯粹一堆浮动元素会有高度吗?没有。

display absolute与float left的比较
两者区别在与包裹性,即一个脱离了文档流,而另一个依然在文档流中,还是回到文字包裹图片,他还是占据了位置,但是absoulute却像一个世外高人, 与世无争了。

能与float实现相同效果的属性介绍
display inline-block
float left可以看到,虽然功能强大,但是实际上它的诞生并不是为了布局的,这里我们可以使用另一种方式display inline-block的方式来进行布局,缺点在于要清除间隙。

在这里提一下BFC,我刚入门也被这几个搞混了,overflow hidden,display inline-block,float等等都能实现浮动,那到底有何区别呢。

BFC元素简介和基本特性
元素内部无论怎么变化不影响外部。BFC元素margin不相互叠加和清除浮动都是基于此点。

触发BFC条件
float的值不为none。
overflow的值为auto,scroll或hidden。
display的值为table-cell, table-caption, inline-block中的任何一个。
position的值不为relative和static。

bfc按我的理解是独立出来一个区域,这个区域只有满足bfc触发条件才会进入,是与普通文档流互不冲突的一个区域。

参考链接
http://www.zhangxinxu.com/wordpress/2010/01/css-float%E6%B5%AE%E5%8A%A8%E7%9A%84%E6%B7%B1%E5%85%A5%E7%A0%94%E7%A9%B6%E3%80%81%E8%AF%A6%E8%A7%A3%E5%8F%8A%E6%8B%93%E5%B1%95%E4%B8%80/

http://www.zhangxinxu.com/wordpress/2009/11/css%E8%A1%8C%E9%AB%98line-height%E7%9A%84%E4%B8%80%E4%BA%9B%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E5%8F%8A%E5%BA%94%E7%94%A8/

http://www.zhangxinxu.com/wordpress/2010/11/%E6%8B%9C%E6%8B%9C%E4%BA%86%E6%B5%AE%E5%8A%A8%E5%B8%83%E5%B1%80-%E5%9F%BA%E4%BA%8Edisplayinline-block%E7%9A%84%E5%88%97%E8%A1%A8%E5%B8%83%E5%B1%80/

http://www.zhangxinxu.com/wordpress/2012/04/inline-block-space-remove-%E5%8E%BB%E9%99%A4%E9%97%B4%E8%B7%9D/

https://www.zhihu.com/question/21985587

http://www.zhangxinxu.com/wordpress/2015/02/css-deep-understand-flow-bfc-column-two-auto-layout/

https://zhuanlan.zhihu.com/p/25321647

https://www.w3.org/TR/CSS2/visuren.html#positioning-scheme

注:按顺序观看最好

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • 概念 Formatting context Formatting context 是 W3C CSS2.1 规范中...
    wonderwander阅读 745评论 0 1
  • 以下文章是我在网上收集的内容,为了记录自己的学习以及为了以后不到处找而记录下来,如果对你有用,请感谢写这些文章的前...
    DCbryant阅读 927评论 0 2
  • 1标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? CSS盒子模型:由四个属性组成的外边距(margi...
    秦小婕阅读 1,162评论 0 1
  • 这周每天画一幅画已经成了习惯了,我看到了有一段话,说的真的很好。如果你不想平庸的活一辈子,那么总是需要很多勇气的。...
    向日葵YANG阅读 198评论 1 1