当我对inline-flex
元素应用clearfix时,它有一个奇怪的行为。当我对一个具有inline-flex
显示属性的元素设置clearfix时,奇怪的空白出现在它前面:
但是,当使用inline-block
时,行为就不同了:
我不明白为什么inline-flex
与inline-block
有不同的行为,为什么它有奇怪的空间。
第一个
JSFiddle Demo
当我对inline-flex
元素应用clearfix时,它有一个奇怪的行为。当我对一个具有inline-flex
显示属性的元素设置clearfix时,奇怪的空白出现在它前面:
但是,当使用inline-block
时,行为就不同了:
我不明白为什么inline-flex
与inline-block
有不同的行为,为什么它有奇怪的空间。
第一个
JSFiddle Demo
3条答案
按热度按时间gk7wooem1#
尝试将
vertical-align: top
设置为inline-flex | inline-block
元素以修复此偏移。https://jsfiddle.net/jeca65my/2/
感谢@NenadVracar提供此解决方案
lvmkulzt2#
x1月0n1x日
使用
display: inline-flex
时,您将建立一个灵活容器。Flex容器的初始设置是
flex-direction: row
。这意味着容器的所有流入子元素(包括流入伪元素)将排成一行。这些子元素的
display
值(在本例中为table
)将根据 *flex上下文 * 的规则被覆盖/忽略。您的flex容器在一行中有两个flex项(伪元素):
第一个
display: inline-block
当您使用
display: inline-block
时,您建立了一个 * 块格式上下文 *。会考虑子元素的
display
属性。带有
display: table
的伪元素是块元素,默认情况下,它们占据了整个可用宽度。因此,伪元素创建了两行:第一次
vertical-align: baseline
(第一次)因为两个版本的代码都使用内联级别的
display
值,所以这将调用vertical-align
属性,该属性的初始值为baseline
。当设置为
display: inline-flex
时,您在div.b
下面看到的空白是由于基线对齐。当设置为
display: inline-block
时,您在div.b
下面看到的空白是由于基线对齐 * 以及两个块元素子项 * 的影响。下面是一个更详细的解释::https://stackoverflow.com/a/36975280/3597276
clear
属性你的clearfix方法不是任何空白的来源。事实上,它对你的布局没有任何影响,可以安全地删除。
只有在处理浮点数时才使用
clear
属性。9.5.2控制浮子旁边的流量:
clear
属性此属性指示元素框的哪些边不能与前面的浮动框相邻。
布局中不仅没有浮动元素,即使有,
float
和clear
属性在flex上下文中也会被忽略。3.弹性容器:
flex
和inline-flex
显示值float
和clear
不会创建浮动或清除弹性物料,也不会使其流出。mbzjlibv3#
你必须把你的页面想象成一个
flow
。你页面的每个元素都在流(DOM)中。你使用position属性来改变在流中的位置。闭塞
块元素将始终开始一个新行。(即:div)的值
内嵌块
内联块元素是类似于
div
的块,但其中具有inline
属性。(即:量程)内嵌Flex
这与
inline-block
在流中的使用方式相同。它创建一个inline
容器,但布局为flex
。对于您的示例,为了关注
inline-block
和inline-flex
之间的差异,一个有趣的做法是在子div中添加文本。您将看到子div的行为将再次发生变化,因为它包含文本。JSFiddle example**编辑:**我在SO上找到了一句话,很好地恢复了这种情况。感谢This post上的@BoltClock:
display:inline-flex不使flex项内联显示。它使flex容器内联显示。