Relative Angaben für die Maße von Layoutblöcken: CSS height-Probleme und die Lösung mit dvh

Wenn es um responsives Design geht, sind relative Maße für die Breite eines Layouts in der Regel unkompliziert. Für die Höhe sieht das jedoch anders aus. height="100%" führt selten zum gewünschten Ergebnis und selbst vh="100%"braucht oft Nachhilfe. Hier kommt dvh – die dynamische Höhe – ins Spiel.

CSS-Maße in %-Angaben

Ein Element mit height="100%" stellt oft einen klassischen Problemfall dar. Das CSS-Koordinatensystem ist relativ, wenn ein Element nicht mit position: absolute festgelegt ist.

Beispiel:


<style>
body {
background: red;
margin: 0;
height: 100%;
}
.fullscreen {
background: blue;
height: 100%;
}
</style>

<body>
<div class="fullscreen">
Dieser Block sollte die gesamte Höhe einnehmen.
</div>
</body>

Problem: Das body-Element nimmt nur die Höhe seines Inhalts an, also des lachsroten Blocks. Per Vorgabe haben die meisten Elemente eine Höhe von auto und nehmen den minimalen Platz ein, den sie für die Anzeige des Inhalts brauchen. Das height="100%" im .fullscreen-Element wird also ignoriert, da es sich auf die Höhe des umfassenden Elements bezieht.

Höhe in vh angeben

Eine weitere Maßeinheit ist vh – die Höhe des Viewports. Mit 100vh würde das Element auf dem Desktop-Monitor tatsächlich so hoch wie das Dokument im Browserfenster. Auf mobilen Geräten, insbesondere bei scrollbaren Seiten, entstehen jedoch Probleme, da die Browser die Höhe des Viewports über die Adressleiste hinaus ausdehnen, um mehr Platz für den Inhalt bereitzustellen.

Beispiel:


<style>
body {
background: red;
margin: 0;
}
.fullscreen {
background: blue;
height: 100vh;
}
</style>

<body>
<div class="fullscreen">
Dieser Block nimmt 100vh ein.
</div>
</body>

Problem: Auf mobilen Geräten kann das 100vh dazu führen, dass der Inhalt nach oben oder unten gescrollt werden kann, was zu einem unschönen Layout führt, wenn die Adressleiste ein- oder ausgeblendet wird.

Dynamische Höhe mit dvh

Um dieses Problem zu lösen, gibt es die neue CSS-Einheit dvh – die dynamische Höhe. Diese Einheit passt die Höhe des Elements dynamisch an, abhängig davon, ob die Adressleiste des Browsers sichtbar ist oder nicht.

Beispiel:


<style>
body {
background: red;
margin: 0;
}
.fullscreen {
background: blue;
height: 100dvh;
}
</style>

<body>
<div class="fullscreen">
Dieser Block nimmt 100dvh ein.
</div>
</body>

Mit height: 100dvh passt sich das .fullscreen-Element dynamisch der Höhe des Viewports an, unabhängig davon, ob die Adressleiste sichtbar ist oder nicht. Neben dvh gibt es auch svh für die kleinere bzw. kürzere Höhe des Viewports und lvh für die größere Höhe.

CSS Probleme und die Lösung mit DVH

Kurzfassung

Die Verwendung von relativen Maßeinheiten wie %vh, und dvh kann im Layout-Design hilfreich sein, aber jede hat ihre eigenen Herausforderungen und Anwendungsfälle. Mit der Einführung von dvh hast du eine zuverlässige Möglichkeit, die Höhe von Elementen auf verschiedenen Geräten dynamisch und responsiv anzupassen.

Kann ich helfen?