Układ strony w CSS: display, position, float, z-index, overflow

INF.03 · teoria
autor: redakcja · 08.09.2026
Jak rozstawić bloki strony: display i przepływ dokumentu, position ze wszystkimi pięcioma wartościami, z-index, obtekanie float z czyszczeniem clear oraz overflow dla bloku o stałej wysokości. Lekcja 4.6 kursu INF.03.

[ INF.03: PYTANIA Z TEGO DZIAŁU ]

Układ strony to sposób roz­miesz­cze­nia bloków na ekra­nie: co stoi na górze, co obok czego i co zo­sta­je na swoim miej­scu, gdy strona się prze­wi­ja. HTML ustala wy­łącz­nie ko­lej­ność znacz­ni­ków, a o tym, czy panel boczny i blok główny staną w dwóch ko­lum­nach, de­cy­du­je CSS. W części pi­sem­nej wra­ca­ją py­ta­nia „wła­ści­wość float po­zwa­la na umiesz­cze­nie ele­men­tu", „czym różni się display: none od visibility: hidden", „co robi position: fixed", „do czego służy z-index", a także ry­su­nek układu bloków od 2 do 5 z czte­re­ma blo­ka­mi kodu CSS do wyboru. W za­da­niu prak­tycz­nym arkusz każe usta­wić dwa bloki obok siebie z sze­ro­ko­ścia­mi po­da­ny­mi w pro­cen­tach, dać ba­ne­ro­wi wy­so­kość w pik­se­lach i zrobić obrazy opły­wa­ne przez tekst.

di­splay: czym ele­ment jest dla układu

display (wy­świe­tla­nie) to wła­ści­wość, która de­cy­du­je, ile miej­sca ele­ment zaj­mu­je w wier­szu i czy w ogóle zo­sta­je na­ry­so­wa­ny. Każdy znacz­nik ma war­tość do­myśl­ną: <div>, <p>, <h1> i znacz­ni­ki sekcji są blo­ko­we, a <a>, <span>, <img> i <strong> li­nio­we. display te war­to­ści nad­pi­su­je, więc z od­no­śni­ka da się zrobić pro­sto­kąt o za­da­nej sze­ro­ko­ści, a z punktu listy przy­cisk menu.
War­tość
Co robi
block
ele­ment zaj­mu­je całą sze­ro­kość ro­dzi­ca i za­czy­na nowy wiersz
inline
ele­ment stoi w wier­szu tekstu, width i height go nie do­ty­czą
inline-block
stoi w wier­szu obok są­sia­dów, ale przyj­mu­je sze­ro­kość, wy­so­kość i mar­gi­ne­sy
none
ele­ment znika ze strony i nie zaj­mu­je miej­sca
Para display: none i visibility: hidden (wi­docz­ność ukryta) to gotowe py­ta­nie te­sto­we. Pierw­szy zapis usuwa ele­ment z układu: strona wy­glą­da tak, jakby tego znacz­ni­ka w kodzie nie było, a są­sie­dzi prze­su­wa­ją się na jego miej­sce. Drugi zo­sta­wia pustą dziurę do­kład­nie tej wiel­ko­ści co ukryty ele­ment i tylko prze­sta­je go ry­so­wać. Sekcje po­mi­ja­ne na wąskim ekra­nie chowa się pierw­szym spo­so­bem, bo puste miej­sce po panelu nie ma sensu.
Menu po­zio­me z lekcji o li­stach i od­no­śni­kach jest w HTML listą punk­to­wa­ną, więc prze­glą­dar­ka do­myśl­nie usta­wia punkty jeden pod drugim i rysuje kropki. Obie rzeczy zdej­mu­je się w CSS.
nav ul { list-style: none; padding: 0; } nav li { display: inline-block; margin-right: 20px; }
list-style: none usuwa punk­to­ry, a display: inline-block na ele­men­cie listy usta­wia punkty obok siebie w jednym wier­szu, przy czym każdy z nich nadal przyj­mu­je mar­gi­ne­sy we­wnętrz­ne i sze­ro­kość, czego sama war­tość inline nie daje. Dwie ko­lej­ne war­to­ści, flex i grid, robią z ele­men­tu po­jem­nik ukła­da­ją­cy dzieci w rząd albo w siatkę i to jest dzi­siej­szy sposób bu­do­wa­nia kolumn: opi­su­je go lekcja o fle­xbok­sie i siatce.

