Untergeordnete Elemente mit Rändern innerhalb von DIVs

Lesezeit: 3 Minuten

Benutzer-Avatar
myffisch

Ich brauche zwei aufeinanderfolgende div Elemente (mit Hintergründen) nahtlos untereinander berühren. Dieses Layout bricht jedoch, wenn ich ein Kind setze p Element in den Boden div. Die Ränder der p Element erzwingt eine Lücke zwischen beiden div Elemente. Das ist ein seltsames Verhalten, da ich die Marge von der erwarte p im Inhalts- und Hintergrundbereich der zu bleiben div. Es wird auf Firefox, Chrome und IE 8 auf die gleiche Weise gerendert.

<div style="background: #ccccff">Top Div</div>
<div style="background: #ffcccc"><p>Bottom Div</p></div>

So sieht es aus.

Bild zeigt das obere Div (in Blau), dann eine weiße Lücke, dann das untere Div (in Pink).  Der weiße Spalt sollte nicht vorhanden sein.

Ich könnte dies beheben, indem ich die Ränder in Polsterungen für die ändere p -Element, aber dann müsste ich dies auch mit Header-Elementen, Listenelementen und jedem anderen Element tun, das ich am Anfang von a verwenden möchte div. Das ist nicht wünschenswert.

Könnte mich jemand aufklären: Welche Einschränkung des Box-Modells vermisse ich? Gibt es eine einfache Möglichkeit, dies zu beheben, vorzugsweise durch Ändern des Stils der div?

Hinzufügen overflow: hidden oder overflow: auto zum div

  • Funktioniert nicht, wenn das übergeordnete Element ein anderes Dropdown-Div hat, wie es in meinem Fall der Fall ist (

    – ruruskyi

    13. August 2012 um 11:34 Uhr

Das ist die erwartetes Verhalten*. Es gibt ein paar Möglichkeiten, es zu umgehen. Wenn Sie die Divs floaten, enthalten sie die Ränder der untergeordneten Elemente und verhindern, dass der Rand zusammenfällt. Ein anderer Ansatz besteht darin, den Divs einen Rahmen oder eine Auffüllung hinzuzufügen.

* Die Ränder des div und des p “verbinden sich zu einem einzigen Rand”, obwohl sie verschachtelt sind, weil sie benachbarte Ränder ohne Polsterung oder Grenze dazwischen haben.

  • Ja, das sieht nach zusammenbrechenden Grenzen aus. Ich finde es trotzdem irgendwie eigenartig. Danke für die Warnung.

    – myffisch

    10. Dezember 2009 um 6:43 Uhr

  • Das erwartete Verhalten in Browsern ist allzu oft unerwartet

    – Kevin Laity

    17. November 2011 um 16:21 Uhr

Lösung 1

Fügen Sie overflow: hidden/auto zum enthaltenden div hinzu, um zu verhindern, dass der Rand zusammenbricht.

Lösung 2

Fügen Sie dem enthaltenden div eine positive Auffüllung und dem inneren Element einen gleichen negativen Rand hinzu

Neue Lösung

Fügen Sie dem enthaltenden div eine Auffüllung von 0,01 Pixel hinzu. Dadurch wird verhindert, dass der Rand zusammenfällt, es wird jedoch kein negativer Rand für das innere Element benötigt.

  • Auf Chrome funktioniert 0,01 px für mich am dichtesten, aber 0,1 px tut es. Ich kann den Reiz dieser Lösung gegenüber der Verwendung von Overflow sehen, aber hat sie jemand ausführlich browserübergreifend getestet?

    – Evanss

    24. März 2014 um 15:57 Uhr

  • Für Chrome: padding-top: 0.02px;

    – Giacomo Paita

    13. August 2015 um 15:09 Uhr

Festlegen einer positiven Polsterung und einer entsprechenden negativen Marge auf der div element scheint das Problem zu beheben, obwohl ich nicht weiß warum.

<div style="background: #ccccff">Top Div</div>
<div style="background: #ffcccc; padding: 1px; margin: -1px"><p>Bottom Div</p></div>

1091230cookie-checkUntergeordnete Elemente mit Rändern innerhalb von DIVs

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy