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ład | Znaczenie |
|---|---|---|
auto | width: auto | Wartość domyślna. Bloki wypełniają szerokość kontenera; wysokość dopasowuje się do treści |
| Długość | 300px, 20rem | Stały rozmiar |
| Procent | 50% | Szerokości bloku zawierającego (dla width) lub jego wysokości (dla height) |
| Jednostki viewportu | 100vh, 50vw, 100dvh | Okna przeglądarki |
min-content | width: min-content | Tak wąsko, jak się da, decyduje najdłuższe słowo |
max-content | width: max-content | Tak szeroko jak treść w jednym wierszu |
fit-content | width: fit-content | Jak 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-width | Nigdy węższy niż to |
max-width | Nigdy szerszy niż to |
min-height | Nigdy niższy niż to, ale może rosnąć |
max-height | Nigdy 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 jakauto. Nadaj rodzicowi wysokość albo użyj flexa lub grida.width: 100%plus padding. Element wystaje poza kontener. Zostaw szerokość bloków naautoalbo użyjbox-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. widthna elemencie inline.<span>i<a>ignorująwidthiheight; zmień je nainline-blocklubblock.width: 1200pxna kontenerze strony. Na każdym telefonie strona przewija się w bok. Użyj zamiast tegomax-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.