Prze­pływ do­ku­men­tu i wy­mia­ry bloku

Prze­pływ do­ku­men­tu (normal flow, prze­pływ nor­mal­ny) to do­myśl­ne usta­wia­nie ele­men­tów, zanim ruszy się co­kol­wiek z układu: bloki idą jeden pod drugim w ko­lej­no­ści z pliku HTML, a ele­men­ty li­nio­we obok siebie w wier­szu, aż do prawej kra­wę­dzi ro­dzi­ca, i dalej od nowego wier­sza. Blok zaj­mu­je do­myśl­nie całą sze­ro­kość ro­dzi­ca, a jego wy­so­kość bierze się z za­war­to­ści, więc dłuż­szy tekst roz­py­cha go w dół.
Wy­mia­ry usta­wia­ją cztery wła­ści­wo­ści. width (sze­ro­kość) i height (wy­so­kość) podają war­tość sztyw­ną, w pik­se­lach albo w pro­cen­tach roz­mia­ru ro­dzi­ca. max-width (sze­ro­kość naj­więk­sza) po­zwa­la ele­men­to­wi być węż­szym, ale nie szer­szym niż podana war­tość, a min-height (wy­so­kość naj­mniej­sza) re­zer­wu­je wy­so­kość nawet dla pu­ste­go bloku.
main { width: 70%; min-height: 300px; } article img { max-width: 100%; }
Zapis max-width: 100% na ob­ra­zie znaczy: nigdy szer­szy niż blok, w którym stoi. Bez tego zdję­cie pro­duk­tu o sze­ro­ko­ści 1200 px wy­sta­je poza ko­lum­nę i roz­py­cha układ na te­le­fo­nie.
Pu­łap­ka: pro­cent w width liczy się od sze­ro­ko­ści RODZICA, a nie od sze­ro­ko­ści okna. Zapis width: 50% w bloku sze­ro­kim na 600 px daje 300 px.

po­si­tion: po­zy­cjo­no­wa­nie wzglę­dem czego innego

