Ich habe eine <div>
mit Polsterung. Ich habe es eingestellt height: 0
und gegeben overflow: hidden
und box-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;
}
Soweit ich weiß, sollte dies das <div>
Verschwinden bringen.
Es ist jedoch weiterhin sichtbar (in Chrome 31 und Firefox 25 auf meinem Mac). Die height
Deklaration scheint trotz der box-sizing
Deklaration nicht für die Polsterung zu gelten .
Ist das erwartetes Verhalten? Wenn ja warum? Die MDN-Seite aufbox-sizing
scheint dieses Problem nicht zu erwähnen.
Soweit ich das beurteilen kann, ist die Spezifikation auch nicht so - sie lautet für mich, dass sowohl Breite als auch Höhe eine Polsterung enthalten sollten, wenn box-sizing: border-box
(oder tatsächlich padding-box
) eingestellt werden.
Antworten:
Die genaue Definition von
border-box
lautet:So können Sie die Höhe eine Breite Eigenschaften ändern aber
padding
und sichborder
nie ändern.Wenn
height
dann 0 ist, können Sie die Polsterung nicht im Inneren platzieren, da dies bedeutet, dass die Höhe negativ ist.quelle
Die Erklärung von
height: 0;
wird angewendet. Wenn Sie es beiheight: auto;
belassen, sehen Sie einen Unterschied von 20 Pixel (die Höhe der Linie mit "Hallo!"), Was eine Gesamthöhe von 100 Pixel ergibt. Wenn die Höhe auf Null gesetzt ist, ist sie nur 80 Pixel hoch:padding-top + padding-bottom = 80px
Die Antwort lautet also: Ja, es ist das erwartete Verhalten.
Sie können Breite und Höhe auf einen beliebigen Wert zwischen
0
und80px
einstellen (wenn Sie 40 Pixel Polsterung haben) und trotzdem die gleichen Abmessungen erhalten.Update: Wie Hardy bereits erwähnt hat, kann dieses Problem durch die Verwendung eines zusätzlichen Wrapper-Div umgangen werden.
Demo
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; }
quelle
box-sizing
dies keinen Einfluss auf die obere und untere Polsterung hat? Nur links und rechts?width: 0;
zusammen mitpadding: 40px;
unsichtbar entweder und zu machen. Breite, Breite und Höhe auf Null gesetzt, Sie haben immer noch eine 80 x 80 Pixel große Box.box-sizing: border-box
setzt der Browser die Größe des Inhaltsbereichs so, dass die Gesamtbreite oder -höhe des Elements so nahe wie möglich an der angegebenen Breite / Höhe liegt. Der Inhaltsbereich kann jedoch keine negative Dimension haben, sodass die Auffüllung immer sichtbar ist. Verstanden, danke.::before
und::after
Elementendisplay: block; height: 40px;
, um den gleichen Effekt wie beim Auffüllen zu erzielen, während die Möglichkeit beibehalten wird, die Höhe auf Werte festzulegen, die unter dem kombinierten vertikalen "Auffüllen" liegen.