美文网首页
浮动理解

浮动理解

作者: 假装会编程 | 来源:发表于2016-10-20 14:42 被阅读0次

在理解浮动的概念,边看边动手做一下:

未设置浮动的div 给div4设置 float:left  给div4设置 display:none 

为什么?

div4在使用float属性之后不是直接水平移动到最左端,而是先向下移动了一个margin的距离,然后才向左移动。

目前没有找到合理的解释。

去掉div5的margin

可以看出div4的位置受div5的margin影响,但具体原理还是很模糊,在w3c上找到这样一段话:

浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。

这里所说的包含框是不是指整个框模型,即包括内外边距和边框在内的整个元素框?可不可以理解为标准流中的元素框与浮动框的外边距在相遇时不会合并?下面是w3c关于外边距合并的解释:

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

那其他定位中元素框与标准流的元素框的外边距会合并吗?

div4 position:absolute / fixed

尝试了一下,发现得到的结果和float:left相同。


之前看的头昏脑涨的,就暂时搁置了一段时间。重新捡起来看,又查了查W3C上的解说,发现关于外边距合并的内容最下面有如下注释:

只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

嗯,大概就是这个意思吧。自己测试了一下,只有普通文档流的块框之间的垂直外边距才会发生合并,其他行框、浮动框以及绝对定位中的框模型不会出现外边距合并,因而出现上述现象;

也就是说,当元素设置为浮动后虽然会脱离普通文档流,但这是单方面的。只是普通文档流中的其他元素对浮动元素单方面的忽略,普通文档流中的元素将其视为不存在,可以通过为浮动元素设置opacity:0 和 display:none 验证一下,会发现浮动元素的存在与否对普通文档流中元素的布局完全没有影响;而另一方面,浮动元素却对普通文档流中的元素“恋恋不舍”,它虽然也想上天,但更多的只是一种趋势,只要接触到其他框模型的边缘就会停下;浮动元素有的时候反而会因此而下沉,就像上文中原本的外边距合并现象因为元素浮动而失效,导致浮动元素向下沉了一段margin的距离。


参考资料和拓展:

W3School - CSS 外边距合并

张鑫旭 - CSS float浮动的深入研究、详解及拓展

相关文章

  • 浮动理解

    在理解浮动的概念,边看边动手做一下: 为什么? div4在使用float属性之后不是直接水平移动到最左端,而是先向...

  • 浮动的理解

    http://www.cnblogs.com/iyangyuan/archive/2013/03/27/29838...

  • 浮动的理解

    关于浮动,一直存在一些误解 一,浮动是什么 首先需要了解下文档流,普通文档流中,元素是按照从上到下,从左到右的顺序...

  • H5前端开发学习笔记——0x15清除浮动

    清除浮动 课时130 浮动元素高度问题(掌握) 课时131 清除浮动方式一(理解) 课时132 清除浮动方式二(理...

  • H5前端开发学习笔记——0x14浮动

    浮动 课时121 网页布局方式(掌握) 课时122 浮动流基本概念(掌握) 课时123 浮动元素脱标(理解) 课时...

  • 我理解的浮动与闭合浮动

    1.什么是浮动:CSS中定位的一种。 CSS的定位有:文档流(普通流),浮动,绝对定位 2.为什么我们要清除浮动(...

  • 如何理解css浮动以及清除浮动

    偶然间在博客园看到一篇非常棒的讲解浮动与清除浮动原理的文章 This is CSS清除浮动 link.

  • 浮动盒子的理解

    除了块盒和行盒,还有一种盒子,就是行块盒(display:inline-block),这种盒子结合了行盒和块盒的特...

  • CSS绝对定位absolute详解

    之前介绍过CSS浮动float详解,本篇介绍的绝对定位absolute和浮动float有部分相似性。如果能理解浮动...

  • [前端日记]0.x.4/float&clear

    浮动 语法: 一句话理解: 浮动可以理解为,让某个元素脱离标准流(从左到右,自上而下排列),漂浮在标准流之上; 当...

网友评论

      本文标题:浮动理解

      本文链接:https://www.haomeiwen.com/subject/ilfpyttx.html