position (po­zy­cjo­no­wa­nie) to wła­ści­wość, która wska­zu­je punkt od­nie­sie­nia dla prze­su­nię­cia ele­men­tu, a samo prze­su­nię­cie za­pi­su­ją top, right, bottom i left. Te cztery wła­ści­wo­ści bez position nie robią nic, bo przy war­to­ści do­myśl­nej static prze­glą­dar­ka je igno­ru­je.
War­tość
Wzglę­dem czego prze­su­wa
Czy zo­sta­je w prze­pły­wie
static
nie prze­su­wa się wcale, to war­tość do­myśl­na
tak
relative
wła­sne­go miej­sca w prze­pły­wie
tak, miej­sce po nim zo­sta­je puste
absolute
naj­bliż­sze­go przod­ka z position innym niż static
nie, są­sie­dzi za­my­ka­ją lukę
fixed
okna prze­glą­dar­ki
nie, nie prze­wi­ja się razem z tre­ścią
sticky
swo­je­go miej­sca, dopóki nie do­je­dzie do kra­wę­dzi okna
tak, potem przy­kle­ja się do kra­wę­dzi
Cztery przypadki pozycjonowania: relative przesuwa element względem jego własnego miejsca, absolute liczy odległości od pozycjonowanego przodka, fixed przykleja pasek do okna, a float ustawia obraz z lewej i puszcza tekst dookoła
Ry­su­nek po­ka­zu­je róż­ni­cę, która naj­czę­ściej myli się w teście. Ele­ment z relative od­su­nię­ty o 20 px w dół zo­sta­wia w prze­pły­wie swoje puste miej­sce, więc są­sie­dzi stoją tam, gdzie stali. Ele­ment z absolute z prze­pły­wu wypada, więc na­stęp­ny blok pod­jeż­dża pod niego, a od­le­gło­ści liczą się od kra­wę­dzi przod­ka, który sam ma usta­wio­ne position. Ele­ment z fixed odnosi się do okna prze­glą­dar­ki i przy prze­wi­ja­niu strony zo­sta­je w tym samym punk­cie ekranu, dla­te­go robi się z niego pasek na dole albo przy­cisk po­wro­tu do góry. Ostat­nia war­tość, sticky (przy­kle­jo­ny), za­cho­wu­je się jak relative do chwili, gdy ele­ment do­je­dzie do za­da­nej kra­wę­dzi okna, i do­pie­ro wtedy zo­sta­je w miej­scu.
Kiedy ele­men­ty za­czy­na­ją na siebie na­cho­dzić, o ko­lej­no­ści warstw de­cy­du­je z-index (ko­lej­ność na­kła­da­nia). Wyższa liczba znaczy wyżej w stosie, a ele­ment bez tej wła­ści­wo­ści leży niżej niż każdy z do­dat­nią war­to­ścią. Wa­ru­nek jest jeden: z-index działa wy­łącz­nie na ele­men­cie z position innym niż static, więc do­pi­sa­ny do zwy­kłe­go bloku nie robi nic.
article { position: relative; } .nowosc { position: absolute; top: 0; right: 0; z-index: 2; }
Ety­kie­ta „nowość" siada w prawym górnym rogu ar­ty­ku­łu z pro­duk­tem, bo article dostał position: relative i przez to stał się punk­tem od­nie­sie­nia. Bez tej jednej li­nij­ki ety­kie­ta li­czy­ła­by od­le­gło­ści od okna i wy­lą­do­wa­ła­by w rogu strony.

float i clear: ob­te­ka­nie

float (ob­te­ka­nie) to wła­ści­wość, która dosuwa ele­ment do lewej albo prawej kra­wę­dzi ro­dzi­ca i każe po­zo­sta­łej treści opły­wać go z dru­giej strony. Przyj­mu­je war­to­ści left, right i none. Ar­ku­sze CKE na­zy­wa­ją to wprost „obrazy opły­wa­ne przez tekst", a w banku pytań stoi zdanie „wła­ści­wość float po­zwa­la na umiesz­cze­nie ele­men­tu po lewej lub prawej stro­nie innego ele­men­tu".
article img { float: left; margin-right: 15px; }
Zdję­cie pro­duk­tu staje przy lewej kra­wę­dzi ar­ty­ku­łu, a opis układa się z jego prawej strony i scho­dzi pod obraz do­pie­ro wtedy, gdy jest od niego dłuż­szy. margin-right odsuwa tekst od obrazu, bo bez mar­gi­ne­su litery kleją się do kra­wę­dzi zdję­cia.
Ta sama wła­ści­wość usta­wia dwa bloki obok siebie i tak bu­do­wa­no ko­lum­ny przed fle­xbok­sem: panel boczny do­sta­je float: left z sze­ro­ko­ścią 30 pro­cent, blok główny float: right z sze­ro­ko­ścią 70 pro­cent, a stopka musi zejść pod oba. Do tego służy clear (czysz­cze­nie), które za­bra­nia ele­men­to­wi stanąć obok bloków opły­wa­nych: clear: left omija te do­su­nię­te do lewej, clear: right te z prawej, a clear: both scho­dzi pod wszyst­kie.
Ele­ment opły­wa­ny wypada z prze­pły­wu, więc rodzic prze­sta­je liczyć go do swojej wy­so­ko­ści. Rodzic z dwiema ko­lum­na­mi w środku zapada się do zera i tło ucieka spod treści. Leczy się to dwoma spo­so­ba­mi: overflow: auto na ro­dzi­cu każe mu objąć za­war­tość, a star­szy zapis clearfix do­kle­ja na końcu bloku pseu­do­ele­ment z clear: both. Pseu­do­ele­men­ty opi­su­je lekcja o pseu­do­kla­sach i pseu­do­ele­men­tach.

