我想要两个inline-block
元素保留在同一行,无论它们如何width
or margin
.
快速解决方案是申请white-space: nowrap
到容器。 Flex 和 float 是同样有效的替代方案。
我只是坚持找出特定的包装行为white-space: normal
.
情况是这样的:
- 那里有两个
inline-block
块级容器中的元素。
- 容器的宽度固定为500px。
- 每个child的宽度固定为200px。
- 容器设置为
overflow: hidden
.
有还是没有white-space: nowrap
,盒子 A 永远不会包装。其尺寸width
or margin-left
没关系;盒子A将会消失在虚空中overflow: hidden
.
这是 A 框margin-left: 400px
(容器有overflow: hidden; white-space: normal
):
请注意上图中盒子 B 的包装方式。它did not消失在overflow: hidden
.
这是 B 框margin-left: 250px
(容器与上面相同;A 框重置):
这是 B 框margin-left: 400px
:
与 A 区不同的是,B 区拒绝留在第一线并只是隐藏起来。
所以规则似乎是:
With white-space: normal
,只有该行的第一个元素才会受到尊重overflow: hidden
。后续元素将换行但尊重overflow: hidden
在后续行中。
用第三个元素测试这个理论似乎证明它是正确的:
这是 B 框margin-left: 350px
和一个新的 Box Cmargin-left: 350px
:
所以看来一个元素不能强迫另一个元素尊重overflow: hidden
他们共同的父母。
有人确切知道发生了什么,和/或在规范中定义了这种行为吗?
这是溢出、换行、内联块的问题,还是多种因素的组合?
我在这里检查过但没有找到任何东西:https://drafts.csswg.org/css-text-3/#white-space-property https://drafts.csswg.org/css-text-3/#white-space-property
操场 https://jsfiddle.net/bgqshs0o/1/