Breite und Höhe festlegen
width und height legen die Größe der Inhaltsbox eines Elements fest. Standardmäßig kommen Padding und Rahmen außen hinzu.
Die Box ist 260 mal 100 Pixel groß: 240 mal 80 Inhalt plus 10px Padding auf jeder Seite. Mit box-sizing: border-box wäre sie genau 240 mal 80; die Seite zum Box-Modell erklärt beides.
Werte
| Wert | Beispiel | Bedeutung |
|---|---|---|
auto | width: auto | Der Standard. Blöcke füllen die Breite ihres Containers; die Höhe passt sich dem Inhalt an |
| Länge | 300px, 20rem | Eine feste Größe |
| Prozent | 50% | Von der Breite (bei width) oder Höhe (bei height) des umgebenden Blocks |
| Viewport-Einheiten | 100vh, 50vw, 100dvh | Vom Browserfenster |
min-content | width: min-content | So schmal wie möglich, das längste Wort entscheidet |
max-content | width: max-content | So breit wie der Inhalt in einer Zeile |
fit-content | width: fit-content | Wie max-content, aber nie breiter als der Container |
Warum height: 100% nichts bewirkt
Eine height in Prozent braucht ein Elternelement mit festgelegter Höhe, auf das sie sich beziehen kann. Ist die Höhe des Elternelements auto, was der Normalfall ist, verhält sich height: 100% am Kind ebenfalls wie auto.
Das erste Kind ist nur so hoch wie sein Text. Das zweite füllt sein Elternelement, weil das Elternelement eine Höhe hat. Damit eine ganze Seitenkette mit Prozentwerten funktioniert, braucht jeder Vorfahr bis hinauf zu html und body eine Höhe. Deshalb setzen die meisten Layouts stattdessen auf Flexbox oder Grid: Deren Kinder strecken sich ganz ohne Prozentwerte.
min-height und max-width: Größen, die nachgeben
Feste Größen gehen leicht kaputt: Eine feste Höhe läuft über, wenn der Text länger ist als erwartet, und eine feste Breite ist zu breit für ein Handy. Die Eigenschaften mit min- und max- legen Grenzen fest statt exakter Größen.
| Eigenschaft | Bedeutung |
|---|---|
min-width | Nie schmaler als das |
max-width | Nie breiter als das |
min-height | Nie niedriger als das, darf aber wachsen |
max-height | Nie höher als das (zusätzlicher Inhalt läuft über) |
Auf einem Bildschirm, der schmaler als 360px ist, etwa einem Handy, schrumpfen die Karten mit, weil max-width nur eine Obergrenze ist.
Gelten sowohl eine Größe als auch eine Grenze, gewinnen die Grenzen: max-width schlägt width, und min-width schlägt max-width.
width: auto vs. width: 100%
Bei einem Block-Element ist es fast immer richtig, width auf auto zu lassen. auto passt die ganze Box, inklusive Padding und Rahmen, in den Container. 100% macht den Inhalt so breit wie den Container und addiert dann Padding und Rahmen:
width: 100% bleibt nützlich an Elementen, die standardmäßig keine Blöcke sind (ein <input>, ein <img>, ein inline-block), am besten zusammen mit box-sizing: border-box.
An den Inhalt anpassen: fit-content
Um einen Block nur so breit wie seinen Text zu machen, ohne ihn auf inline-block umzustellen, nimmst du fit-content:
fit-content zusammen mit margin-inline: auto zentriert ein Label oder einen buttonartigen Block, der genau so breit bleibt wie sein Text.
Abschnitte in voller Höhe und Viewport-Einheiten
vh ist 1% der Viewport-Höhe und vw 1% seiner Breite. Auf Handys wächst und schrumpft die Adressleiste des Browsers beim Scrollen, sodass 100vh höher sein kann als das, was du siehst. Die dynamische Einheit dvh folgt dem sichtbaren Bereich, und svh nimmt die kleinste sichtbare Höhe:
.hero {
min-height: 100vh; /* fallback */
min-height: 100dvh; /* follows mobile toolbars */
}
Nimm für bildschirmfüllende Abschnitte min-height, nicht height, damit ein kleiner Bildschirm mit viel Text trotzdem einen Abschnitt bekommt, der wächst. Eine feste Höhe mit Inhalt, der nicht hineinpasst, läuft über, und darum kümmert sich die Seite zu CSS overflow.
Häufige Fehler
height: 100%in einem Elternelement ohne Höhe. Es verhält sich wieauto. Gib dem Elternelement eine Höhe oder nimm Flex oder Grid.width: 100%plus Padding. Das Element läuft aus seinem Container heraus. Lass die Breite von Blöcken aufautooder nimmbox-sizing: border-box.- Feste Höhen an Textcontainern. Nimm
min-height, damit längerer Text oder eine größere Schrift nicht herausläuft. widthan einem Inline-Element.<span>und<a>ignorierenwidthundheight; mach sie zuinline-blockoderblock.width: 1200pxan einem Seiten-Wrapper. Auf jedem Handy scrollt die Seite dann seitwärts. Nimm stattdessenmax-width: 1200px.
Häufig gestellte Fragen
Warum funktioniert height: 100% nicht?
Eine Höhe in Prozent ist ein Prozentsatz der Höhe des Elternelements und funktioniert nur, wenn diese Höhe festgelegt ist. Ist die Höhe des Elternelements auto (vom Inhalt bestimmt), wird der Prozentwert als auto behandelt. Gib dem Elternelement eine Höhe oder nimm Flexbox oder Grid, die Kinder ohne Prozentwerte strecken.
Was ist der Unterschied zwischen width: 100% und width: auto?
Bei einem Block-Element füllt auto den Container einschließlich Padding und Rahmen. width: 100% setzt die Inhaltsbreite auf die Breite des Containers, also lässt unter dem Standard box-sizing: content-box jedes Padding und jeder Rahmen das Element überlaufen.
Was macht min-height in CSS?
Es legt die kleinste Höhe fest, die ein Element haben darf, und lässt es trotzdem mit seinem Inhalt wachsen. min-height: 200px gibt einer leeren Karte 200px, und eine Karte mit mehr Text wird höher, statt überzulaufen, was eine feste height nicht erlauben würde.
Was ist der Unterschied zwischen width und max-width?
width legt eine exakte Größe fest. max-width legt eine Obergrenze fest: Das Element darf schmaler sein, zum Beispiel auf dem Handy, aber nie breiter. width: 100%; max-width: 600px; füllt kleine Bildschirme und hört auf großen bei 600px auf.
Wie mache ich ein Element so hoch wie den Bildschirm?
Nimm min-height: 100vh (oder 100dvh, damit die Symbolleisten mobiler Browser berücksichtigt werden). min-height statt height lässt den Abschnitt wachsen, wenn sein Inhalt höher ist als der Bildschirm.