【发布时间】:2014-04-03 07:43:52
【问题描述】:
我试图在一行中放置几个元素,以便它们都适合容器的宽度。为了防止它们自动换行,我在父级中添加了“white-space: nowrap”,并在子级中添加了“white-space: normal”以允许他们换行(根据需要)。
问题是在这种配置下,最右边的孩子有时会超过父母的宽度。
HTML:
<div id="container">
<div class="child">
child 1
</div>
<div class="child">
child 2 text that might be long enough to wrap, but still exceed the parent
</div>
</div>
CSS:
#container {
white-space: nowrap;
width: 200px;
background: yellow;
border: 1px solid brown;
padding: 5px;
}
.child {
display: inline-block;
border: 2px solid red;
vertical-align: top;
white-space: normal;
}
http://jsfiddle.net/7e5TU/1/(如果问题没有立即出现,请更改文本的长度)。
我知道我可以用一张桌子来解决它,可能在左边的孩子上有一个浮点数,右边是“溢出:隐藏”,但我看不出为什么这不起作用。
谁能提供一些见解?我最想了解盒子模型中的什么导致了这种行为。谢谢!
【问题讨论】:
-
这是预期的行为。通过使用
white-space: nowrap;作为父级,您已经折叠了内联(-block)元素之间的空格。white-space对待孩子,而不是元素本身。 -
谢谢哈希姆。我理解这一点,并考虑一下我明白我试图实现的目标可能不合理。我认为让我失望的是正确的孩子确实包裹了文本,但是(正如我现在意识到的那样)被扩大到父母的宽度。
-
@HashemQolami “......空白对待孩子,而不是元素本身。”。这是不正确的 - 请参阅w3.org/TR/CSS2/text.html#white-space-prop“此属性声明如何处理元素内的空白。”!
-
@Netsurfer 没错,
white space inside the element表示内联节点之间,无论是文本本身还是内联(-block)元素。 -
@Sasha 是的,当涉及到
white-space时,您的 HTML 标记起着重要作用,因为任何换行符、空格、制表符或新行都会影响呈现。谷歌会给你很多关于这方面的资源。是的,扩展到父级宽度(减去父级的给定填充)是inline-block元素的正常行为。