6.2. Szerokość i wysokość (width, height)
width, height)
Wprowadzenie: Kontrola wymiarów elementu
Właściwości width (szerokość) i height (wysokość) w CSS pozwalają jawnie ustawić wymiary **obszaru treści (content area)** elementu. Jak pamiętamy z poprzedniej lekcji, domyślnie (przy box-sizing: content-box;) te właściwości nie obejmują paddingu, obramowania ani marginesów.
Kontrola wymiarów jest fundamentalna przy tworzeniu layoutów, określaniu rozmiarów obrazków, kontenerów i innych bloków na stronie.
Wartości dla width i height
Właściwości width i height mogą przyjmować różne wartości:
auto: Jest to wartość domyślna dla większości elementów blokowych. Przeglądarka oblicza szerokość lub wysokość automatycznie na podstawie zawartości elementu, dostępnej przestrzeni lub innych właściwości CSS.- Dla
width, element blokowy domyślnie zajmuje 100% dostępnej szerokości kontenera nadrzędnego. - Dla
height, wysokość dopasowuje się do zawartości elementu.
- Dla
<długość>: Ustawia stałą szerokość lub wysokość za pomocą jednostek długości (np.px,em,rem,vw,vh)..box { width: 300px; height: 150px; } .sidebar { width: 25rem; } .full-screen-section { width: 100vw; /* 100% szerokości viewportu */ height: 100vh; /* 100% wysokości viewportu */ }<procent>: Ustawia szerokość lub wysokość jako procent wymiarów **kontenera nadrzędnego (containing block)**.width: 50%;oznacza, że element zajmie połowę szerokości swojego rodzica.height: 100%;oznacza, że element spróbuje zająć całą wysokość rodzica. Uwaga: Aby procentowa wysokość działała, rodzic musi mieć jawnie zdefiniowaną wysokość (lub wysokość wynikającą z innych mechanizmów, np. Flexbox/Grid).
.parent { width: 600px; height: 400px; /* Rodzic musi mieć określoną wysokość dla height: 100% dziecka */ border: 1px solid gray; } .child { width: 75%; /* 75% z 600px = 450px */ height: 50%; /* 50% z 400px = 200px */ background-color: lightcoral; }max-content: Szerokość/wysokość dopasowuje się do największej niełamanej szerokości/wysokości treści.min-content: Szerokość/wysokość dopasowuje się do najmniejszej możliwej szerokości/wysokości treści (np. szerokość najdłuższego słowa).fit-content(<długość>): Stara się dopasować do treści, ale nie przekracza podanej długości.
Wartości max-content, min-content i fit-content są nowsze i mogą nie być w pełni wspierane we wszystkich scenariuszach lub starszych przeglądarkach.
Właściwości min-* i max-*
Oprócz width i height, istnieją bardzo przydatne właściwości pozwalające ustawić minimalne i maksymalne wymiary elementu:
min-width: Minimalna szerokość elementu. Element nie będzie węższy niż ta wartość, nawet jeśli jego zawartość lub wartośćwidthsugerowałaby inaczej.max-width: Maksymalna szerokość elementu. Element nie będzie szerszy niż ta wartość, nawet jeśli jego zawartość lub wartośćwidth(np.100%) sugerowałaby inaczej. Bardzo przydatne w responsywnym designie, np.max-width: 1200px; margin: 0 auto;dla głównego kontenera strony.min-height: Minimalna wysokość elementu. Element nie będzie niższy niż ta wartość.max-height: Maksymalna wysokość elementu. Element nie będzie wyższy niż ta wartość. Może powodować ukrycie lub pojawienie się paska przewijania (jeśli ustawionooverflow).
Właściwości min-* i max-* mają **wyższy priorytet** niż width i height. Jeśli ustawisz width: 100px; i min-width: 200px;, element będzie miał co najmniej 200px szerokości.
.container {
width: 80%; /* Szerokość 80% rodzica */
max-width: 960px; /* Ale nie więcej niż 960px */
min-width: 300px; /* I nie mniej niż 300px */
margin: 0 auto; /* Wycentrowanie */
}
.resizable-box {
width: auto;
min-height: 100px; /* Zawsze co najmniej 100px wysokości */
max-height: 500px; /* Nie więcej niż 500px wysokości */
overflow: auto; /* Pokaż paski przewijania, jeśli treść się nie mieści */
}
width i height dla elementów inline
Właściwości width i height **nie mają bezpośredniego wpływu** na elementy wyświetlane jako inline (np. <span>, <a>, <strong>). Ich wymiary wynikają wyłącznie z zawartości.
Aby móc ustawić szerokość i wysokość dla elementu, który normalnie jest inline, musisz zmienić jego właściwość display na:
block: Element zachowuje się jak blok (zajmuje całą szerokość, powoduje łamanie linii).inline-block: Element zachowuje się jak inline (układa się w linii z innymi), ale można mu nadaćwidth,height,padding,borderimarginjak elementowi blokowemu.
span.button-like {
display: inline-block; /* Pozwala ustawić wymiary i padding */
padding: 10px 20px;
background-color: dodgerblue;
color: white;
border-radius: 5px;
/* width: 150px; Można też ustawić stałą szerokość */
}
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz element div z klasą .wrapper. Nadaj mu maksymalną szerokość 800px i wycentruj go na stronie za pomocą marginesów. Wewnątrz umieść paragraf z tekstem.
Rozwiązanie:
HTML:
<div class="wrapper">
<p>To jest treść wewnątrz kontenera o ograniczonej szerokości.</p>
</div>
CSS:
.wrapper {
max-width: 800px; /* Maksymalna szerokość */
margin-left: auto; /* Automatyczny lewy margines */
margin-right: auto; /* Automatyczny prawy margines */
padding: 20px; /* Dodatkowy padding dla estetyki */
background-color: #f0f0f0; /* Tło dla wizualizacji */
}
Efekt: Kontener .wrapper będzie zajmował maksymalnie 800px szerokości i będzie wyśrodkowany w poziomie na stronie.
Zadanie 2 (do samodzielnego wykonania)
Stwórz element div z klasą .image-container i nadaj mu szerokość 50%. Wewnątrz umieść obrazek (<img>). Nadaj obrazkowi width: 100%; i height: auto;. Zaobserwuj, jak obrazek skaluje się wraz ze zmianą rozmiaru okna przeglądarki, dopasowując się do szerokości kontenera.
Zadanie 3 (do samodzielnego wykonania)
Stwórz element div z długą treścią. Nadaj mu max-height: 200px; i overflow: auto;. Zobacz, co się stanie, gdy treść przekroczy maksymalną wysokość.
FAQ - Najczęściej zadawane pytania
Co się stanie, jeśli treść nie mieści się w zadanych width i height?
Domyślnie (przy overflow: visible;), treść "wyleje się" poza granice elementu. Możesz kontrolować to zachowanie za pomocą właściwości overflow (np. hidden - ukryj, scroll - zawsze pokazuj paski przewijania, auto - pokazuj paski przewijania tylko w razie potrzeby).
Czy procentowa wysokość (height: ...%) zawsze działa?
Nie. Aby procentowa wysokość elementu zadziałała, jego **kontener nadrzędny musi mieć jawnie zdefiniowaną wysokość** (nie może to być height: auto;). Wyjątkiem są sytuacje, gdy element jest w kontekście formatowania, który sam zarządza wysokością, np. jako element Flexbox lub Grid.
Jak ustawić wysokość elementu na całą wysokość okna przeglądarki?
Użyj jednostki vh (viewport height): height: 100vh;. Spowoduje to, że element będzie miał wysokość równą 100% wysokości aktualnego okna przeglądarki.
Czy min-width i max-width działają z width: auto;?
Tak. Jeśli element ma width: auto;, jego szerokość będzie obliczana przez przeglądarkę, ale zostanie ograniczona przez wartości min-width i max-width, jeśli zostały ustawione.