CSS-Methode zur Steuerung der Elementhöhe von unten nach oben und von oben nach unten

CSS-Methode zur Steuerung der Elementhöhe von unten nach oben und von oben nach unten

Beginnen wir die Diskussion mit einer häufig gestellten Frage: Wie verwende ich CSS, um die Höhe eines Elements auf die [Höhe des Browserinhaltsfensters] einzustellen?

Lösung 1: Machen Sie das Element bildschirmfüllend

In CSS ist vh eine spezielle Längeneinheit. Der Wert 100vh ist die [Höhe des Browserinhaltsfensters].

Daher sorgt height:100vh; dafür, dass das Zielelement die [Höhe des Browserinhaltsfensters] hat.

Lösung 2: Verwenden Sie eine Kaskadenhöhe von 100 %.

Mit Methode 1 kann nur ein Element auf die [Höhe des Browserinhaltsfensters] eingestellt werden. Was aber, wenn wir möchten, dass eine Reihe von Elementen gemeinsam die gesamte Höhe einnimmt?

Diese Anforderung kommt in Web-Anwendungsszenarien sehr häufig vor. Damit Ihre Webanwendung wie eine native Anwendung aussieht, hoffen wir, dass die Gesamtstruktur der Anwendung immer den gesamten Bildschirm ausfüllt, nicht mehr und nicht weniger, und dass keine Bildlaufleisten angezeigt werden. Wenn viel Inhalt vorhanden ist, der gescrollt werden muss, wird möglicherweise in einem Div innerhalb der Anwendung eine Bildlaufleiste angezeigt, der Hauptteil der Anwendung scrollt jedoch nicht.

Dies ist ein Beispiel für reduzierte Höhe, bei der die Gesamthöhe vollständig von der Höhe des Inhalts abhängt, was hässlich ist:

Dies ist ein Beispiel für eine zu große Höhe. Über der gesamten Anwendung wird eine Bildlaufleiste angezeigt, und die obere Leiste kann weggescrollt werden:

Wenn die gesamte Seite gescrollt werden kann, wird nach dem Herunterscrollen auch der Inhalt der oberen Leiste nach oben gescrollt und verschwindet. Dies kommt auf normalen Webseiten häufig vor, sollte in Webanwendungen jedoch nicht passieren.

Dies ist ein ganz normales Beispiel. Bei einer gut implementierten Webanwendung kann nicht die gesamte Anwendung gescrollt werden, das Inhaltsfenster in der Mitte ist jedoch scrollbar:

Lösung: Kontrollhöhe von oben nach unten

Die Gründe für einen Höheneinbruch und eine übermäßige Höhe sind eigentlich dieselben: Die Höhe des übergeordneten Elements wird durch die Höhe des untergeordneten Elements beeinflusst. Mit anderen Worten: Das übergeordnete Element wird durch das untergeordnete Element „erweitert“. Ein hohes Maß an Kontrolle erfolgt von unten nach oben.

Der Grund, warum die Höhe des übergeordneten Elements durch das untergeordnete Element gestreckt wird, besteht darin, dass der Standardwert für die Höhe auto ist und die Berechnungsmethode von „auto“ auf den untergeordneten Elementen basiert.

Um diese beiden Probleme zu lösen, muss die Richtung der Höhenregelung umgekehrt werden: Die Höhe wird von oben nach unten geregelt. Definieren Sie insbesondere entweder eine explizite Höhe für das Element oder legen Sie eine relative Höhe (in Prozent) im Verhältnis zur Höhe des „Großvaterelements“ fest.

  1. Definieren Sie eine explizite Höhe: Geben Sie dem Element einen expliziten Wert für seine Höhe, sodass seine Höhe nicht von seinen untergeordneten Elementen beeinflusst wird. Beispielsweise height:480px; oder height:100vh .
  2. Legen Sie eine relative Höhe im Verhältnis zur Höhe des „Großvaterelements“ fest: Die Höhe des Elements wird durch die Höhe des übergeordneten Elements bestimmt und wird daher nicht von seinen untergeordneten Elementen beeinflusst. Verwenden Sie hierzu prozentuale Höhen: height:100%; oder height:90%; .

