Css 为什么非浮动保证金会随着浮动而崩溃?
在调查清除浮动时,我遇到了一种特殊情况,即使用非浮动框进行边距和清除 根据规范的规定,在以下情况下均不应发生边缘塌陷:Css 为什么非浮动保证金会随着浮动而崩溃?,css,css-float,Css,Css Float,在调查清除浮动时,我遇到了一种特殊情况,即使用非浮动框进行边距和清除 根据规范的规定,在以下情况下均不应发生边缘塌陷: 生成边距的元素中至少有一个是浮点,或 清除障碍 但是,考虑一系列浮动框,最后一个清除其余部分: div.container>div{ 浮动:左; 宽度:50px; 高度:50px; 利润率:10px; } div.container>div:最后一个子级{ 清除:左; } 如你所料。垂直边距不会塌陷 但是,当清算元素不浮动时 这种行为完全违背了上述两种条件: 有许可证
- 生成边距的元素中至少有一个是浮点,或
- 清除障碍
但是,考虑一系列浮动框,最后一个清除其余部分:
div.container>div{
浮动:左;
宽度:50px;
高度:50px;
利润率:10px;
}
div.container>div:最后一个子级{
清除:左;
}
如你所料。垂直边距不会塌陷
但是,当清算元素不浮动时
这种行为完全违背了上述两种条件:
这就是说,我并不声称像我的手背一样了解CSS浮动模型,所以。。。其他人能解释为什么会这样吗?没关系,我想是我自己发现的。看起来我问题中的以下假设是错误的(告诉你我没有完全理解CSS浮动模型): 清算要素本身没有浮动的事实不应该是相关的 在中,它描述了
clear
属性,它表示:
通过首先确定元素上边界边缘的假设位置,计算设置了“清除”的元素的间隙。如果元素的“clear”属性为“none”,则此位置是实际的上边框边缘所在的位置
如果元素上边界边缘的假设位置未超过相关浮动,则引入间隙,并根据8.3.1中的规则折叠边距
然后,间隙量设置为以下值中的较大值:
- 浮动的顶部外边缘必须低于所有早期左侧浮动框(在“清除:左侧”的情况下)或所有早期右侧浮动框(在“清除:右侧”的情况下)的底部外边缘,或两者(清除:两者)的下部外边缘
clear
和float
都设置为none
时,(请注意,容器块边距上的边框在它和容器之间折叠)
最后,引入间隙的事实在这种特定情况下实际上并不相关,因为间隙仅在元素的
clear
属性设置为none
时,才会阻止边距折叠。因为我们在这里讨论浮动,保证金崩溃确实不会正常发生,因此最后一个元素是否有间隙并不相关(无论如何不是直接的)。是的,我真的应该看到这一点(事实是我自己在规范中找到了答案,在写问题的时候…。很好的研究和答案!