Verhindert, dass sich das div-Element außerhalb des übergeordneten Elements ausdehnt?

10

Jfiddle zeigt das Problem: Ссылка

Beachten Sie, wie sich das rosa div über die Grenzen des blauen div hinaus ausdehnt.

Ich versuche, ein einfaches Layout zu erstellen, wo ich zwei verschachtelte divs habe, die bis zu einer bestimmten Höhe expandieren (100% der Fensterhöhe ist in diesem Fall erwünscht), wobei das innere Div-Scrolling nach Bedarf weitere Inhalte anzeigt . Wenn der Inhalt also kurz ist, werden die divs alle auf die Größe des Inhalts reduziert, aber wenn sie lang ist, werden sie nur zu einem Punkt erweitert, zu welchem ​​Zeitpunkt das innere div scrollen sollte.

Das HTML:

%Vor%

Und das CSS:

%Vor%

Beachten Sie, dass der Effekt der gleiche ist, wenn die maximale Höhe von topDiv auf einen Prozentsatz eingestellt ist. In diesem Szenario kann ich den maximalen Wert von insideDiv nicht einfach auf einen entsprechend kleineren Wert setzen. Auch das Festlegen der overflow -Eigenschaft auf topDiv auf hidden funktioniert nicht - der zusätzliche Inhalt in insideDiv wird einfach vollständig ausgeblendet und ist dann nicht durch Scrollen zugänglich.

Wie kann ich die Höhe von insideDiv begrenzen, um die Höhe von topDiv nicht zu überschreiten, während insideDiv bei Bedarf zusätzliche Inhalte scrollt?

    
ibrewster 13.04.2016, 20:35
quelle

4 Antworten

14

Sie können die #insideDiv max-height CSS-Eigenschaft von 100% in inherit ändern. Also wird diese Regel so sein:

max-height: inherit;

Sie könnten auch box-sizing:border-box; hinzufügen, wenn Sie diese Route gehen, da dies erlaubt, dass sich die Grenzen oder das Auffüllen von #insideDiv wie gewünscht (wahrscheinlich) verhalten.

Die Ursache dieses Problems ist, dass max-height:100%; nach dem height des Elternteils sucht, nicht nach seinem max-height , wie groß es sein darf. Somit haben Sie das klassische Problem der nicht-deterministischen relativen Höhe. Wenn Sie dem Elternelement einen deterministischen height (statt max-height ) geben, kann 100% deterministisch auflösen.

    
Arkoudinos 13.04.2016, 20:39
quelle
2

Probieren Sie dieses Flexbox-Layout aus. Es funktioniert entweder mit fester oder prozentualer Höhe / maximaler Höhe.

jsFiddle

%Vor% %Vor%
    
Stickers 13.04.2016 22:41
quelle
1

Sie müssen overflow-y:auto; in #topDiv

verschieben

Sie können dann Ihre Werte für die maximale Höhe beliebig ändern und sie werden wie erwartet funktionieren.

    
Blake Neal 13.04.2016 20:39
quelle
-1

Ausgehend von meinem Verständnis Ihrer Frage. Dieser Code sollte sehr gut funktionieren!

%Vor% %Vor%

Hier ist auch ein JSFiddle mit dem Code.

    
Emmet Arries 13.04.2016 20:41
quelle

Tags und Links