Solange die beiden oben genannten Punkte flexibel verwendet werden, können Entwickler die Höhe jedes Elements der gesamten Anwendung steuern.

Im obigen Web-Anwendungsbeispiel lautet die Lösung:

Stellen Sie zunächst die Höhe des <html>-Elements auf 100 % ein, wodurch die Höhe des HTML-Elements genau der Höhe des Ansichtsfensters (Inhaltsfensters) entspricht. Stellen Sie anschließend die Höhe des Body-Elements auf 100 % ein, wodurch die Höhe des Body-Elements genau der Höhe des HTML-Elements entspricht (die wiederum der Höhe des Ansichtsfensters entspricht).
Fahren Sie auf diese Weise von oben nach unten fort, bis Sie das Element erreichen, das den Bildschirm ausfüllen soll, und stellen Sie seine Höhe auf 100 % ein, sodass seine Höhe der Höhe des Ansichtsfensters entspricht.

Dies ist ein Sonderfall von Top-Down. Tatsächlich können Sie beim Einstellen der Höhe von oben nach unten einen festen Wert (100 Pixel) oder eine andere prozentuale Höhe (80 %) entsprechend Ihren eigenen Layoutanforderungen festlegen.

Diese Methode ist tatsächlich viel problematischer, als die direkte Festlegung von height:100vh; für das Zielelement. Diese Methode hat jedoch einen Vorteil: Bei diesem Vorgang können Sie die Höhe aller Vorgängerelemente steuern. Solange Sie für ein untergeordnetes Element nicht absichtlich eine Höhe festlegen, die größer als die des übergeordneten Elements ist, kann jedes übergeordnete Element das untergeordnete Element aufnehmen, was in den meisten Fällen auch erwünscht ist. Es wird kein Problem wie „die Höhe des untergeordneten Elements beträgt 100 Pixel, aber die Höhe des übergeordneten Elements wird nicht erweitert“ geben.

Wenn Sie nur die height:100vh; und die Höhe des übergeordneten Elements von oben nach unten bestimmt wird (nicht von untergeordneten Elementen beeinflusst), behält das übergeordnete Element seine ursprüngliche Höhe bei und wird nicht erweitert, und es kommt zu einem Überlauf. Zu diesem Zeitpunkt tritt das Problem „Die Höhe des untergeordneten Elements beträgt xxx, aber die Höhe des übergeordneten Elements wird nicht erweitert“ auf.

Praktische Tipps von oben nach unten: Lassen Sie untergeordnete Elemente den verbleibenden Bereich des übergeordneten Elements ausfüllen

Der Top-Down-Ansatz hat einen sehr praktischen Trick:

<html>
  <Text>
    <Kopfzeile></Kopfzeile>
    <div Klasse="Inhalt"></div>
  </body>
</html>

Wenn die Höhe von <html> und <body> bereits bestimmt ist (100 % Ansichtsfenster) und die Höhe der Kopfzeile ebenfalls bestimmt ist (64 px), wie können wir dann dafür sorgen, dass div.content unter der Kopfzeile den verbleibenden Bereich des übergeordneten Elements ausfüllt? Die Antwort ist auch sehr einfach: Setzen Sie einfach div.content { height: 100%; } . 100 % werden relativ zur verbleibenden verfügbaren Höhe des übergeordneten Elements berechnet, sodass dieses CSS dafür sorgt, dass div.content den verbleibenden Bereich des übergeordneten Elements ausfüllt.
So wird der Effekt in dieser Abbildung erzielt:

Top-down vs. Bottom-up

Dies bedeutet nicht, dass ein Top-down-Ansatz unbedingt besser ist als ein Bottom-up-Ansatz.

Der Vorteil des Top-Down-Ansatzes besteht darin, dass die Höhe des Nachfolgerelements entsprechend bestimmt wird, solange die Höhe des Vorgängerelements definiert ist.

