【发布时间】:2016-01-30 14:53:36
【问题描述】:
我希望两个 inline-block 元素保持在同一行,无论它们的 width 或 margin 是什么。
快速解决方案是将white-space: nowrap 应用于容器。 Flex 和浮动是也可以使用的替代方案。
我只是坚持使用white-space: normal 找出特定的包装行为。
情况如下:
- 块级容器中有两个
inline-block元素。 - 容器的宽度固定为500px。
- 每个孩子的宽度固定为 200 像素。
- 容器设置为
overflow: hidden。
无论有没有white-space: nowrap,框A 永远不会换行。其width 或margin-left 的大小无关紧要;框 A 将直接消失在 overflow: hidden 的空白中。
这是带有 margin-left: 400px 的框 A(容器有 overflow: hidden; white-space: normal):
请注意上图中盒子 B 的包装方式。它没有消失在overflow: hidden中。
这是带有 margin-left: 250px 的框 B(容器与上面未更改;框 A 重置):
这是带有margin-left: 400px的框B:
与框 A 不同,框 B 拒绝停留在第一行,只是隐藏。
所以规则似乎是:
对于
white-space: normal,只有行中的第一个元素会尊重overflow: hidden。后续元素将换行,但在后续行中尊重overflow: hidden。
用第三个元素测试这个理论似乎证明它是正确的:
这是带有margin-left: 350px 的框B 和带有margin-left: 350px 的新框C:
因此,一个元素似乎不能强制另一个元素尊重其共同父级的overflow: hidden。
有人确切地知道发生了什么,和/或在规范中定义了这种行为吗?
这是溢出、换行、内联块的问题,还是多种因素的组合?
我已经检查过这里但没有找到任何东西: https://drafts.csswg.org/css-text-3/#white-space-property
【问题讨论】:
-
this fiddle 是否显示您所追求的情况:包装器具有
white-space: nowrap,框 A 具有margin-left: 200px(或更高)。盒子 B 很好地推入了overflow: hidden,没有包装? -
仅供参考 this 是我读过的最好的 CSS 资源之一,它很好地解释了 inline-block 元素的行为。
-
谢谢@Kenney。是的,解决方案很简单。理解行为有点棘手;-)
-
@DominicEU,感谢您提供链接参考。如果其中有任何可以回答问题的内容,请发布答案。
标签: html css language-lawyer w3c