HTML I CSS · INF.03 · MODUŁ 03
Obrazy, figury i multimedia
Obraz mówi więcej niż akapit — ale tylko wtedy, gdy ma sensowny opis i właściwy rozmiar.
Wprowadzenie
Obraz wstawiamy do strony elementem <img>. To element pusty — nie ma znacznika zamykającego, a wszystkie informacje przenoszą jego atrybuty. Najważniejsze z nich to src, czyli adres pliku, oraz alt, czyli słowny opis obrazu.
Atrybuty width i height podajemy w pikselach, bez jednostki. Dzięki nim przeglądarka rezerwuje miejsce, zanim obraz się wczyta, więc tekst nie przeskakuje w trakcie ładowania. W CSS warto dodać max-width: 100% i height: auto, żeby obraz nie wychodził poza ekran telefonu.
Format pliku dobieramy do treści. JPG sprawdza się przy zdjęciach, PNG przy grafice z przezroczystością, SVG przy logo i ikonach, a WebP daje mniejszy plik przy dobrej jakości. Obraz z podpisem zamykamy w elemencie <figure>, a podpis umieszczamy w <figcaption>.
Przy różnych ekranach pomaga element <picture> z <source> i atrybutem srcset. Atrybut loading="lazy" opóźnia wczytanie obrazów znajdujących się poza pierwszym ekranem. Podobne znaczniki obsługują multimedia: <video>, <audio> i <source>.
Opis w alt czytają osoby korzystające z czytnika ekranu oraz przeglądarki, gdy obraz się nie wczyta. Nie pisz „obrazek” ani nie powtarzaj nazwy pliku — opisz, co naprawdę widać lub jaką funkcję pełni obraz.
Najważniejsza własność
Najważniejszym atrybutem obrazu jest alt. Dzięki niemu osoba, która nie widzi obrazu, nadal rozumie treść strony. Obraz czysto dekoracyjny dostaje pusty opis alt="", ale obraz informacyjny musi mieć krótki i konkretny opis.
<img
src="gory.jpg"
alt="Panorama gór"
width="640" height="360">
Adres pliku, opis treści oraz wymiary w pikselach — bez jednostek i bez znacznika zamykającego.
Atrybuty width i height nie muszą odpowiadać dokładnemu rozmiarowi na ekranie. Podajemy je po to, aby przeglądarka znała proporcje obrazu i zarezerwowała dla niego miejsce. Dopiero CSS decyduje, jak duży obraz będzie faktycznie wyświetlany.
| Format | Kiedy wybrać |
|---|---|
| JPG | Zdjęcia i fotografie, dużo kolorów, mały plik. |
| PNG | Grafika z przezroczystością, zrzuty ekranu, ostre krawędzie. |
| SVG | Logo, ikony i wykresy — skaluje się bez utraty jakości. |
| WebP | Nowoczesne zdjęcia i grafika o mniejszym rozmiarze pliku. |
Gdy potrzebujesz innego pliku dla telefonu, a innego dla dużego ekranu, użyj elementu picture. Przeglądarka wybierze pierwszy pasujący wariant, a element img zostanie jako rozwiązanie awaryjne.
<picture>
<source
srcset="gory-1200.webp"
media="(min-width: 900px)"
type="image/webp">
<img src="gory-640.jpg" alt="Panorama gór" width="640" height="360">
</picture>
Multimedia również mają swoje elementy. <video> i <audio> wymagają atrybutu controls, żeby użytkownik mógł odtwarzać, zatrzymywać i przewijać materiał. Element <source> podaje alternatywne pliki, a poster wyświetla planszę przed odtworzeniem filmu. Tekst między znacznikami jest rozwiązaniem awaryjnym dla przeglądarek, które nie obsługują danego formatu.
<video controls width="640" height="360" poster="plansza.jpg">
<source src="film.mp4" type="video/mp4">
<source src="film.webm" type="video/webm">
Twoja przeglądarka nie obsługuje wideo.
</video>
<audio controls src="nagranie.mp3"></audio>
<iframe src="mapa.html" title="Mapa dojazdu"></iframe>
Element iframe osadza w stronie inną stronę, na przykład mapę lub film. Zawsze dodawaj mu atrybut title, który opisuje zawartość ramki osobom korzystającym z czytnika ekranu.
loading="lazy" dodawaj do obrazów poniżej pierwszego ekranu. Obraz widoczny od razu po wejściu na stronę powinien wczytywać się normalnie, bez opóźnienia.
Sprawdź teraz, czy rozpoznajesz atrybuty obrazu i potrafisz znaleźć błędy w gotowym kodzie.
Most: od teorii do kodu
Uzupełnij opis obrazu
Wybierz brakujące atrybuty i wartość tak, aby obraz miał opis, wymiary i odroczone wczytywanie.
Atrybuty elementu img
uzupełnianie lukUzupełnij trzy brakujące fragmenty. Wybierz atrybuty oraz wartość, które pasują do opisu obrazu.
<img src="gory.jpg"
="Panorama Tatr"
width="640"
="360"
loading="">
alt opisuje treść obrazu, height podaje wysokość w pikselach, a lazy odkłada wczytanie obrazu do momentu, gdy będzie potrzebny.
Znajdź błędy w kodzie obrazu
zaznaczanie błędówZaznacz dwie linie, w których jest błąd.
Brakuje atrybutu
alt. Czytnik ekranu nie ma jak opisać obrazu.Opis powtarza nazwę pliku.
altpowinien opisywać treść, a nie adres obrazu.
W linii 2 brakuje alt, a w linii 5 opis tylko powtarza nazwę pliku. Oba błędy sprawiają, że obraz jest źle opisany dla osób, które go nie widzą.
Przykłady
Wstawiamy obraz do elementu figure i dodajemy podpis w figcaption. Obraz ma opis, wymiary i zaokrąglone narożniki.
<figure>
<img
src="../assets/gory.svg"
alt="Panorama gór z ośnieżonym szczytem i zieloną doliną"
width="640" height="360">
<figcaption>Poranek w górach — widok z południowego zbocza.</figcaption>
</figure>
figure { margin: 0; }
img { display: block; width: 100%; height: auto; border-radius: 12px; }
figcaption { margin-top: 10px; color: #526079; font-size: 14px; }
figuregrupuje obraz i podpis w jedną całość.altopisuje, co widać, a nie jak nazywa się plik.widthiheightrezerwują proporcje, a CSS dopasowuje obraz do szerokości kolumny.
Wynik: obraz i podpis tworzą jedną figurę, która jest zrozumiała także bez oglądania grafiki.
Trzy figury układamy w trzech kolumnach. Każdy obraz ma własny opis i atrybut loading="lazy".
<h2>Góry, morze i las</h2>
<div class="galeria">
<figure>
<img
src="../assets/gory.svg"
alt="Górski pejzaż ze słońcem nad szczytami"
width="640" height="360" loading="lazy">
<figcaption>Góry — poranna panorama.</figcaption>
</figure>
<figure>
<img
src="../assets/morze.svg"
alt="Morze o zachodzie słońca z żaglówką"
width="640" height="360" loading="lazy">
<figcaption>Morze — zachód słońca.</figcaption>
</figure>
<figure>
<img
src="../assets/las.svg"
alt="Las sosnowy z jasnym słońcem nad drzewami"
width="640" height="360" loading="lazy">
<figcaption>Las — letnie przedpołudnie.</figcaption>
</figure>
</div>
h2 { margin: 0 0 16px; font-size: 22px; }
.galeria { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
figure { margin: 0; }
img { display: block; width: 100%; height: auto; border-radius: 10px; }
figcaption { margin-top: 6px; color: #526079; font-size: 13px; }
- Każda figura jest osobnym elementem z własnym obrazem i podpisem.
- Grid dzieli dostępną szerokość na trzy równe kolumny.
width: 100%iheight: autoskalują obraz bez zniekształceń.
Wynik: galeria zachowuje równe odstępy, a każdy obraz ma niezależny opis i podpis.
Wideo ma atrybut controls, planszę poster i dwa warianty pliku. Pod spodem znajduje się odtwarzacz audio z tym samym atrybutem.
<h2>Film i dźwięk</h2>
<video controls width="640" height="360" poster="../assets/poster.svg">
<source src="../assets/film.mp4" type="video/mp4">
<source src="../assets/film.webm" type="video/webm">
Twoja przeglądarka nie obsługuje wideo.
</video>
<audio controls src="../assets/nagranie.mp3">
Twoja przeglądarka nie obsługuje audio.
</audio>
h2 { margin: 0 0 16px; font-size: 22px; }
video {
display: block;
width: 100%;
height: auto;
border-radius: 12px;
background: #0f172a;
}
audio { display: block; width: 100%; margin-top: 18px; }
controlsdodaje przyciski odtwarzania, pauzy i przewijania.posterpokazuje obraz zastępczy, zanim film zostanie odtworzony.- Dwa elementy
sourcedają przeglądarce wybór formatu, a tekst między znacznikami jest rozwiązaniem awaryjnym.
Wynik: użytkownik widzi planszę filmu i może od razu skorzystać z odtwarzaczy.
Oceń kod multimediów
code reviewOceń każdą linię. Dwie linie nie są w porządku.
-
Poprawnie: są przyciski sterowania i plansza przed odtworzeniem.
-
Poprawnie: format pliku jest zgodny z typem MIME.
-
Poprawnie: drugi format zwiększa szansę na odtworzenie filmu.
-
Brak tekstu awaryjnego między znacznikami. Starsza przeglądarka nie pokaże żadnej informacji.
-
Brakuje atrybutu
controls. Użytkownik nie ma przycisków do sterowania dźwiękiem. -
Poprawnie: ramka ma atrybut
title, który opisuje jej zawartość.
Spróbuj samodzielnie
-
Wstaw do strony obraz
las.svgw elemenciefigure. Dodaj podpis „Las sosnowy latem”, opisaltoraz wymiary 640 × 360.Pokaż rozwiązanie
Obraz i podpis tworzą jedną figurę. Atrybuty
widthiheightpodajemy bez jednostek.<figure> <img src="las.svg" alt="Las sosnowy w letnim słońcu" width="640" height="360"> <figcaption>Las sosnowy latem</figcaption> </figure>altopisuje treść obrazu, a nie nazwę pliku. Podpis wfigcaptionjest widoczny na stronie i może rozwinąć opis. -
Zbuduj galerię trzech obrazów:
gory.svg,morze.svgilas.svg. Każdy obraz umieść w osobnej figurze z podpisem i atrybutemloading="lazy". W CSS ustaw trzy równe kolumny i odstęp 14 px.Pokaż rozwiązanie
Najpierw tworzymy trzy figury w kontenerze, potem układamy je w gridzie.
<div class="galeria"> <figure> <img src="gory.svg" alt="Góry w porannym słońcu" width="640" height="360" loading="lazy"> <figcaption>Góry</figcaption> </figure> <figure> <img src="morze.svg" alt="Morze o zachodzie słońca" width="640" height="360" loading="lazy"> <figcaption>Morze</figcaption> </figure> <figure> <img src="las.svg" alt="Las sosnowy w letnie południe" width="640" height="360" loading="lazy"> <figcaption>Las</figcaption> </figure> </div>.galeria { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; } img { display: block; width: 100%; height: auto; }Grid dzieli szerokość na trzy kolumny, a
width: 100%skaluje każdy obraz do szerokości swojej kolumny. -
Uczeń napisał poniższy kod. Znajdź cztery błędy i zapisz poprawioną wersję.
<img src="gory.jpg"> <img src="morze.jpg" alt="Morze o zachodzie słońca" width="640" height="360"></img> <video src="film.mp4"></video> <iframe src="mapa.html"></iframe>Pokaż rozwiązanie
Błędy: pierwszy obraz nie ma
alt, drugi ma zbędny znacznik zamykający</img>, wideo nie macontrols, a ramkaiframenie matitle.<img src="gory.jpg" alt="Panorama gór" width="640" height="360"> <img src="morze.jpg" alt="Morze o zachodzie słońca" width="640" height="360"> <video controls width="640" height="360"> <source src="film.mp4" type="video/mp4"> Twoja przeglądarka nie obsługuje wideo. </video> <iframe src="mapa.html" title="Mapa dojazdu"></iframe>Element
imgjest pusty, więc nie ma znacznika zamykającego. Wideo potrzebuje przycisków sterowania, a ramka — opisu dla czytnika ekranu. -
Przygotuj odtwarzacz wideo z planszą
poster.svg, dwoma źródłami (MP4 i WebM) oraz tekstem awaryjnym. Pod nim dodaj audio z plikiemnagranie.mp3i przyciskami sterowania.Pokaż rozwiązanie
Oba odtwarzacze potrzebują atrybutu
controls. Wideo dostaje planszę i dwa warianty pliku, a tekst między znacznikami jest informacją dla starszych przeglądarek.<video controls width="640" height="360" poster="poster.svg"> <source src="film.mp4" type="video/mp4"> <source src="film.webm" type="video/webm"> Twoja przeglądarka nie obsługuje wideo. </video> <audio controls src="nagranie.mp3"> Twoja przeglądarka nie obsługuje audio. </audio>posterpokazuje obraz przed odtworzeniem, asourcepozwala przeglądarce wybrać obsługiwany format.
Obraz jest częścią treści, a nie ozdobą. Najpierw zadbaj o opis w alt, potem o wymiary i dopasowanie do ekranu. W multimediach zawsze dodawaj controls, a w ramkach iframe — atrybut title.