Menu

Szerokość i wysokość w CSS: width, height, min, max i auto

width i height ustawiają rozmiar pudełka elementu. Poznaj rozmiary stałe i procentowe, dowiedz się, dlaczego height: 100% często nic nie robi, jak min-height i max-width tworzą elastyczne layouty, czym różni się auto od 100% i jak działają słowa kluczowe fit-content.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Ustawianie width i height

width i height ustawiają rozmiar obszaru treści elementu. Domyślnie padding i obramowanie są dodawane na zewnątrz tego rozmiaru.

Pudełko ma 260 na 100 pikseli: 240 na 80 treści plus 10px paddingu z każdej strony. Z box-sizing: border-box miałoby dokładnie 240 na 80; strona o modelu pudełkowym wyjaśnia oba przypadki.

Wartości

WartośćPrzykładZnaczenie
autowidth: autoWartość domyślna. Bloki wypełniają szerokość kontenera; wysokość dopasowuje się do treści
Długość300px, 20remStały rozmiar
Procent50%Szerokości bloku zawierającego (dla width) lub jego wysokości (dla height)
Jednostki viewportu100vh, 50vw, 100dvhOkna przeglądarki
min-contentwidth: min-contentTak wąsko, jak się da, decyduje najdłuższe słowo
max-contentwidth: max-contentTak szeroko jak treść w jednym wierszu
fit-contentwidth: fit-contentJak max-content, ale nigdy szerzej niż kontener

Dlaczego height: 100% nic nie robi

Procentowa height potrzebuje rodzica o określonej wysokości, od której można liczyć procent. Gdy rodzic ma wysokość auto, co jest normalną sytuacją, height: 100% dziecka też zachowuje się jak auto.

Pierwsze dziecko jest tylko tak wysokie jak jego tekst. Drugie wypełnia rodzica, bo rodzic ma wysokość. Żeby cały łańcuch na stronie działał z procentami, każdy przodek aż do html i body musi mieć wysokość, dlatego większość layoutów używa zamiast tego flexboxa lub grida: ich dzieci rozciągają się bez żadnych procentów.

min-height i max-width: rozmiary, które się dopasowują

Stałe rozmiary łatwo się psują: stała wysokość się przelewa, gdy tekst jest dłuższy niż zakładano, a stała szerokość jest za duża na telefon. Właściwości min- i max- ustawiają granice zamiast dokładnych rozmiarów.

WłaściwośćZnaczenie
min-widthNigdy węższy niż to
max-widthNigdy szerszy niż to
min-heightNigdy niższy niż to, ale może rosnąć
max-heightNigdy wyższy niż to (nadmiar treści wystaje)

Na ekranie węższym niż 360px, na przykład na telefonie, karty kurczą się razem z nim, bo max-width to tylko górny limit.

Gdy obowiązują jednocześnie rozmiar i granica, wygrywają granice: max-width wygrywa z width, a min-width wygrywa z max-width.

width: auto vs width: 100%

W elemencie blokowym zostawienie width na auto to prawie zawsze to, czego chcesz. auto mieści całe pudełko, razem z paddingiem i obramowaniem, w kontenerze. 100% sprawia, że treść jest tak szeroka jak kontener, a potem dodaje do tego padding i obramowanie:

width: 100% wciąż przydaje się w elementach, które domyślnie nie są blokami (<input>, <img>, inline-block), najlepiej razem z box-sizing: border-box.

Rozmiar dopasowany do treści: fit-content

Żeby blok był tylko tak szeroki jak jego tekst, bez zmieniania go na inline-block, użyj fit-content:

fit-content z margin-inline: auto wyśrodkowuje etykietę albo blok przypominający przycisk, który zachowuje dokładnie szerokość swojego tekstu.

Sekcje na pełną wysokość i jednostki viewportu

vh to 1% wysokości viewportu, a vw 1% jego szerokości. Na telefonach pasek adresu przeglądarki rośnie i maleje podczas przewijania, więc 100vh może być wyższe niż to, co widzisz. Dynamiczna jednostka dvh podąża za widocznym obszarem, a svh używa najmniejszej widocznej wysokości:

.hero {
  min-height: 100vh;  /* fallback */
  min-height: 100dvh; /* follows mobile toolbars */
}

W sekcjach na cały ekran używaj min-height, a nie height, żeby na małym ekranie z dużą ilością tekstu sekcja nadal mogła rosnąć. Stała wysokość z treścią, która się nie mieści, powoduje jej wylewanie się, a tym zajmuje się strona o overflow w CSS.

Częste błędy

  • height: 100% w rodzicu bez wysokości. Działa jak auto. Nadaj rodzicowi wysokość albo użyj flexa lub grida.
  • width: 100% plus padding. Element wystaje poza kontener. Zostaw szerokość bloków na auto albo użyj box-sizing: border-box.
  • Stałe wysokości w kontenerach z tekstem. Użyj min-height, żeby dłuższy tekst lub większa czcionka nie wylewały się na zewnątrz.
  • width na elemencie inline. <span> i <a> ignorują width i height; zmień je na inline-block lub block.
  • width: 1200px na kontenerze strony. Na każdym telefonie strona przewija się w bok. Użyj zamiast tego max-width: 1200px.

Najczęściej zadawane pytania

Dlaczego height: 100% nie działa?

Wysokość procentowa to procent wysokości rodzica i działa tylko wtedy, gdy ta wysokość jest określona. Jeśli rodzic ma wysokość auto (zależną od treści), procent jest traktowany jak auto. Nadaj rodzicowi wysokość albo użyj flexboxa lub grida, które rozciągają dzieci bez procentów.

Czym różni się width: 100% od width: auto?

W elemencie blokowym auto wypełnia kontener łącznie z paddingiem i obramowaniem. width: 100% ustawia szerokość treści na szerokość kontenera, więc przy domyślnym box-sizing: content-box każdy padding lub obramowanie sprawia, że element wystaje poza kontener.

Co robi min-height w CSS?

Ustawia najmniejszą wysokość, jaką może mieć element, i nadal pozwala mu rosnąć razem z treścią. min-height: 200px daje pustej karcie 200px, a karta z większą ilością tekstu robi się wyższa zamiast się przelewać, na co stała height by nie pozwoliła.

Czym różni się width od max-width?

width ustawia dokładny rozmiar. max-width ustawia górną granicę: element może być węższy, na przykład na telefonie, ale nigdy szerszy. width: 100%; max-width: 600px; wypełnia małe ekrany i zatrzymuje się na 600px na dużych.

Jak ustawić elementowi wysokość całego ekranu?

Użyj min-height: 100vh (albo 100dvh, żeby uwzględnić paski narzędzi przeglądarki na telefonie). min-height zamiast height pozwala sekcji urosnąć, jeśli jej treść jest wyższa niż ekran.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