Eine Alternative finden Sie unter Untergeordnete Elemente mit Rändern innerhalb von DIVs Sie können auch hinzufügen:
.parent { overflow: auto; }
oder:
.parent { overflow: hidden; }
Dies verhindert, dass die Ränder zu zusammenbrechen . Umrandung und Auffüllung tun dasselbe. Daher können Sie auch Folgendes verwenden, um einen Zusammenbruch des oberen Randes zu verhindern:
.parent {
padding-top: 1px;
margin-top: -1px;
}
2021 Update: wenn Sie bereit sind Verzicht auf IE11-Unterstützung können Sie auch das neue CSS-Konstrukt verwenden display: flow-root
. Siehe MDN-Webdokumente für alle Einzelheiten zu den Kontexten der Blockformatierung.
Update auf vielfachen Wunsch: Der Sinn des Kollabierens von Rändern ist der Umgang mit Textinhalten. Zum Beispiel:
h1, h2, p, ul {
margin-top: 1em;
margin-bottom: 1em;
outline: 1px dashed blue;
}
div { outline: 1px solid red; }
<h1>Title!</h1>
<div class="text">
<h2>Title!</h2>
<p>Paragraph</p>
</div>
<div class="text">
<h2>Title!</h2>
<p>Paragraph</p>
<ul>
<li>list item</li>
</ul>
</div>
Da der Browser die Ränder kollabiert, würde der Text so erscheinen, wie Sie es erwarten würden, und die <div>
Wrapper-Tags haben keinen Einfluss auf die Ränder. Jedes Element hat einen Abstand um sich herum, aber die Abstände werden nicht verdoppelt. Die Ränder der <h2>
y <p>
addieren sich nicht, sondern gleiten ineinander (sie fallen in sich zusammen). Das Gleiche gilt für die <p>
y <ul>
Element.
Leider kann diese Idee bei modernen Entwürfen ins Auge gehen, wenn man ausdrücklich einen Container will. Dies wird als neue Blockformatierungskontext in CSS-Sprache. Die overflow
oder Margen-Trick wird Ihnen das geben.
0 Stimmen
Auf mehreren Browsern oder nur auf einem bestimmten?
253 Stimmen
Dieses Verhalten macht überhaupt keinen Sinn. Der Rand soll innerhalb des Elternteils bleiben. Er darf das Elternteil nicht verschieben. Wer schreibt diese Regeln.
21 Stimmen
+2 für letzten Kommentar. ernsthaft diese Regel nervt mich. "In 60 % der Fälle funktioniert es jedes Mal" - das ist eine Marge.
45 Stimmen
Ich stimme den beiden letzten Kommentatoren vollkommen zu. Das ist Wahnsinn. Was ist interessant ist, dass das Hinzufügen einer 1px Grenze zu den übergeordneten macht es richtig funktionieren, aber das bedeutet, dass Sie eine Grenze haben ... wenn dies das erwartete Verhalten ist dann ist dies lächerlich
0 Stimmen
Bitte geben Sie weitere Informationen über die angewandte Spezifikation an. Ich danke Ihnen.
1 Stimmen
Das könnte auch Ihnen helfen :) stackoverflow.com/questions/35337043/
9 Stimmen
Das erinnert mich an die Regel für die Standardgröße von Boxen: " Wir müssen einen Karton versenden. Der Karton darf nicht größer als 100 cm sein. Wir brauchen 10 cm Polsterung im Inneren des Kartons, um sicherzustellen, dass unser Inhalt während des Versands nicht zerbricht. Machen wir den Karton 120 cm groß! " Das ist ein Witz.
0 Stimmen
Das liegt daran, dass die Gewinnspanne zusammenbricht. Hier ist eine weitere Illustration: stackoverflow.com/q/38679945/3597276
0 Stimmen
Ich danke euch für eure Kommentare. Ich lerne CSS nur für mich jetzt, und beobachten Sie das gleiche Verhalten mit Rand innerhalb Elternteil. Jetzt sehe ich, ich verstehe es richtig und Im nicht verrückt ;)