Tła, gradienty, cienie, zaokrąglenia, transition i animation

INF.03 · teoria
autor: redakcja · 08.09.2026
Tło elementu i tło strony, obraz oraz gradient w tle, cień box-shadow, zaokrąglenie narożników, kontur outline, płynna zmiana transition i animacja z regułą @keyframes. Lekcja 4.9 kursu INF.03.

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

Efekty wi­zu­al­ne w CSS to wła­ści­wo­ści, które zmie­nia­ją wygląd pu­deł­ka, nie ru­sza­jąc jego roz­mia­ru ani układu strony: tło, gra­dient, cień, za­okrą­gle­nie na­roż­ni­ków, płynna zmiana war­to­ści i ani­ma­cja. W części pi­sem­nej wra­ca­ją py­ta­nia „która war­tość background-attachment daje tło nie­ru­cho­me wzglę­dem okna", „czym staje się plik rys.gif pod­sta­wio­ny pod punk­tor listy", „co okre­śla animation-duration" i „czym uzy­skać kolor poza ob­ra­mo­wa­niem". W za­da­niu prak­tycz­nym arkusz podaje kolory tła sekcji, za­okrą­gle­nie na­roż­ni­ków 5 px i gotową skład­nię cienia do prze­pi­sa­nia, a pod­sta­wa pro­gra­mo­wa wymaga osobno wy­ko­na­nia ani­ma­cji na po­trze­by strony in­ter­ne­to­wej.

Tło ele­men­tu i tło strony

