为什么即使使用box-sizing:border-box,height:0也不会隐藏我填充的<div>?


77

我有一个<div>填充。我已将其设置为height: 0,并给了overflow: hiddenbox-sizing: border-box

的HTML

<div>Hello!</div>

的CSS

div {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    height: 0;
    overflow: hidden;

    padding: 40px;

    background: red;
    color: white;
}

http://jsfiddle.net/FA29u/2/

据我了解,这应该会使它<div>消失。

但是,它仍然可见(在Mac上的Chrome 31和Firefox 25中)。尽管height声明,该声明似乎并不适用于填充box-sizing

这是预期的行为吗?如果是这样,为什么?MDN页面上box-sizing似乎没有提到此问题。

据我所知,规范也没有—它使我读起来像宽度和高度都应在box-sizing: border-box(或实际上padding-box)设置时包含填充。


2
是的,如果您想在现实世界中使用这种div,则应在其中使用额外的包装器DIV并将其填充到其中。
哈迪

Answers:


46

的确切定义border-box是:

也就是说,在元素上指定的任何填充或边框都将在此指定的宽度和高度内进行布局和绘制。内容的宽度和高度是通过从指定的“宽度”和“高度”属性中减去各边的边框和填充宽度来计算的。

所以你修改高度的宽度属性,但paddingborder不会改变。

由于内容的宽度和高度不能为负([CSS21],第10.2节),因此此计算的下限为0。

然后,如果height为0,则无法使填充位于内部,因为这意味着高度将为负数。


4
,知道了 这就说得通了。
Paul D. Waite 2013年

精彩的解释。,谢谢。试图通过将宽度0-SIZE应用于左侧面板的面板/ CANVAS布局中的左侧面板的增长/收缩动作。这会
有所

13

应用的声明height: 0;。如果将其保留在height: auto;,您会看到20px的差异(带有“ Hello!”的行的高度),使其总高100px。高度设为零时,高度只有80px:padding-top + padding-bottom = 80px

答案是:是的,这是预期的行为。

您可以将width和height设置为介于0和之间的任何值80px(如果您有40px的填充),并且仍然获得相同的尺寸。

更新:如Hardy所述,使用附加的包装div可解决此问题。

演示版

HTML:

<div class="div-1">
    <div class="div-2">
        Hello!
    </div>
</div>

CSS:

.div-1 {
    padding: 40px;

    /* This is not visible! */
    border: 1px solid dashed;
}
.div-2 {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    height: 0px;
    width: 0px;
    background: red;
    color: white;
    overflow: hidden;
}

1
因此,您是说这box-sizing对顶部和底部填充没有任何影响?只有左右?
Paul D. Waite 2013年

1
你不能设置width: 0;沿padding: 40px;任,并使其不可见。宽度width和height设置为零,您仍然会有一个80px x 80px的大框。
kleinfreund

1
啊哈,我明白了。因此,使用box-sizing: border-box,浏览器将设置内容区域的大小,以使元素的整体宽度或高度尽可能接近所提供的宽度/高度尺寸。但是内容区域不能为负数,因此填充始终可见。收到了。谢谢。
Paul D. Waite 2013年

3
该定义是有道理的,但是不幸的是,如果有填充,无论如何,它都无法将结果框设置为零。
马修·迪恩

5
另一种解决方法是添加::before::after元素display: block; height: 40px;以创建与填充相同的效果,同时保留将高度设置为小于组合垂直“填充”值的能力。
Jon z
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.