over­flow: co z tre­ścią, która się nie mieści

overflow (prze­peł­nie­nie) mówi, co zrobić z za­war­to­ścią wyższą niż blok o usta­lo­nej wy­so­ko­ści. Bez tej wła­ści­wo­ści tekst po prostu wy­sta­je poza ob­ra­mo­wa­nie i na­cho­dzi na to, co stoi niżej.
War­tość
Co się dzieje z nad­mia­rem
visible
wy­sta­je poza blok i na­cho­dzi na są­sia­dów, to war­tość do­myśl­na
hidden
zo­sta­je przy­cię­ty na kra­wę­dzi i nie ma jak do niego do­trzeć
scroll
blok do­sta­je paski prze­wi­ja­nia, także gdy treść się mieści
auto
paski po­ja­wia­ją się tylko wtedy, gdy treść nie mieści się w bloku
aside { height: 200px; overflow: auto; }
Panel boczny o wy­so­ko­ści 200 px z długą listą po­le­ca­nych pro­duk­tów do­sta­je własny pasek prze­wi­ja­nia i prze­sta­je roz­py­chać stronę w dół.

Układ sklepu zbu­do­wa­ny na flo­atach

Wi­try­na sklepu kom­pu­te­ro­we­go z lekcji o znacz­ni­kach sekcji ma baner, menu, panel boczny obok bloku głów­ne­go i stopkę. Ko­lum­ny roz­sta­wia po­niż­szy ka­wa­łek ar­ku­sza styl.css, a pasek ko­szy­ka zo­sta­je przy­kle­jo­ny do dolnej kra­wę­dzi okna.
aside { float: left; width: 30%; } main { float: right; width: 70%; } footer { clear: both; } #koszyk { position: fixed; bottom: 0; }
Panel boczny idzie do lewej kra­wę­dzi i zaj­mu­je 30 pro­cent sze­ro­ko­ści, blok główny do prawej z po­zo­sta­ły­mi 70 pro­cen­ta­mi, więc oba stają w jednym wier­szu, choć w pliku HTML leżą jeden pod drugim. Stopka z clear: both scho­dzi pod obie ko­lum­ny za­miast wci­skać się obok nich. Blok ko­szy­ka z position: fixed i bottom: 0 przy­kle­ja się do dołu okna i zo­sta­je tam przy prze­wi­ja­niu strony, a gdy ma leżeć nad tre­ścią, do­kła­da mu się jesz­cze z-index. Obraz pro­duk­tu z float: left opływa się tek­stem we­wnątrz ar­ty­ku­łu, nie­za­leż­nie od kolumn.

Na eg­za­mi­nie