Tło to obszar pod tre­ścią ele­men­tu, wy­peł­nio­ny ko­lo­rem, ob­ra­zem albo oby­dwo­ma naraz. Cią­gnie się pod tre­ścią i pod mar­gi­ne­sa­mi we­wnętrz­ny­mi, aż do ze­wnętrz­nej kra­wę­dzi ob­ra­mo­wa­nia, a na mar­gi­ne­sy ze­wnętrz­ne nie wy­cho­dzi. Wła­ści­wo­ści tła jest sześć i dzia­ła­ją na do­wol­nym ele­men­cie: na body, na sekcji, na aka­pi­cie, na ko­mór­ce tabeli.
Wła­ści­wość
War­to­ści
background-color
Tomato, #00838F, rgb(0, 131, 143), transparent
background-image
url("obrazy/tlo.png"), gra­dient, none
background-repeat
repeat, repeat-x, repeat-y, no-repeat
background-position
left top, center, 50% 50%, 20px 10px
background-size
cover, contain, auto, 100% 200px
background-attachment
scroll, fixed, local
Obraz w tle podaje się funk­cją url() (adres), a ścież­ka w na­wia­sie liczy się wzglę­dem PLIKU CSS, nie wzglę­dem do­ku­men­tu HTML. Arkusz styl.css sklepu leży obok index.html, więc widzi ob­ra­zek tak samo jak strona: url("obrazy/tlo.png"). Gdyby arkusz leżał w pod­ka­ta­lo­gu css, mu­siał­by naj­pierw wyjść poziom wyżej: url("obrazy/tlo.png"). To naj­częst­sza przy­czy­na tła, któ­re­go nie widać.
body { background-color: #f4f4f4; background-image: url("obrazy/tlo.png"); background-repeat: no-repeat; background-position: center top; background-size: cover; background-attachment: fixed; }
background-repeat de­cy­du­je o po­wie­la­niu: do­myśl­ne repeat układa ka­fel­ki w obu kie­run­kach, repeat-x tylko w po­zio­mie, repeat-y tylko w pionie, no-repeat po­ka­zu­je obraz jeden raz. background-size ska­lu­je: cover po­więk­sza obraz tak, żeby pokrył całe pole, i część obrazu wy­cho­dzi wtedy poza kadr, a contain mieści go w ca­ło­ści, więc obok zo­sta­je wolne miej­sce. background-attachment mówi, czy tło jedzie razem z tre­ścią: scroll prze­wi­ja się ze stroną, a fixed zo­sta­je nie­ru­cho­me wzglę­dem okna prze­glą­dar­ki, więc treść sunie po sto­ją­cym ob­ra­zie. Sześć war­to­ści mieści skrót background, gdzie idą po spacji.
header { background: DarkSlateGray url("obrazy/baner.png") no-repeat center; }
Tło strony to po prostu tło ele­men­tu body, a tło bloku to tło ele­men­tu wska­za­ne­go se­lek­to­rem. Wła­ści­wość background-image z pli­kiem rysunek.png przy se­lek­to­rze p daje ten plik jako tło KAŻDEGO pa­ra­gra­fu: nie tło całej strony, bo se­lek­to­rem nie jest body, i nie ob­ra­zek obok tekstu, bo obraz w treści wsta­wia znacz­nik <img>. Kolor i obraz wolno na­ło­żyć na siebie: kolor leży pod ob­ra­zem i widać go tam, gdzie obraz nie sięga.

Gra­dient jako obraz tła

Gra­dient to płynne przej­ście między ko­lo­ra­mi, wy­li­cza­ne przez prze­glą­dar­kę za­miast po­bie­ra­nia pliku. For­mal­nie jest ob­ra­zem, więc trafia do background-image albo do skrótu background, a nie do background-color.
linear-gradient() (gra­dient li­nio­wy) pro­wa­dzi kolory wzdłuż pro­stej. Pierw­szy ar­gu­ment podaje kie­ru­nek: sło­wa­mi to right, to bottom, to bottom right albo kątem, gdzie 0deg pro­wa­dzi od dołu do góry, a 45deg obraca oś zgod­nie z ruchem wska­zó­wek zegara. Po­mi­nię­ty kie­ru­nek znaczy to bottom. Dalej idą kolory, co naj­mniej dwa, roz­dzie­lo­ne prze­cin­ka­mi, a każdy może dostać swoje miej­sce w pro­cen­tach. radial-gradient() (gra­dient ko­li­sty) roz­cho­dzi się od punktu na ze­wnątrz, więc daje plamę świa­tła za­miast pasa.
.baner { background-image: linear-gradient(to right, Tomato, DarkSlateGray); } .wstega { background-image: linear-gradient(45deg, Tomato 0%, Gold 50%, Tomato 100%); } .plama { background-image: radial-gradient(DeepSkyBlue, DarkSlateGray); }

Cienie, za­okrą­gle­nia i kontur

Cień to roz­my­ta kopia kształ­tu ele­men­tu, ry­so­wa­na pod nim z prze­su­nię­ciem. box-shadow (cień pu­deł­ka) przyj­mu­je war­to­ści w stałej ko­lej­no­ści: prze­su­nię­cie w po­zio­mie, prze­su­nię­cie w pionie, roz­my­cie, kolor. Liczby do­dat­nie prze­su­wa­ją cień w prawo i w dół. Piąta liczba to roz­rost cienia, a słowo inset prze­no­si cień do wnę­trza pu­deł­ka. text-shadow (cień tekstu) działa tak samo, ale do­ty­czy samych liter.
border-radius (za­okrą­gle­nie na­roż­ni­ków) ścina rogi łukiem o po­da­nym pro­mie­niu. Jedna war­tość za­okrą­gla wszyst­kie cztery na­roż­ni­ki, cztery war­to­ści dzia­ła­ją po kolei od lewego gór­ne­go, zgod­nie z ruchem wska­zó­wek zegara. War­tość w pro­cen­tach liczy się od roz­mia­ru pu­deł­ka, więc border-radius: 50% za­mie­nia kwa­drat w koło, a pro­sto­kąt w elipsę. Ar­ku­sze CKE proszą o to zda­niem „za­okrą­gle­nie na­roż­ni­ków 5 px".
outline (kontur) rysuje linię NA ZEWNĄTRZ ob­ra­mo­wa­nia i, w od­róż­nie­niu od border (ob­ra­mo­wa­nie), nie zaj­mu­je miej­sca w modelu pu­deł­ko­wym: nie po­więk­sza ele­men­tu ani nie prze­su­wa są­sia­dów, tylko kła­dzie się na tym, co obok. Skład­nia jest ta sama co przy ob­ra­mo­wa­niu: gru­bość, styl, kolor. Roz­mia­ry pu­deł­ka liczy lekcja o modelu pu­deł­ko­wym.
article { border: 1px solid #ccc; border-radius: 5px; box-shadow: 5px 5px 10px gray; } .wyroznik { outline: 2px solid Tomato; text-shadow: 1px 1px 2px #222; }
opacity (krycie) usta­wia prze­zro­czy­stość CAŁEGO ele­men­tu razem z za­war­to­ścią, w skali od 0 (nie­wi­docz­ny, choć nadal zaj­mu­je miej­sce) do 1 (pełne krycie). Gdy prze­zro­czy­ste ma być samo tło, a tekst ma zostać czy­tel­ny, używa się koloru z ka­na­łem alfa: rgba(0, 0, 0, 0.5).
Punk­tor listy zmie­nia­ją dwie wła­ści­wo­ści. list-style-type wy­bie­ra gotowy znak: disc (kropka), circle, square, decimal, upper-roman, none. list-style-image pod­sta­wia w miej­sce punk­to­ra plik gra­ficz­ny, więc zapis list-style-image: url("rys.gif") przy se­lek­to­rze ul robi z tego ob­raz­ka punk­tor listy nie­nu­me­ro­wa­nej, a nie tło ani ramkę listy. cursor zmie­nia kształt wskaź­ni­ka myszy nad ele­men­tem: pointer daje rączkę jak nad od­no­śni­kiem, a dalej są default, text, wait i not-allowed.

trans­i­tion: płynna zmiana war­to­ści

transition (przej­ście) to płynna zmiana war­to­ści wła­ści­wo­ści między dwoma sta­na­mi, roz­ło­żo­na w czasie. Bez niej kolor tła po na­je­cha­niu myszą prze­ska­ku­je w jednej klatce. Przej­ście opi­su­ją cztery części, po­da­wa­ne w tej ko­lej­no­ści.
  • transition-property: nazwa zmie­nia­nej wła­ści­wo­ści, na przy­kład background-color, albo all dla wszyst­kich naraz.
  • transition-duration: czas zmiany, w se­kun­dach (0.3s) albo mi­li­se­kun­dach (300ms). Bez tej war­to­ści nie widać ni­cze­go, bo do­myśl­ny czas to zero.
  • transition-timing-function: roz­kład tempa, czyli ease (start wol­niej­szy), linear (równo), ease-in, ease-out.
  • transition-delay: opóź­nie­nie przed star­tem zmiany.
Przej­ście za­pi­su­je się w stanie SPOCZYNKOWYM ele­men­tu, nie w do­ce­lo­wym, i dzięki temu działa w obie strony: przy na­je­cha­niu i przy zje­cha­niu myszą. Stan do­ce­lo­wy podaje pseu­do­kla­sa, tutaj :hover (na­je­cha­nie), opi­sa­na w lekcji o pseu­do­kla­sach i pseu­do­ele­men­tach.
.przycisk { background-color: DarkSlateGray; transition: background-color 0.3s ease; } .przycisk:hover { background-color: Tomato; }
transform (prze­kształ­ce­nie) prze­su­wa, obraca i ska­lu­je ele­ment, nie ru­sza­jąc miej­sca, które zaj­mu­je on w ukła­dzie: scale(1.05) po­więk­sza o 5 pro­cent, rotate(45deg) obraca o 45 stopni, translate(10px, 0) prze­su­wa w prawo. Łączy się z transition i z ani­ma­cją, bo zmie­nia się płyn­nie.

ani­ma­tion i reguła @key­fra­mes

Ani­ma­cja w CSS to zmiana wy­glą­du ele­men­tu w czasie, opi­sa­na klat­ka­mi klu­czo­wy­mi i uru­cha­mia­na sama, bez dzia­ła­nia użyt­kow­ni­ka. Tym różni się od transition, które czeka na stan w ro­dza­ju :hover. Pisze się ją w dwóch kro­kach: reguła @keyframes opi­su­je prze­bieg, a wła­ści­wo­ści animation-* pod­pi­na­ją go pod ele­ment. @keyframes do­sta­je własną NAZWĘ, a w środku stoją klatki: dwie wy­star­czy opisać sło­wa­mi from i to, więcej podaje się w pro­cen­tach czasu (0%, 50%, 100%).
Wła­ści­wość
Co usta­wia
animation-name
nazwa reguły @keyframes do od­two­rze­nia
animation-duration
czas trwa­nia JEDNEGO cyklu, na przy­kład 2s
animation-iteration-count
liczba po­wtó­rzeń: liczba albo infinite
animation-delay
opóź­nie­nie przed pierw­szym cyklem
animation-direction
kie­ru­nek: normal, reverse, alternate
animation-timing-function
roz­kład tempa: ease, linear, ease-in-out
@keyframes pulsowanie { from { opacity: 1; } to { opacity: 0.3; } } .promocja { animation: pulsowanie 2s infinite alternate; }
Napis „Pro­mo­cja" w bloku o klasie promocja gaśnie w ciągu dwóch sekund do 30 pro­cent krycia, a alternate od­wra­ca kie­ru­nek co cykl, więc wraca płyn­nie za­miast prze­ska­ki­wać do peł­ne­go koloru. Bez infinite całość ode­gra­ła­by się raz. Skrót animation przyj­mu­je war­to­ści po spacji w ko­lej­no­ści: nazwa, czas cyklu, liczba po­wtó­rzeń, kie­ru­nek, czyli cztery wła­ści­wo­ści z tabeli wyżej.
Pod­sta­wa pro­gra­mo­wa mówi o wy­ko­na­niu ani­ma­cji na po­trze­by strony in­ter­ne­to­wej i nie zawęża tego do CSS. Poza ar­ku­szem stylów ani­ma­cję robi się na cztery spo­so­by: ani­mo­wa­ny GIF (gotowy plik z klat­ka­mi, ogra­ni­czo­na paleta, bez dźwię­ku), SVG (gra­fi­ka wek­to­ro­wa, ska­lu­je się bez utraty ja­ko­ści), JavaScript (skrypt zmie­nia­ją­cy style w czasie, re­agu­je na dane i zda­rze­nia) oraz canvas (płótno, na którym skrypt rysuje każdą klatkę, stąd gry i wy­kre­sy). CSS wy­star­cza do efek­tów in­ter­fej­su, a pliki gra­ficz­ne i skryp­ty wcho­dzą tam, gdzie ani­ma­cja niesie treść. Wra­ca­ją do tego działy o gra­fi­ce i o JavaScripcie.

Efekty na stro­nie sklepu

Arkusz stylów sklepu kom­pu­te­ro­we­go do­sta­je trzy do­pi­ski: gra­dient w ba­ne­rze, karty pro­duk­tów z cie­niem i za­okrą­gle­niem oraz menu z płynną zmianą tła.
header { background-image: linear-gradient(to right, DarkSlateGray, #00838F); } main article { background-color: white; border-radius: 5px; box-shadow: 5px 5px 10px gray; } nav a { transition: background-color 0.3s linear; } nav a:hover { background-color: Tomato; }
Baner prze­cho­dzi od DarkSlateGray po lewej do tur­ku­su #00838F po prawej. Każdy ar­ty­kuł z opisem pro­duk­tu leży na białym pro­sto­ką­cie o ścię­tych rogach, z szarym cie­niem prze­su­nię­tym o 5 px w prawo i w dół oraz roz­my­tym na 10 px. Od­no­śni­ki w menu po na­je­cha­niu myszą do­cho­dzą do koloru Tomato w ciągu trzech dzie­sią­tych se­kun­dy i tak samo płyn­nie wra­ca­ją. Układ nie drgnie przy żadnym z tych efek­tów, bo żaden nie zmie­nia roz­mia­ru pu­deł­ka.

Na eg­za­mi­nie

Py­ta­nia pi­sem­ne o efekty wi­zu­al­ne mają kilka sta­łych kształ­tów. War­tość background-attachment dająca tło nie­ru­cho­me wzglę­dem okna prze­glą­dar­ki to fixed, a nie scroll ani local. Zapis z list-style-image i pli­kiem rys.gif znaczy, że ten ob­ra­zek staje się punk­to­rem listy nie­nu­me­ro­wa­nej, a nie jej tłem ani ramką. background-image z pli­kiem rysunek.png przy se­lek­to­rze p daje tło KAŻDEGO pa­ra­gra­fu, bo se­lek­tor de­cy­du­je, co do­sta­je tło. Tło po­wta­rza­ne wy­łącz­nie w po­zio­mie to background-repeat: repeat-x. animation-duration okre­śla czas trwa­nia jed­ne­go cyklu ani­ma­cji, a nie liczbę po­wtó­rzeń, którą usta­wia animation-iteration-count, nie kie­ru­nek z animation-direction i nie opóź­nie­nie startu z animation-delay. Czer­wo­ny kolor POZA ob­ra­mo­wa­niem aka­pi­tu daje outline, bo border rysuje samo ob­ra­mo­wa­nie, padding odsuwa treść od niego, a background wy­peł­nia wnę­trze. Wraca też ry­su­nek z kil­ko­ma aka­pi­ta­mi i py­ta­nie, dla któ­re­go za­sto­so­wa­no border-radius: ten z rogami ścię­ty­mi łukiem.
Pu­łap­ka: ścież­ka w url() liczy się od po­ło­że­nia pliku CSS, nie od pliku HTML. Arkusz prze­nie­sio­ny do pod­ka­ta­lo­gu css musi sięgać po obraz za­pi­sem url("../obrazy/tlo.png").
W za­da­niu prak­tycz­nym te wła­ści­wo­ści wra­ca­ją w trzech miej­scach. Cień arkusz podaje GOTOWĄ skład­nią w treści po­le­ce­nia i prze­pi­su­je się ją co do znaku, bez za­mia­ny liczb na własne. Za­okrą­gle­nie na­roż­ni­ków 5 px to border-radius: 5px w se­lek­to­rze wska­za­ne­go bloku. Kolory tła arkusz wy­pi­su­je nazwą albo szes­nast­ko­wo, na przy­kład „kolor tła banera DeepSkyBlue", „kolor tła stopki Maroon", #00838F, i wpi­su­je się je do­kład­nie, bo po­dob­ny odcień punktu nie daje. Wszyst­ko idzie do ze­wnętrz­ne­go pliku do­łą­czo­ne­go przez <link>, a styl w atry­bu­cie style kosz­tu­je punkt. Ani­ma­cja bywa w ar­ku­szu rzadko, ale kry­te­rium pod­sta­wy mówi wprost o wy­ko­na­niu ani­ma­cji na po­trze­by strony, więc pul­su­ją­cy napis i płynne pod­świe­tle­nie menu trzeba umieć na­pi­sać z pa­mię­ci.

Ściąga

Zapis
Znaczy
background-color: Tomato
kolor tła ele­men­tu
background-image: url("obrazy/tlo.png")
obraz w tle, ścież­ka li­czo­na od pliku CSS
background-repeat: repeat-x
tło po­wta­rza­ne wy­łącz­nie w po­zio­mie
background-size: cover
obraz po­kry­wa całe pole, część wy­cho­dzi poza kadr
background-attachment: fixed
tło nie­ru­cho­me wzglę­dem okna prze­glą­dar­ki
linear-gradient(to right, Tomato, DarkSlateGray)
przej­ście ko­lo­rów wzdłuż pro­stej, war­tość dla background-image
box-shadow: 5px 5px 10px gray
cień: w prawo, w dół, roz­my­cie, kolor
border-radius: 5px
za­okrą­gle­nie na­roż­ni­ków 5 px, 50% daje koło
outline: 2px solid Tomato
kontur poza ob­ra­mo­wa­niem, nie zaj­mu­je miej­sca
opacity: 0.5
krycie całego ele­men­tu, od 0 do 1
list-style-image: url("rys.gif")
plik gra­ficz­ny jako punk­tor listy
transition: background-color 0.3s ease
płynna zmiana tła w ciągu 0,3 se­kun­dy
animation-duration: 2s
czas trwa­nia jed­ne­go cyklu ani­ma­cji
animation-iteration-count: infinite
ani­ma­cja po­wta­rza­na bez koń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ą.