花车的工作原理
当页面上存在浮动元素时,非浮动元素会环绕浮动元素,类似于文本在报纸图片周围环绕的方式。从文档的角度来看(HTML 的最初目的),这就是浮动的工作方式。
float
对比display:inline
在 发明之前display:inline-block
,网站使用float
将元素设置在彼此旁边。float
优于display:inline
后者,因为使用后者,您不能设置元素的尺寸(宽度和高度)以及垂直填充(顶部和底部) - 浮动元素可以这样做,因为它们被视为块元素。
浮动问题
主要问题是我们float
违背了它的预期目的。
另一个是虽然float
允许并排的块级元素,但浮动不会赋予其容器形状。就像position:absolute
,元素被“从布局中取出”。例如,当一个空容器包含一个浮动的 100px x 100px<div>
时,它<div>
不会赋予容器 100px 的高度。
与 不同position:absolute
的是,它会影响它周围的内容。浮动元素之后的内容将“环绕”该元素。它首先在它旁边渲染,然后在它下面渲染,就像报纸文本如何围绕图像流动一样。
Clearfix 救援
clearfix所做的是强制浮动后的内容或包含浮动的容器在其下方呈现。clear-fix 有很多版本,但它的名字来源于常用的版本——使用 CSS 属性的版本clear
。
例子
这里有几种方法来做 clearfix,取决于浏览器和用例。只需知道如何clear
在 CSS 中使用该属性以及浮动在每个浏览器中如何呈现,即可实现完美的跨浏览器清除修复。
你有什么
您提供的样式是一种具有向后兼容性的 clearfix 形式。我找到了一篇关于这个 clearfix 的文章。事实证明,这是一个旧的 clearfix - 仍然为旧浏览器提供服务。文章中还有一个更新、更简洁的版本。这是细分:
clear:both
您拥有的第一个 clearfix在目标元素和下一个元素之间附加了一个不可见的伪元素,它是 styled 。这会强制伪元素在目标下方呈现,并在伪元素下方呈现下一个元素。
第二个附加了display:inline-block
早期浏览器不支持的样式。inline-block 与 inline 类似,但为您提供了一些阻止元素的属性,如宽度、高度以及垂直填充。这是针对 IE-MAC 的。
这是display:block
由于上述 IE-MAC 规则的重新应用。此规则对 IE-MAC “隐藏”。
总而言之,这 3 条规则保持了.clearfix
跨浏览器的工作,同时考虑到旧的浏览器。