Py­ta­nia pi­sem­ne o układ mają kilka sta­łych kształ­tów. Pierw­szy to zdanie o float: wła­ści­wość ta umiesz­cza ele­ment po lewej lub prawej stro­nie innego ele­men­tu, a nie nad nim ani pod nim, i to samo py­ta­nie wraca z ry­sun­kiem obrazu opły­wa­ne­go tek­stem, gdzie od­po­wie­dzią jest float: left w stylu obrazu. Drugi kształt to display: none kontra visibility: hidden: pierw­szy zapis usuwa ele­ment razem z jego miej­scem, drugi zo­sta­wia puste miej­sce. Trzeci to position: fixed jako sposób na ele­ment nie­ru­cho­my wzglę­dem okna prze­glą­dar­ki, przy czym nie­ru­cho­me TŁO robi osobna wła­ści­wość background-attachment z war­to­ścią fixed. Czwar­ty to z-index, czyli ko­lej­ność na­kła­da­nia ele­men­tów, dzia­ła­ją­ca tylko przy po­zy­cjo­no­wa­niu innym niż static. Piąty to ry­su­nek układu bloków po­nu­me­ro­wa­nych od 2 do 5 i cztery bloki kodu CSS do wyboru: roz­strzy­ga­ją go sze­ro­ko­ści oraz to, który blok ma float, a który clear. Szósty to overflow jako wła­ści­wość de­cy­du­ją­ca o treści wy­sta­ją­cej poza blok. Wraca też menu po­zio­me z listy punk­to­wa­nej, w którym ele­men­tom <li> usta­wia się wła­ści­wość display.
Jedna pu­łap­ka kosz­tu­je naj­wię­cej. Dwa bloki po 50 pro­cent sze­ro­ko­ści z ob­ra­mo­wa­niem albo mar­gi­ne­sem we­wnętrz­nym nie zmiesz­czą się w jednym wier­szu, bo do­myśl­nie te war­to­ści do­kła­da­ją się do sze­ro­ko­ści i suma prze­kra­cza 100 pro­cent, więc drugi blok spada pod pierw­szy. Ratuje to box-sizing: border-box z lekcji o modelu pu­deł­ko­wym albo sze­ro­ko­ści do­bra­ne z za­pa­sem.
W za­da­niu prak­tycz­nym po­le­ce­nia z ar­ku­sza tłu­ma­czy się na wła­ści­wo­ści niemal słowo w słowo. „Obrazy opły­wa­ne przez tekst" to float: left albo float: right w stylu obrazu, „panel lewy o sze­ro­ko­ści 30 pro­cent, prawy 70 pro­cent" to dwa bloki opły­wa­ne z sze­ro­ko­ścia­mi w pro­cen­tach albo po­jem­nik z display: flex, „wy­so­kość banera 80 px" to height w pik­se­lach, a „stopka na całej sze­ro­ko­ści pod pa­ne­la­mi" to clear: both. Style pi­szesz w ze­wnętrz­nym pliku do­łą­czo­nym przez <link>, bo atry­but style w znacz­ni­ku kosz­tu­je punkt. Gdy po­le­ce­nie żąda stylów wy­łącz­nie przez se­lek­to­ry znacz­ni­ków, ko­lum­ny wska­zu­je się na­zwa­mi aside i main, a nie klasą do­pi­sa­ną do kodu HTML.

Ściąga

Zapis
Znaczy
display: block
cała sze­ro­kość ro­dzi­ca, ele­ment za­czy­na nowy wiersz
display: inline-block
obok siebie w wier­szu, ale z sze­ro­ko­ścią i wy­so­ko­ścią
display: none
ele­ment znika, miej­sce po nim się zamyka
visibility: hidden
ele­ment nie­wi­docz­ny, puste miej­sce po nim zo­sta­je
position: relative
prze­su­nię­cie wzglę­dem wła­sne­go miej­sca, ślad zo­sta­je
position: absolute
wzglę­dem po­zy­cjo­no­wa­ne­go przod­ka, poza prze­pły­wem
position: fixed
wzglę­dem okna, nie prze­wi­ja się z tre­ścią
position: sticky
przy­kle­ja się po do­je­cha­niu do kra­wę­dzi okna
z-index: 2
wyżej w stosie, tylko z position innym niż static
float: left
ele­ment przy lewej kra­wę­dzi, treść opływa go z prawej
clear: both
ele­ment scho­dzi pod wszyst­kie bloki opły­wa­ne
overflow: auto
paski prze­wi­ja­nia, gdy treść nie mieści się w bloku
width: 30%
sze­ro­kość li­czo­na od sze­ro­ko­ści ro­dzi­ca
Pobierz ściągę PDF
ZAWODNIK
egzamin zawodowy INF.02 · INF.03 · INF.04
Serwer Discord
Egzaminy zawodowe IT/Matury/Studia
@yastor
© 2026 Zawodnik · by Yastor
Arkusze i zasady oceniania pochodzą z CKE. Serwis nie jest powiązany z Centralną Komisją Egzaminacyjną.