开始简单的理解为等同于display:none
的效果,后来发现是错的,被collapse through
的盒对后面的盒依然有影响。
有人能深入的解释下么?
开始简单的理解为等同于display:none
的效果,后来发现是错的,被collapse through
的盒对后面的盒依然有影响。
有人能深入的解释下么?
对于被 collapse through
的元素需要关心两件事:
内部元素定位: 为了定位该元素的内部元素(如果有的话), 需要明确此元素的外边缘.
外边距折叠: 该元素自身外边距的合并情况以及与其他相邻外边距的合并情况. 这时会影响元素相互的外部关系(实际外边距距离), 而不会影响到其他元素自家如何去定位.
这两件事情里面, 可能题主疑惑的就是第二点, 明明改变了后面的元素和别的元素的距离, 怎么又说没有影响呢? 我认为规范所描述的没有影响, 是指排除了外边距折叠所造成的相互距离改变之外, 没有别的任何影响.
5 回答1.3k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
4 回答2k 阅读
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
1 回答1.5k 阅读✓ 已解决
据规范对
collapse through
的定义,collapse through
对元素的影响是对其border top
边界位置的影响。而border top
仅仅会影响其子元素的位置。也就是说,被collapse through
的仅仅会影响其后代元素的位置,而不会影响其他元素的位置。如果一个元素被
collapse through
,那么他的border top
位置分为两种情况:如果这个元素的
margin
和其父元素的marin-top
合并,则其border top
边界和其父元素的border top
相同。否则,其
border top
的位置如同其下边界宽度不为0那样的计算,当然,只是如同而已。举个例子:
比如 ex1 里面,
div#ex1
里面的浮动元素脱离流,则这个元素为空,则需要被collapse through
,他的margin
应该和父元素的margin-top合并,所以这个元素的 border top 和父元素.red
相同,而.yellow
的浮动的位置是按照其这个元素计算的,于是可以看出div#ex1
的border top
的位置和red相同。在ex2里面,
div#ex2
,他的 border top 位置就是像他的border-bottom不为0时候的位置。如果他的border-bottom不为0,则.green
和.blue
不应该合并,他应该在他们之间,div#ex2
的margin-top和green的margin-bottom合并之后,是50px,即其border-top的位置就是.geen
背景以下50px。故purple的位置如图所示。 当然这并不影响其他的布局的计算,只是计算这个元素border top 时候的 as if 而已。可以换成注释的代码试试。P.S. 其实
div#ex2
可以去掉,因为当浮动元素出现在两个合并的margin之间的时候,就如果它有一个匿名的空的父元素。