html – CSS,使用display:table with before伪元素

前端之家收集整理的这篇文章主要介绍了html – CSS,使用display:table with before伪元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在寻找清除浮点数的最佳方法并找到这个 perfect solution,如果你看一下答案,解决方案使用display:table而不是display:block,原因解释如下:

The use of table rather than block is only necessary if using
:before to contain the top-margins of child elements.

我尝试理解其含义,我做了一些测试,但我无法弄清楚使用display:table的原因是什么,如果有人可以提供代码示例来显示差异并且需要使用display:table.

编辑:

这是一个fiddle,我试着测试差异,我确定有一个,但我无法弄清楚要测试什么.

编辑说明:

我的问题不在于显示块/表之间的区别,我的问题是关于使用display:table而不是display:block(关于清除浮动)的原因,有一个由Bryan从this answer带来的解释,但我无法理解原因,如果有人能解释是什么原因,也许可以提供一个代码示例来说明差异.

解决方法

您引用的评论 – 以及扩展名 – 代码 – 来自Nicolas Gallagher提出的微清除修复,如该问题的最佳答案中所述. Nicolas写了一篇介绍该技术的 article(由于某种原因与其他答案无关),并在其中解释了为什么使用display:table,如下所示:

This “micro clearfix” generates pseudo-elements and sets their display to table. This creates an anonymous table-cell and a new block formatting context that means the :before pseudo-element prevents top-margin collapse. The :after pseudo-element is used to clear the floats. As a result,there is no need to hide any generated content and the total amount of code needed is reduced.

更详细地说,如果一个元素有第一个子节点并且它们都是display:block,并且子节点有一个上边距,那么会发生的情况是子边距将与父边距(如果有的话)合并,或者是collapse,导致上边缘明显从子元素中消失,这有时可能是不合需要的.有关此效果的说明,请参阅this question.

由于显而易见的原因,边距不会通过表元素崩溃,这就是display:table hack工作的原因.

因此,基本上,display:table – 以及扩展名:before伪元素 – 对于clearfix来说并不是必不可少的,只是一个额外的hack来阻止元素与其第一个子元素之间的折叠.如果您要做的只是清除内部浮动,这是一个clearfix的意图,那么您不需要display:table或:before.

原文链接:https://www.f2er.com/html/231913.html

猜你在找的HTML相关文章