Der Vorteil von Bottom-Up besteht darin, dass die Höhe des übergeordneten Elements je nach Bedarf automatisch erweitert werden kann und alle untergeordneten Elemente einfach umschlossen werden.

In einer Webanwendung ist es häufig notwendig, diese beiden Methoden zu mischen.

Vorsicht vor Inhaltsüberlauf

Beachten Sie, dass ein Überlauf auftritt, wenn das Inhaltsfeld eines übergeordneten Elements nicht genügend Platz für ein untergeordnetes Element bietet.

Beim Mischen von Top-Down- und Bottom-Up-Ansätzen kann folgendes Problem auftreten:

Das A-Element ist das übergeordnete Element des B-Elements. Die Höhe von Element A wird von oben nach unten bestimmt (z. B. height:80% ), und die Höhe von Element B wird von unten nach oben bestimmt ( height:auto ). Wenn die untergeordneten Elemente von B die Höhe von B erweitern und die Höhe des Inhaltsfelds von A überschreiten, kommt es zu einem Überlauf.

Erwägen Sie zu diesem Zeitpunkt zwei Optionen:

  1. Begrenzen Sie die Höhe von B, d. h. geben Sie für die Höhe des B-Elements einen Wert an, der nicht größer ist als die Höhe des übergeordneten Elements. Beispielsweise height:100px oder height:100% .
  2. Wenn Sie den Inhalt von B im A-Element anzeigen möchten, legen Sie overflow:auto für A fest. Auf diese Weise können größere Inhalte durch Bildlaufleisten auf begrenztem Raum untergebracht werden.

Das Chatfenster ist ein Beispiel für overflow:auto

Verweise

https://stackoverflow.com/questions/7357818/wie-kann-ein-html-element-mit-css-100-der-verbleibenden-bildschirmhöhe-ausfüllen
https://stackoverflow.com/questions/1575141/wie-man-ein-div-100-höhe-des-browser-window-machen-kann
https://stackoverflow.com/questions/31893330/html-and-body-elements-height/31895805#31895805
https://www.w3.org/TR/2011/REC-CSS2-20110607/visudet.html#root-height

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

<<:  Detaillierte Erläuterung des Implementierungsprinzips der Transaktionsisolationsstufe in MySQL

>>:  Fassen Sie die häufigsten Anwendungsprobleme von XHTML-Code zusammen

Artikel empfehlen

Auswahl und Überlegungen zur MySQL-Datensicherungsmethode

Inhaltsverzeichnis 1. rsync, cp Dateien kopieren ...

So verarbeiten Sie sehr große Formularbeispiele mit Vue+ElementUI

Aufgrund von Geschäftsanpassungen im Unternehmen ...

Wie viele Ports kann ein Linux-Server maximal öffnen?

Inhaltsverzeichnis Hafenbezogene Konzepte: Bezieh...

MySQL-Serie 9 MySQL-Abfrage-Cache und -Index

Inhaltsverzeichnis Tutorial-Reihe 1. MySQL-Archit...

CSS-Implementierungscode für verzerrte Schatten

Dieser Artikel stellt den Implementierungscode vo...

So installieren und konfigurieren Sie den Postfix-Mailserver unter CentOS 8

Postfix ist ein kostenloser und quelloffener MTA ...

Docker Compose-Installationsmethoden in verschiedenen Umgebungen

1. Online-Installation Derzeit habe ich nur die O...

5 Dinge, die beim Schreiben von React-Komponenten mit Hooks zu beachten sind

Inhaltsverzeichnis 01. Verwenden Sie useState, we...

Echtzeitaktualisierung einer langen Verbindung auf der Vue+WebSocket-Seite

In letzter Zeit muss das Vue-Projekt die Daten in...

Fehler bei der Eingabe chinesischer Zeichen im Flex-Programm Firefox

In niedrigeren Versionen von Firefox können keine ...

jQuery realisiert den Scroll-Effekt von Tabellenzeilendaten

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Analyse des langsamen Abfrageproblems beim Senden von MySQL-Daten

Anhand eines Beispiels habe ich Ihnen die Lösung ...