Ich habe ein div-Element auf meiner Seite, dessen Höhe auf 100% eingestellt ist. Die Körpergröße ist ebenfalls auf 100% eingestellt. Das innere Div hat einen Hintergrund und all das und unterscheidet sich vom Körperhintergrund. Dies funktioniert, um die Div-Höhe auf 100% der Browser-Bildschirmhöhe zu bringen, aber das Problem ist, dass ich Inhalte in diesem Div habe, die sich vertikal über die Browser-Bildschirmhöhe hinaus erstrecken. Wenn ich nach unten scrolle, endet das div an dem Punkt, an dem Sie mit dem Scrollen der Seite beginnen mussten, aber der Inhalt läuft darüber hinaus über. Wie kann ich dafür sorgen, dass der Div immer ganz nach unten geht, um dem inneren Inhalt zu entsprechen?
Hier ist eine Vereinfachung meines CSS:
body {
height:100%;
background:red;
}
#some_div {
height:100%;
background:black;
}
Sobald ich die Seite scrolle, endet die Schwärze und der Inhalt fließt auf den roten Hintergrund. Es scheint keine Rolle zu spielen, ob ich die Position auf #some_div auf relativ oder absolut setze, das Problem tritt so oder so auf. Der Inhalt in #some_div ist größtenteils absolut positioniert und wird dynamisch aus einer Datenbank generiert, sodass seine Höhe nicht im Voraus bekannt ist.
Bearbeiten: Hier ist ein Screenshot des Problems:
overflow: hidden;
,overflow: scroll;
usw.).Antworten:
Folgendes sollten Sie hauptsächlich im CSS-Stil tun
div
Und nicht anfassen
height
quelle
height: 100%
,html, body
damit es die Höhe ausfüllt, wenn nicht genügend Inhalt vorhanden ist.display: block;
benötigt? Divs sind bereits Elemente auf Blockebene.
entfernen Sie diese. Versuchen Sie auch, die Zeilenhöhe anzupassen. Zum Beispiel habe ich gesagtline-height: 0
, weil ich keinen Text brauchte, nur um ein Bild zu zeigen.Stellen Sie das
height
aufauto
undmin-height
auf ein100%
. Dies sollte es für die meisten Browser lösen.quelle
height
ist100%
undmin-height
istauto
- ich würde erwarten, dass diese in diesem Fall austauschbar sind, aber es sieht so aus, als ob sie es nicht sind.Normalerweise tritt dieses Problem auf, wenn die untergeordneten Elemente eines übergeordneten Div schweben. Hier ist die neueste Lösung des Problems:
Schreiben Sie in Ihre CSS-Datei die folgende Klasse namens .clearfix zusammen mit dem Pseudo-Selektor : after
Fügen Sie dann in Ihrem HTML-Code die .clearfix-Klasse zu Ihrem übergeordneten Div hinzu. Beispielsweise:
Es sollte immer funktionieren. Sie können den Klassennamen als .group anstelle von .clearfix aufrufen , da dadurch der Code semantischer wird. Beachten Sie, dass es nicht erforderlich ist, den Punkt oder sogar ein Leerzeichen im Wert von Content zwischen dem doppelten Anführungszeichen "" einzufügen. Auch Überlauf: auto; Möglicherweise wird das Problem behoben, es verursacht jedoch andere Probleme wie das Anzeigen der Bildlaufleiste und wird nicht empfohlen.
Quelle: Blog von Lisa Catalano und Chris Coyier
quelle
Wenn Sie nur die verlassen
height: 100%
und verwendendisplay:block;
dasdiv
wird innerhalb der so viel Platz wie der Inhalt übernehmendiv
. Auf diese Weise bleibt der gesamte Text im schwarzen Hintergrund.quelle
display: block
? Ich sehe das nicht in deiner Frage.float: none;
Verwenden Sie stattdessenclear:both;
. Es macht das gleiche, ist aber eher browserübergreifend, @RonnieVDPoelDiese Frage mag alt sein, verdient aber ein Update. Hier ist eine andere Möglichkeit, dies zu tun:
quelle
Versuche dies:
IE6 und frühere Versionen unterstützen die Eigenschaft min-height nicht.
Ich denke, das Problem ist, dass wenn Sie dem Körper sagen, dass er eine Höhe von 100% haben soll, sein Hintergrund nur so hoch sein kann wie die Höhe eines Browser- "Ansichtsfensters" (der Anzeigebereich, der die Symbolleisten & Statusleisten & Menüleisten des Browsers und die ausschließt Fensterkanten). Wenn der Inhalt größer als ein Ansichtsfenster ist, wird die dem Hintergrund zugewiesene Höhe überlaufen.
Diese Eigenschaft für die minimale Höhe des Körpers sollte den Hintergrund so erzwingen, dass er mindestens so hoch wie ein Ansichtsfenster ist, wenn Ihr Inhalt nicht eine ganze Seite bis zum Ende ausfüllt, sondern ihn auch nach unten wachsen lässt, um mehr Inneninhalt zu erfassen.
quelle
Alte Frage, aber in meinem Fall fand
position:fixed
ich es für mich gelöst. Meine Situation könnte jedoch etwas anders gewesen sein. Ich hatte ein überlagertes Halbtransparentdiv
mit einer Ladeanimation, die ich beim Laden der Seite anzeigen musste. Mitheight:auto / 100%
odermin-height: 100%
beides füllte also das Fenster, aber nicht den Off-Screen-Bereich. Wenn Sieposition:fixed
diese Überlagerung mit dem Benutzer erstellen, wird der sichtbare Bereich immer abgedeckt und meine Animation zum Vorladen wird auf dem Bildschirm zentriert.quelle
Fügen Sie diese beiden Zeilen einfach in Ihre CSS-ID #some_div ein
Danach bekommen Sie, wonach Sie suchen!
quelle
Ich bin mir nicht ganz sicher, ob ich die Frage verstanden habe, da dies eine ziemlich einfache Antwort ist, aber hier geht es weiter ... :)
Haben Sie versucht, die Überlaufeigenschaft des Containers auf sichtbar oder automatisch zu setzen?
Wenn Sie dies hinzufügen, wird der schwarze Container auf die Größe gebracht, die Ihr dynamischer Container benötigt. Ich bevorzuge sichtbar gegenüber Auto, weil Auto mit Bildlaufleisten zu kommen scheint ...
quelle
Moderne Browser unterstützen die Einheit "Ansichtsfensterhöhe". Dadurch wird das div auf die verfügbare Ansichtsfensterhöhe erweitert. Ich finde es zuverlässiger als jeder andere Ansatz.
quelle
Auch Sie können so machen
Dies schließt jedes dynamische Div gemäß dem Inhalt ein. Angenommen, Sie haben ein gemeinsames Div mit Klasse, wodurch die Höhe jedes dynamischen Divs entsprechend dem Inhalt erhöht wird
quelle
Sie können auch verwenden
meins hat damit gearbeitet
quelle
OVERLAY OHNE POSITION: FEST
Eine wirklich coole Art, wie ich dies für ein aktuelles Menü herausgefunden habe, war das Einstellen des Körpers auf:
und setzen Sie Ihre Wrapper-Klasse wie folgt:
Dies bedeutet, dass Sie die Position nicht festlegen müssen und trotzdem scrollen können. Ich habe dies zum Überlagern von Menüs verwendet, die WIRKLICH groß sind.
quelle
benutze flex
quelle
Ok, ich habe so etwas versucht:
Körper (normal)
Es ist nicht die genaue Art, es zu schreiben, aber wenn Sie das Haupt-Div als Tabelle anzeigen, wird es erweitert und dann habe ich Bildlaufleisten implementiert.
quelle