Materiał do egzaminu INF.03 — tworzenie stron internetowych: HTML5, CSS3, responsywność, Bootstrap

HTML i CSS: strony responsywne

Struktura dokumentu, elementy semantyczne, formularze, selektory i kaskada, model pudełkowy, Flexbox, Grid, media queries oraz Bootstrap. Wszystko w zakresie egzaminu zawodowego INF.03 i części praktycznej.

15lekcji
3zadań praktycznych
30pytań „Sprawdź się”
Spis treści

Strony internetowe zbudowane są z trzech warstw: HTML nadaje treści strukturę i znaczenie, CSS odpowiada za wygląd i układ, a JavaScript za zachowanie. Ten kurs obejmuje dwie pierwsze warstwy oraz framework Bootstrap. W egzaminie pojawiają się zarówno pytania o znaczniki, selektory i właściwości, jak i zadania, w których trzeba samodzielnie wykonać stronę według projektu graficznego.

Każda lekcja kończy się krótkimi pytaniami „Sprawdź się” ze schowaną odpowiedzią, a każda część – zadaniem praktycznym. Kod z lekcji warto przepisywać do własnych plików i sprawdzać w przeglądarce, bo najwięcej uczy samodzielne eksperymentowanie.

Część A

HTML: struktura, tekst, multimedia i formularze

Budowa dokumentu HTML5, elementy semantyczne, listy, odnośniki, obrazy, tabele i formularze z walidacją po stronie przeglądarki.

Część A, lekcja 1

Struktura dokumentu HTML5 i elementy semantyczne

HTML (HyperText Markup Language) to język znaczników opisujący strukturę i znaczenie treści strony. Wygląd zapewnia CSS, a zachowanie JavaScript. Przeglądarka pobiera plik HTML, buduje z niego drzewo DOM i dopiero wtedy wyświetla stronę.

Minimalna poprawna strona HTML5
<!DOCTYPE html>
<html lang="pl">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Moja pierwsza strona</title>
  <link rel="stylesheet" href="styl.css">
</head>
<body>
  <h1>Witaj w serwisie</h1>
  <p>To jest akapit tekstu.</p>
</body>
</html>
ElementDo czego służy
<!DOCTYPE html>wskazuje przeglądarce, że to dokument HTML5 (tryb standardów, nie „quirks”)
<html lang="pl">korzeń dokumentu; atrybut lang pomaga czytnikom ekranu i wyszukiwarkom
<head>informacje o dokumencie (niewidoczne na stronie): kodowanie, tytuł, style, skrypty
<meta charset="UTF-8">kodowanie znaków – dzięki niemu poprawnie wyświetlają się polskie litery
<meta name="viewport">skalowanie strony na urządzeniach mobilnych (podstawa responsywności)
<title>tytuł widoczny na karcie przeglądarki i w wynikach wyszukiwania
<body>cała widoczna treść strony

Elementy semantyczne

Elementy semantyczne nazywają rolę fragmentu strony, więc ułatwiają dostępność (nawigacja czytnikiem ekranu) i pozycjonowanie. Zamiast samych <div> stosujemy:

ElementRola
<header>nagłówek strony lub sekcji (logo, tytuł)
<nav>główne menu nawigacyjne
<main>główna treść strony (tylko jeden na stronie)
<section>tematyczna sekcja treści, zwykle z nagłówkiem
<article>samodzielna całość (wpis, artykuł, komentarz)
<aside>treść poboczna (reklama, powiązane linki)
<footer>stopka strony lub sekcji
Zapamiętaj

<div> i <span> nie mają znaczenia semantycznego – służą tylko do grupowania i stylowania. Gdy istnieje element semantyczny, użyj go zamiast <div>.

Sprawdź się — zadanie 1

Do czego służy atrybut lang w elemencie html i dlaczego warto go ustawić?

Pokaż przykładową odpowiedź

Informuje o języku treści. Czytniki ekranu dobierają wymowę, a przeglądarki i wyszukiwarki lepiej rozpoznają język i oferują poprawne tłumaczenie lub sprawdzanie pisowni.

Sprawdź się — zadanie 2

Którego elementu użyjesz do menu głównego strony?

Pokaż przykładową odpowiedź

Elementu <nav>, najczęściej z listą odnośników <ul> w środku.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Uzupełnij szkielet dokumentu HTML5: deklarację typu dokumentu, język polski i kodowanie UTF-8.


<html lang="">
<head>
    <meta charset="">
    <title>Moja strona</title>
</head>
<body>
</body>
</html>
Ćwiczenie interaktywne — uzupełnij kod

Uzupełnij elementy semantyczne układu strony.

<>Nagłówek serwisu</>
<>Menu</>
<>Treść główna</>
<>Stopka</>
Ćwiczenie interaktywne — popraw kod

Dokument nie ma deklaracji typu, języka strony ani kodowania znaków. Uzupełnij je.

Ćwiczenie interaktywne — popraw kod

Element title powinien być w sekcji head, a nie między head i body. Przenieś go.

Część A, lekcja 2

Tekst, nagłówki, listy i odnośniki

Nagłówki <h1>–<h6> budują hierarchię treści. Na stronie jest zwykle jeden <h1>, a kolejne poziomy nie powinny być pomijane (po h2 następuje h3, nie h5). Nagłówków nie używamy do powiększania tekstu – od tego jest CSS.

ZnacznikZnaczenieUwagi
<p>akapitprzeglądarka dodaje odstępy nad i pod akapitem
<strong>, <em>ważny tekst (pogrubienie), podkreślenie znaczenia (kursywa)nazywają znaczenie; <b> i <i> to tylko wygląd
<br>łamanie wierszaznacznik pusty (bez zamknięcia)
<hr>tematyczna linia podziału
<blockquote>, <q>cytat blokowy i krótki
<pre>, <code>tekst sformatowany, fragment kodu<pre> zachowuje spacje i nowe linie

Listy

Trzy rodzaje list
<ul>                      <!-- lista nieuporządkowana (punktowana) -->
  <li>HTML</li>
  <li>CSS</li>
</ul>
<ol type="1" start="3">   <!-- lista uporządkowana (numerowana) -->
  <li>Trzeci krok</li>
  <li>Czwarty krok</li>
</ol>
<dl>                      <!-- lista definicji -->
  <dt>HTML</dt><dd>język znaczników</dd>
</dl>

Odnośniki

Rodzaje odnośników
<a href="kontakt.html">Kontakt</a>                    <!-- względny -->
<a href="https://mti.edu.pl" target="_blank" rel="noopener">Szkoła</a>  <!-- bezwzględny, nowa karta -->
<a href="#cennik">Przejdź do cennika</a>               <!-- kotwica w tej samej stronie -->
<a href="mailto:biuro@firma.pl">Napisz do nas</a>      <!-- program pocztowy -->
<a href="tel:+48221234567">Zadzwoń</a>
Ścieżki względne i bezwzględne

Ścieżka względna (img/logo.png, ../index.html) zależy od położenia pliku i działa po przeniesieniu całego serwisu. Ścieżka bezwzględna (https://domena.pl/img/logo.png lub /img/logo.png) wskazuje stałe miejsce. .. oznacza katalog nadrzędny.

Sprawdź się — zadanie 1

Czym różni się <strong> od <b>?

Pokaż przykładową odpowiedź

<strong> oznacza tekst ważny znaczeniowo (czytniki ekranu mogą go zaakcentować), a <b> tylko pogrubia wygląd bez nadawania znaczenia.

Sprawdź się — zadanie 2

Jak zapisać odnośnik, który otwiera się w nowej karcie?

Pokaż przykładową odpowiedź

<a href="adres" target="_blank" rel="noopener">opis</a>. Atrybut rel="noopener" chroni przed dostępem nowej karty do strony źródłowej.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Uzupełnij znaczniki: akapit, wyróżnienie, lista numerowana i jej element.

<h1>Przepisy</h1>
<>Składniki: <strong>mąka</strong> i <>cukier</em>.</p>
<>
    <>Wymieszaj</li>
    <li>Upiecz</li>
</ol>
Ćwiczenie interaktywne — uzupełnij kod

Uzupełnij odnośniki: do pliku kontakt.html w nowej karcie oraz do poczty.

< ="kontakt.html" ="_blank">Kontakt</a>
<a href="jan@example.pl">Napisz do nas</a>
Ćwiczenie interaktywne — popraw kod

Odnośnik nie działa, bo atrybut z adresem ma złą nazwę. Popraw go.

Ćwiczenie interaktywne — popraw kod

Lista punktowana jest zbudowana ze złych znaczników: powinna być lista nienumerowana z elementami li.

Część A, lekcja 3

Obrazy i multimedia

Obraz, rysunek z podpisem i obraz responsywny
<img src="img/kot.jpg" alt="Szary kot śpi na parapecie" width="400" height="300">

<figure>
  <img src="img/wykres.png" alt="Wykres sprzedaży w 2025 roku">
  <figcaption>Rys. 1. Sprzedaż w 2025 roku</figcaption>
</figure>

<picture>
  <source media="(min-width: 800px)" srcset="img/baner-duzy.jpg">
  <img src="img/baner-maly.jpg" alt="Baner reklamowy">
</picture>
  • alt – tekst alternatywny, obowiązkowy: czytany przez czytniki ekranu i wyświetlany, gdy obraz się nie załaduje. Obrazy czysto ozdobne dostają alt="".
  • width i height – rezerwują miejsce, więc strona nie „skacze” podczas ładowania.
  • <figure> + <figcaption> – obraz z podpisem.
  • <picture>, srcset – różne pliki dla różnych ekranów.

Formaty plików graficznych na stronach

FormatTypZastosowanie
JPEG (.jpg)rastrowy, stratna kompresjazdjęcia; brak przezroczystości
PNGrastrowy, bezstratnygrafiki z przezroczystością, zrzuty ekranu, logo rastrowe
GIFrastrowy, 256 kolorówproste animacje
SVGwektorowylogo, ikony, wykresy – skalują się bez utraty jakości, mały rozmiar
WebP / AVIFrastrowy, nowoczesna kompresjazdjęcia i grafiki mniejsze od JPEG/PNG przy podobnej jakości

Dźwięk, wideo i osadzanie

Elementy multimedialne
<video controls width="640" poster="okladka.jpg">
  <source src="film.mp4" type="video/mp4">
  <source src="film.webm" type="video/webm">
  Twoja przeglądarka nie obsługuje elementu video.
</video>

<audio controls src="nagranie.mp3"></audio>

<iframe src="https://www.youtube.com/embed/ID" title="Film instruktażowy" width="560" height="315" allowfullscreen></iframe>
Dostępność multimediów

Filmy powinny mieć napisy (<track kind="captions">), nagrania audio transkrypcję, a <iframe> atrybut title. Nie włączaj automatycznego odtwarzania z dźwiękiem.

Sprawdź się — zadanie 1

Jakiego formatu użyjesz do logo, które ma być ostre na każdym ekranie?

Pokaż przykładową odpowiedź

Formatu wektorowego SVG, bo skaluje się bez utraty jakości.

Sprawdź się — zadanie 2

Co oznacza pusty atrybut alt (alt="")?

Pokaż przykładową odpowiedź

Że obraz jest wyłącznie ozdobny, więc czytnik ekranu go pominie. Obrazy niosące treść muszą mieć opisowy tekst alternatywny.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Wstaw obraz rower.jpg z opisem alternatywnym i szerokością 300 pikseli.

< ="img/rower.jpg" ="Rower górski" width="300">
Ćwiczenie interaktywne — uzupełnij kod

Obraz z podpisem: uzupełnij elementy figure i figcaption.

<>
    <img src="img/rzym.jpg" alt="Koloseum">
    <>Koloseum w Rzymie</>
</>
Ćwiczenie interaktywne — uzupełnij kod

Odtwarzacz wideo z przyciskami sterowania i źródłem w formacie MP4.

<video  width="400">
    < src="film.mp4" type="video/mp4">
</video>
Ćwiczenie interaktywne — popraw kod

Element img jest pusty: nie ma zawartości ani znacznika zamykającego, a opis powinien być w atrybucie alt. Popraw kod.

Ćwiczenie interaktywne — popraw kod

Odtwarzacz audio nie ma przycisków sterowania. Dodaj odpowiedni atrybut.

Część A, lekcja 4

Tabele

Tabela z nagłówkami, scaleniem komórek i podpisem
<table>
  <caption>Plan lekcji – poniedziałek</caption>
  <thead>
    <tr><th scope="col">Godzina</th><th scope="col">Przedmiot</th><th scope="col">Sala</th></tr>
  </thead>
  <tbody>
    <tr><td>8:00</td><td>Bazy danych</td><td>12</td></tr>
    <tr><td>8:55</td><td colspan="2">Zajęcia wychowawcze</td></tr>
  </tbody>
  <tfoot>
    <tr><td colspan="3">Zmiany planu na stronie szkoły</td></tr>
  </tfoot>
</table>
Element / atrybutZnaczenie
<table>, <tr>tabela i wiersz
<th>, <td>komórka nagłówkowa i zwykła komórka
colspanscala komórki w poziomie (w kolumnach)
rowspanscala komórki w pionie (w wierszach)
<thead>, <tbody>, <tfoot>sekcje nagłówkowa, główna i podsumowania
<caption>podpis tabeli
scope="col|row"wskazuje, czego dotyczy komórka nagłówkowa (dostępność)
Tabele nie służą do układu strony

Tabel używamy do danych tabelarycznych. Układ strony (kolumny, menu) tworzymy w CSS (Flexbox, Grid). Wygląd tabeli (ramki, kolory, border-collapse) ustawiamy w CSS, nie atrybutami HTML.

Sprawdź się — zadanie 1

Jak scalić dwie komórki w jednym wierszu?

Pokaż przykładową odpowiedź

Atrybutem colspan="2" w pierwszej z nich (i usunięciem drugiej komórki).

Sprawdź się — zadanie 2

Po co stosować th z atrybutem scope?

Pokaż przykładową odpowiedź

Aby czytnik ekranu wiedział, że komórka jest nagłówkiem kolumny lub wiersza i mógł ją powiązać z danymi.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Uzupełnij tabelę: wiersz nagłówkowy z komórkami th i wiersz z danymi.

<>
    <>
        <>Imię</th>
        <th>Wiek</th>
    </tr>
    <tr>
        <>Anna</td>
        <td>17</td>
    </tr>
</table>
Ćwiczenie interaktywne — uzupełnij kod

Połącz komórki: nagłówek na dwie kolumny i komórkę na dwa wiersze.

<tr><th ="2">Dane</th></tr>
<tr><td ="2">Anna</td><td>17</td></tr>
Ćwiczenie interaktywne — popraw kod

Komórki nagłówkowe zostały zapisane jako zwykłe komórki. Zamień je na właściwe znaczniki.

Ćwiczenie interaktywne — popraw kod

Atrybut łączący komórki w poziomie ma literówkę. Popraw go.

Część A, lekcja 5

Formularze HTML i walidacja po stronie przeglądarki

Przykładowy formularz rejestracji
<form action="rejestracja.php" method="post">
  <fieldset>
    <legend>Dane konta</legend>

    <label for="imie">Imię</label>
    <input type="text" id="imie" name="imie" required minlength="2" maxlength="40">

    <label for="mail">E-mail</label>
    <input type="email" id="mail" name="mail" required placeholder="jan@szkola.pl">

    <label for="wiek">Wiek</label>
    <input type="number" id="wiek" name="wiek" min="16" max="99">

    <label for="miasto">Miasto</label>
    <select id="miasto" name="miasto">
      <option value="">— wybierz —</option>
      <option value="waw">Warszawa</option>
      <option value="rad">Radom</option>
    </select>

    <label><input type="checkbox" name="regulamin" required> Akceptuję regulamin</label>

    <label for="opis">Krótki opis</label>
    <textarea id="opis" name="opis" rows="4" cols="40"></textarea>

    <button type="submit">Zarejestruj</button>
    <button type="reset">Wyczyść</button>
  </fieldset>
</form>
PoleOpis
text, password, email, url, tel, searchpola tekstowe (różne klawiatury i sprawdzanie formatu)
number, rangeliczba, suwak; atrybuty min, max, step
date, time, datetime-local, colorwybieraki daty, czasu i koloru
checkboxpole wyboru – wiele odpowiedzi
radioprzyciski opcji – jedna odpowiedź w grupie (wspólny name)
file, hiddenwysyłanie pliku (potrzebne enctype="multipart/form-data"); pole ukryte
<select>, <textarea>lista rozwijana, wieloliniowe pole tekstowe

Metody GET i POST

MetodaJak przesyła daneKiedy stosować
GETw adresie URL (?imie=Jan&wiek=17)wyszukiwanie, filtrowanie – dane nie są wrażliwe, można zapisać adres
POSTw treści żądania (niewidoczne w adresie)logowanie, rejestracja, zmiany danych, wysyłanie plików

Walidacja HTML5

  • required – pole wymagane,
  • pattern="[0-9]{2}-[0-9]{3}" – wyrażenie regularne (np. kod pocztowy),
  • min, max, minlength, maxlength – zakresy,
  • type="email" – sprawdza format adresu.
Walidacja w przeglądarce nie wystarczy

Użytkownik może wyłączyć JavaScript lub wysłać żądanie bez przeglądarki. Dane z formularza zawsze trzeba sprawdzić jeszcze raz po stronie serwera (np. w PHP).

Etykiety

Każde pole powinno mieć <label for="id"> powiązany z id pola. Kliknięcie etykiety aktywuje pole, a czytnik ekranu wie, czego dotyczy.

Sprawdź się — zadanie 1

Czym różni się radio od checkbox?

Pokaż przykładową odpowiedź

Radio w grupie o wspólnym name pozwala wybrać tylko jedną opcję, a checkbox pozwala zaznaczyć dowolną liczbę opcji.

Sprawdź się — zadanie 2

Dlaczego do wysyłania hasła używamy metody POST, a nie GET?

Pokaż przykładową odpowiedź

Metoda GET umieszcza dane w adresie URL, który trafia do historii przeglądarki i logów serwera. POST przesyła dane w treści żądania.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Uzupełnij formularz: adres i metodę wysłania, etykietę powiązaną z polem oraz wymagane pole tekstowe.

< ="dodaj.php" method="post">
    < ="imie">Imię:</label>
    <input type="" id="imie" name="imie" >
    <input type="submit" value="Wyślij">
</form>
Ćwiczenie interaktywne — uzupełnij kod

Lista rozwijana i przyciski radio: radia jednej grupy mają wspólną nazwę.

< name="kraj">
    < value="pl">Polska</option>
    <option value="de">Niemcy</option>
</select>
<input type="radio" ="rozmiar" value="s"> S
<input type="radio" ="rozmiar" value="m"> M
Ćwiczenie interaktywne — popraw kod

Pole nie ma typu odpowiedniego do adresu e-mail ani nazwy, więc dane nie zostaną wysłane. Popraw znacznik (typ email i nazwa mail).

Ćwiczenie interaktywne — popraw kod

Etykieta nie jest powiązana z polem: wartość atrybutu for musi być taka sama jak id pola. Popraw kod.

Zadanie praktyczne

Strona wizytówka z formularzem kontaktowym

Szacowany czas: 45 minZakres: Lekcje 1–5Forma: pliki index.html i kontakt.html

Zadanie

Przygotuj dwustronicowy serwis wizytówkę firmy usługowej (np. serwis komputerowy). Strony mają poprawną strukturę semantyczną i wspólne menu.

Założenia

  • Plik index.html: header z logo i nav, main z sekcjami „O nas” i „Oferta” (lista punktowana), footer.
  • W sekcji „Oferta” dodaj tabelę cennika z nagłówkami (thead, th scope) i jedną scaloną komórką.
  • Dodaj obraz z poprawnym alt, a logo w figure z podpisem.
  • Plik kontakt.html: formularz (imię, e-mail, temat jako lista rozwijana, wiadomość, zgoda – checkbox) z etykietami i atrybutami required, wysyłany metodą POST.
  • Obie strony przechodzą walidację w narzędziu W3C Validator bez błędów.

Ocenie podlegać będzie

  • poprawna struktura dokumentu i elementy semantyczne,
  • tabela i obrazy z atrybutami dostępności,
  • formularz: typy pól, etykiety, walidacja HTML5,
  • działające odnośniki względne,
  • brak błędów w walidatorze.
Wskazówki
  • Szkielet dokumentu — Lekcja 1, formularze — Lekcja 5.
  • Menu wstaw w <nav> jako listę <ul>.
  • Walidator: validator.w3.org (wklej kod lub wgraj plik).

Część B

CSS: wygląd, układ i responsywność

Selektory, kaskada, model pudełkowy, typografia, Flexbox, Grid, media queries oraz przejścia i animacje.

Część B, lekcja 6

Składnia CSS i selektory

CSS (Cascading Style Sheets) opisuje wygląd elementów HTML. Reguła składa się z selektora (do czego) i deklaracji (jakie właściwości i wartości):

Reguła CSS
selektor {
  właściwość: wartość;
  inna-właściwość: wartość;
}

h1 { color: navy; font-size: 2rem; }
SelektorPrzykładWybiera
typu (elementu)pwszystkie akapity
klasy.ramkaelementy z class="ramka" (klasy można powtarzać)
identyfikatora#menujeden element z id="menu" (id jest unikalne)
uniwersalny*wszystkie elementy
grupowyh1, h2, h3kilka selektorów naraz
potomkanav awszystkie a wewnątrz nav (na dowolnej głębokości)
dzieckaul > litylko bezpośrednie dzieci
sąsiadah2 + pakapit bezpośrednio po h2
rodzeństwah2 ~ pwszystkie akapity po h2 w tym samym rodzicu
atrybutua[target="_blank"], input[type=text]elementy z danym atrybutem lub wartością
złożonyp.uwagaakapity z klasą uwaga

Pseudoklasy i pseudoelementy

RodzajPrzykładZnaczenie
pseudoklasaa:hoverelement, nad którym jest kursor
pseudoklasaa:visited, input:focusodwiedzony odnośnik, pole z fokusem
pseudoklasali:first-child, tr:nth-child(2n)pierwszy element, co drugi wiersz
pseudoelementp::first-line, p::first-letterpierwszy wiersz, pierwsza litera
pseudoelementa::after, h2::beforewstawiona treść (content: "→")
Dwa dwukropki

Pseudoklasy zapisujemy z jednym dwukropkiem (:hover), a pseudoelementy z dwoma (::before).

Sprawdź się — zadanie 1

Czym różni się selektor klasy od selektora identyfikatora?

Pokaż przykładową odpowiedź

Klasa (.nazwa) może być użyta na wielu elementach, a identyfikator (#nazwa) powinien wystąpić tylko raz w dokumencie. Identyfikator ma też większą specyficzność.

Sprawdź się — zadanie 2

Co wybiera selektor ul > li?

Pokaż przykładową odpowiedź

Tylko te elementy li, które są bezpośrednimi dziećmi ul.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Napisz reguły CSS: dla nagłówka h1, dla klasy lista i dla elementu o identyfikatorze menu.

 {
    : navy;
}
lista { margin: 0; }
menu { padding: 10px; }
Ćwiczenie interaktywne — uzupełnij kod

Selektory złożone: elementy li wewnątrz nav, bezpośrednie dzieci listy oraz stan najechania.

nav  { color: red; }
ul  li { color: blue; }
a { color: green; }
Ćwiczenie interaktywne — uzupełnij kod

Podłącz arkusz stylów styl.css do strony.

< ="stylesheet" ="styl.css">
Ćwiczenie interaktywne — popraw kod

W regule brakuje dwukropka i średnika. Popraw ją.

Ćwiczenie interaktywne — popraw kod

Selektor klasy musi zaczynać się od kropki, a identyfikatora od znaku #. Popraw selektory.

Część B, lekcja 7

Kaskada, dziedziczenie i specyficzność

Style można podłączyć na trzy sposoby:

SposóbZapisUwagi
zewnętrzny<link rel="stylesheet" href="styl.css"> w headnajlepszy: jeden plik dla całego serwisu, cache przeglądarki
wewnętrzny<style> ... </style> w headstyl jednej strony
lokalny (inline)<p style="color:red">jeden element; trudny w utrzymaniu

Gdy kilka reguł dotyczy tego samego elementu, o wyniku decyduje kaskada: najpierw ważność (!important), potem specyficzność selektora, a przy równej specyficzności – kolejność (późniejsza reguła wygrywa).

SelektorSiła (inline - id - klasy - elementy)
p0-0-0-1
.uwaga, [type=text], :hover0-0-1-0
#menu0-1-0-0
style="..." (inline)1-0-0-0
nav ul li a.aktywny0-0-1-4

Dziedziczenie: niektóre właściwości przechodzą z elementu nadrzędnego na potomne (np. color, font-family, line-height, text-align), a inne nie (np. margin, border, background). Wymusić dziedziczenie można wartością inherit.

Unikaj !important

!important łamie normalną kaskadę i utrudnia późniejsze zmiany. Lepiej zmienić selektor lub kolejność reguł.

Sprawdź się — zadanie 1

Który kolor otrzyma akapit: p { color: red; } poniżej .opis { color: blue; }, jeśli akapit ma klasę opis?

Pokaż przykładową odpowiedź

Niebieski: selektor klasy ma większą specyficzność niż selektor elementu, niezależnie od kolejności.

Sprawdź się — zadanie 2

Którą właściwość dziedziczy element potomny: color czy border?

Pokaż przykładową odpowiedź

color jest dziedziczone, a border nie.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Ustaw kolor i czcionkę w elemencie body, aby odziedziczyły je elementy wewnątrz.

body {
    : #333;
    : Arial, sans-serif;
}
Ćwiczenie interaktywne — uzupełnij kod

Dodaj styl najechania na odnośnik; reguła stanu musi stać po regule podstawowej.

a { color: blue; }
a { color: red; }
Ćwiczenie interaktywne — popraw kod

W CSS komentarze zapisujemy inaczej niż w innych językach. Popraw zapis komentarza.

Ćwiczenie interaktywne — uzupełnij kod

Wymuś kolor niezależnie od specyficzności innych reguł.

p { color: red ; }

Część B, lekcja 8

Model pudełkowy i jednostki

Każdy element HTML jest dla CSS prostokątnym pudełkiem. Od środka na zewnątrz tworzą je: content (treść), padding (wypełnienie), border (obramowanie) i margin (margines, odstęp od sąsiadów).

Model pudełkowy w praktyce
* { box-sizing: border-box; }   /* width obejmuje padding i border */

.karta {
  width: 300px;
  padding: 16px;                  /* wszystkie strony */
  border: 2px solid #1d4ed8;
  margin: 12px auto;              /* góra/dół 12px, lewo/prawo auto (wyśrodkowanie) */
}
/* skróty: margin: góra prawo dół lewo;  margin: pion poziom; */
box-sizing

Domyślnie (content-box) szerokość width dotyczy samej treści, a padding i border się dodają, więc element jest szerszy. Przy box-sizing: border-box width obejmuje treść, padding i border – obliczenia są prostsze.

Wartość displayZachowanie
blockzajmuje całą szerokość, zaczyna od nowego wiersza (np. div, p, h1)
inlinepłynie w tekście, ignoruje width/height (np. span, a)
inline-blockpłynie w tekście, ale przyjmuje wymiary
noneelement znika i nie zajmuje miejsca (w przeciwieństwie do visibility:hidden)
flex, gridkontener układu (kolejne lekcje)

Jednostki i kolory

JednostkaZnaczenieKiedy
pxpiksel (jednostka bezwzględna)ramki, cienie, małe stałe wymiary
%procent wymiaru rodzicaszerokości elastyczne
emwielkość czcionki elementu (lub rodzica)odstępy zależne od tekstu
remwielkość czcionki elementu htmlczcionki i odstępy skalowane przez użytkownika
vw, vh1% szerokości / wysokości oknapełnoekranowe sekcje

Kolor zapisujemy nazwą (navy), szesnastkowo (#1d4ed8, skrót #fff), jako rgb(29, 78, 216), z przezroczystością rgba(29,78,216,.5) lub hsl(224, 76%, 48%).

Zwijanie marginesów

Pionowe marginesy sąsiednich elementów blokowych zwijają się: odstęp między dwoma akapitami z margin: 20px wynosi 20px, a nie 40px.

Sprawdź się — zadanie 1

Element ma width: 200px; padding: 10px; border: 5px solid i box-sizing: content-box. Jaka jest jego szerokość na stronie?

Pokaż przykładową odpowiedź

200 + 2·10 + 2·5 = 230 px. Przy border-box byłoby 200 px.

Sprawdź się — zadanie 2

Czym różni się rem od em?

Pokaż przykładową odpowiedź

rem odnosi się do wielkości czcionki elementu html (stałe odniesienie), a em do wielkości czcionki bieżącego elementu lub jego rodzica, więc może się kumulować w zagnieżdżeniach.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Ustaw model pudełkowy: margines, wcięcie, ramkę oraz liczenie szerokości razem z ramką.

div {
    : 10px;
    : 15px;
    : 1px solid black;
    box-sizing: ;
}
Ćwiczenie interaktywne — uzupełnij kod

Wyśrodkuj blok o stałej szerokości w poziomie.

#strona {
    width: 800px;
    margin: 0 ;
}
Ćwiczenie interaktywne — popraw kod

Wartości liczbowe w CSS wymagają jednostek (poza zerem). Dopisz jednostki px.

Ćwiczenie interaktywne — uzupełnij kod

Dobierz jednostki: względną do czcionki elementu głównego, procent szerokości rodzica i wysokość okna.

p { font-size: 1.2; }
.kolumna { width: 50; }
.okno { height: 100; }

Część B, lekcja 9

Tekst, tło, czcionki i efekty

Typografia i tło
body {
  font-family: "Segoe UI", Roboto, Arial, sans-serif;   /* lista zastępcza */
  font-size: 1rem;
  line-height: 1.6;              /* odstęp między wierszami */
  color: #1f2937;
  background: #f8fafc url("tlo.png") no-repeat center / cover;
}
h1 { text-align: center; text-transform: uppercase; letter-spacing: .05em; }
a { color: #1d4ed8; text-decoration: none; }
a:hover { text-decoration: underline; }
WłaściwośćOpis
font-family, font-size, font-weight, font-stylekrój, rozmiar, grubość, kursywa
line-height, letter-spacing, text-indentinterlinia, odstęp liter, wcięcie pierwszego wiersza
text-align, text-decoration, text-transformwyrównanie, podkreślenie, wielkość liter
background-color, background-image, background-repeat, background-size, background-positiontło
border, border-radiusobramowanie i zaokrąglenie rogów
box-shadow, text-shadowcienie: przesunięcie-x przesunięcie-y rozmycie kolor
opacityprzezroczystość całego elementu (0–1)
Czcionki internetowe
/* własna czcionka */
@font-face {
  font-family: "MojaCzcionka";
  src: url("fonts/moja.woff2") format("woff2");
  font-display: swap;
}
/* z Google Fonts w HTML:
   <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet"> */
body { font-family: "MojaCzcionka", sans-serif; }
  • Kroje: szeryfowe (Times – do druku), bezszeryfowe (Arial, Roboto – do ekranu), monospace (Courier – kod).
  • Używaj listy zastępczej czcionek, a na końcu rodziny ogólnej (sans-serif).
  • Dbaj o kontrast tekstu z tłem (WCAG: min. 4,5:1 dla zwykłego tekstu).
Sprawdź się — zadanie 1

Do czego służy lista nazw czcionek w font-family?

Pokaż przykładową odpowiedź

Przeglądarka używa pierwszej dostępnej czcionki z listy. Dzięki temu strona wygląda poprawnie także wtedy, gdy preferowana czcionka nie jest zainstalowana.

Sprawdź się — zadanie 2

Jak zaokrąglić rogi przycisku i dodać mu cień?

Pokaż przykładową odpowiedź

border-radius: 8px; box-shadow: 0 2px 6px rgba(0,0,0,.25);

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Sformatuj tekst: krój pisma, wyrównanie do środka, brak podkreślenia i interlinia.

p {
    font-family: Arial, ;
    text-align: ;
    text-decoration: ;
    line-height: 1.5;
}
Ćwiczenie interaktywne — uzupełnij kod

Ustaw tło: kolor, obraz z pliku i dopasowanie obrazu do elementu.

div {
    background-: #eee;
    background-image: ("tlo.jpg");
    background-size: ;
}
Ćwiczenie interaktywne — popraw kod

W regule są dwie niepoprawne nazwy lub wartości: nie ma właściwości font-colour, a wyrównanie middle nie istnieje. Popraw je.

Ćwiczenie interaktywne — uzupełnij kod

Zaokrąglij rogi i dodaj cień.

div {
    : 8px;
    : 2px 2px 5px gray;
}

Część B, lekcja 10

Układ strony: Flexbox

Flexbox układa elementy w jednym wymiarze (wiersz lub kolumna). Włączamy go na kontenerze przez display: flex, a jego dzieci stają się elementami elastycznymi.

Menu poziome we Flexbox
nav ul {
  display: flex;
  justify-content: space-between;   /* wzdłuż osi głównej */
  align-items: center;              /* w poprzek */
  gap: 16px;
  list-style: none;
  padding: 0;
}
.kolumny { display: flex; flex-wrap: wrap; gap: 20px; }
.kolumny > .karta { flex: 1 1 250px; }  /* rośnie, kurczy się, bazowo 250px */
Właściwość (kontener)Działanie
flex-directionrow (domyślnie) lub column – kierunek osi głównej
justify-contentrozmieszczenie wzdłuż osi głównej: flex-start, center, space-between, space-around
align-itemswyrównanie w poprzek osi: stretch, center, flex-start
flex-wrapczy elementy mogą przechodzić do następnego wiersza
gapodstęp między elementami
Właściwość (element)Działanie
flex-growile wolnego miejsca element może zająć
flex-shrinkczy może się kurczyć
flex-basisrozmiar bazowy
flex: 1skrót: elementy dzielą miejsce po równo
align-self, orderindywidualne wyrównanie i kolejność
Wyśrodkowanie

Wyśrodkowanie elementu w poziomie i pionie: display: flex; justify-content: center; align-items: center; na kontenerze.

Sprawdź się — zadanie 1

Jak ułożyć trzy kolumny o równej szerokości obok siebie?

Pokaż przykładową odpowiedź

Kontener display: flex, a każda kolumna flex: 1.

Sprawdź się — zadanie 2

Którą właściwością zmienisz układ z poziomego na pionowy?

Pokaż przykładową odpowiedź

flex-direction: column.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Ułóż elementy w rzędzie: kontener flex, odstęp między elementami i wyśrodkowanie w pionie.

nav {
    display: ;
    justify-content: ;
    align-items: ;
}
Ćwiczenie interaktywne — uzupełnij kod

Elementy mają ustawiać się w kolumnie, zawijać się i mieć odstęp 10 pikseli.

div {
    display: flex;
    flex-direction: ;
    flex-wrap: ;
    : 10px;
}
Ćwiczenie interaktywne — popraw kod

Wartość display nie istnieje, a właściwość justify-items nie służy do ustawiania elementów we flexboksie. Popraw kod, aby elementy były wyśrodkowane poziomo.

Ćwiczenie interaktywne — uzupełnij kod

Dziecko kontenera flex ma zająć całą wolną przestrzeń.

main { : 1; }

Część B, lekcja 11

Układ strony: Grid i pozycjonowanie

CSS Grid układa elementy w dwóch wymiarach (wiersze i kolumny jednocześnie). Jest idealny do układu całej strony.

Układ strony w Grid
.strona {
  display: grid;
  grid-template-columns: 220px 1fr;          /* stała kolumna + elastyczna */
  grid-template-areas:
    "naglowek naglowek"
    "menu     tresc"
    "stopka   stopka";
  gap: 16px;
  min-height: 100vh;
}
header { grid-area: naglowek; }
nav    { grid-area: menu; }
main   { grid-area: tresc; }
footer { grid-area: stopka; }

.galeria { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }

Jednostka fr oznacza ułamek wolnego miejsca. repeat(3, 1fr) tworzy trzy równe kolumny.

Pozycjonowanie

positionZachowanie
staticdomyślne, zgodnie z przepływem dokumentu
relativeprzesunięcie względem własnego miejsca (top/left), miejsce zostaje zajęte; punkt odniesienia dla absolute
absoluteusuwa element z przepływu; pozycja względem najbliższego przodka z position innym niż static
fixedprzyklejony do okna (np. stały pasek menu)
stickyzachowuje się jak relative, a po przewinięciu „przykleja się”

Kolejność nakładania ustawia z-index (działa na elementach pozycjonowanych). Dawny sposób układu, float, zostaje do opływania obrazów tekstem; czyścimy go clear.

Sprawdź się — zadanie 1

Czym Grid różni się od Flexboxa?

Pokaż przykładową odpowiedź

Flexbox układa elementy w jednym wymiarze (wiersz albo kolumna), a Grid w dwóch jednocześnie (wiersze i kolumny), więc lepiej nadaje się do całego układu strony.

Sprawdź się — zadanie 2

Co oznacza grid-template-columns: 200px 1fr 1fr?

Pokaż przykładową odpowiedź

Trzy kolumny: pierwsza o stałej szerokości 200 px, pozostałe dwie dzielą po równo resztę miejsca.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Utwórz siatkę o trzech równych kolumnach i odstępie 10 pikseli.

.galeria {
    display: ;
    grid-template-columns: ;
    gap: 10px;
}
Ćwiczenie interaktywne — uzupełnij kod

Pozycjonowanie: rodzic odniesienia i element w prawym górnym rogu.

#ramka { position: ; }
#znaczek {
    position: ;
    top: 0;
    right: 0;
}
Ćwiczenie interaktywne — uzupełnij kod

Element ma być rozciągnięty na dwie kolumny siatki, a pasek przypięty do dołu okna.

.szeroki { grid-column: ; }
#pasek { position: ; bottom: 0; }
Ćwiczenie interaktywne — popraw kod

Nazwa właściwości siatki jest zapisana w liczbie pojedynczej, a w deklaracji brakuje średnika. Popraw kod.

Część B, lekcja 12

Responsywność i media queries

Strona responsywna dopasowuje układ do szerokości ekranu (telefon, tablet, komputer). Opiera się na trzech filarach: elastyczny układ (jednostki względne, Flexbox/Grid), elastyczne obrazy i media queries. Warunkiem jest znacznik <meta name="viewport" content="width=device-width, initial-scale=1">.

Podejście mobile-first
/* styl bazowy: telefon – jedna kolumna */
.kolumny { display: grid; grid-template-columns: 1fr; gap: 16px; }
img { max-width: 100%; height: auto; }      /* obrazy nie wychodzą poza kontener */

/* tablet */
@media (min-width: 600px) {
  .kolumny { grid-template-columns: repeat(2, 1fr); }
}
/* komputer */
@media (min-width: 992px) {
  .kolumny { grid-template-columns: repeat(3, 1fr); }
  nav ul { flex-direction: row; }
}
/* druk i preferencje użytkownika */
@media print { nav, footer { display: none; } }
@media (prefers-color-scheme: dark) { body { background: #111; color: #eee; } }
PojęcieWyjaśnienie
breakpoint (punkt graniczny)szerokość, przy której zmienia się układ (np. 600 px, 992 px)
mobile-firstnajpierw styl dla telefonu, potem rozszerzenia przez min-width
desktop-firstnajpierw styl dla komputera, potem ograniczenia przez max-width
max-width: 100% dla obrazówobraz skaluje się w dół do szerokości kontenera
picture/srcsetróżne pliki obrazu dla różnych ekranów i gęstości pikseli
Testowanie

Sprawdzaj stronę w narzędziach deweloperskich przeglądarki (F12 → tryb urządzenia), na prawdziwych telefonach i w różnych przeglądarkach. Wymiary dotykowych elementów powinny wynosić min. ok. 44×44 px.

Sprawdź się — zadanie 1

Po co jest znacznik meta viewport?

Pokaż przykładową odpowiedź

Informuje przeglądarkę mobilną, że ma użyć szerokości urządzenia i skali 1. Bez niego telefon wyświetla stronę jak na szerokim ekranie i pomniejsza ją, więc media queries nie działają zgodnie z oczekiwaniem.

Sprawdź się — zadanie 2

Czym jest podejście mobile-first?

Pokaż przykładową odpowiedź

Tworzeniem stylów najpierw dla małych ekranów, a następnie dodawaniem reguł dla większych przez zapytania min-width.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Dodaj w nagłówku strony znacznik viewport, aby strona skalowała się na telefonach.

<meta name="" content="width=, initial-scale=1">
Ćwiczenie interaktywne — uzupełnij kod

Na ekranach o szerokości do 600 pikseli ukryj menu.

 (: 600px) {
    .menu { display: none; }
}
Ćwiczenie interaktywne — popraw kod

W regule media brakuje dwukropka w warunku i nawiasu zamykającego. Popraw ją.

Ćwiczenie interaktywne — uzupełnij kod

Obrazy mają się skalować do szerokości kontenera z zachowaniem proporcji.

img {
    max-width: ;
    height: ;
}

Część B, lekcja 13

Zmienne CSS, przejścia i animacje

Zmienne (custom properties)
:root {
  --kolor-glowny: #1d4ed8;
  --odstep: 1rem;
}
.przycisk { background: var(--kolor-glowny); padding: var(--odstep); }
Przejścia i animacje
.przycisk {
  transition: background .25s ease, transform .25s ease;
}
.przycisk:hover { background: #1e40af; transform: translateY(-2px); }

@keyframes pulsuj {
  0%   { transform: scale(1); }
  50%  { transform: scale(1.08); }
  100% { transform: scale(1); }
}
.alarm { animation: pulsuj 1.2s ease-in-out infinite; }

@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}
WłaściwośćOpis
transitionpłynna zmiana wartości po zmianie stanu (np. :hover)
transformtranslate, scale, rotate, skew – bez wpływu na układ otoczenia
@keyframes + animationanimacja złożona z kroków
Dostępność ruchu

Animacje mogą szkodzić osobom wrażliwym (zawroty głowy, epilepsja). Szanuj ustawienie prefers-reduced-motion i nie stosuj migotania szybszego niż 3 razy na sekundę.

Sprawdź się — zadanie 1

Do czego służą zmienne CSS?

Pokaż przykładową odpowiedź

Pozwalają zapisać wartość (kolor, odstęp) w jednym miejscu i używać jej wielokrotnie przez var(--nazwa), więc zmiana motywu wymaga edycji jednej linii.

Sprawdź się — zadanie 2

Czym różni się transition od animation?

Pokaż przykładową odpowiedź

Przejście płynnie łączy dwa stany po ich zmianie (np. po najechaniu), a animacja z @keyframes może mieć wiele kroków i uruchamia się samodzielnie.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Zdefiniuj zmienną CSS w selektorze :root i użyj jej w regule.

 { : #0a5; }
a { color: (--kolor); }
Ćwiczenie interaktywne — uzupełnij kod

Płynna zmiana tła przy najechaniu oraz powiększenie elementu.

button { : background 0.3s ease; }
button:hover {
    background: orange;
    transform: (1.1);
}
Ćwiczenie interaktywne — uzupełnij kod

Zdefiniuj animację zanikania i przypisz ją elementowi.

 znikaj {
     { opacity: 1; }
     { opacity: 0; }
}
.komunikat { : znikaj 2s infinite; }
Ćwiczenie interaktywne — popraw kod

Zmienna CSS jest wywołana niepoprawnie: nazwa zmiennej zaczyna się od dwóch myślników. Popraw odwołanie.

Zadanie praktyczne

Responsywna strona firmowa

Szacowany czas: 60 minZakres: Lekcje 6–13Forma: pliki index.html i styl.css

Zadanie

Na podstawie strony z zadania A przygotuj zewnętrzny arkusz stylów i wykonaj responsywny projekt wizualny. Strona ma działać na telefonie (320 px), tablecie i komputerze.

Założenia

  • Arkusz styl.css podłączony elementem link; box-sizing: border-box dla wszystkich elementów; zmienne CSS na kolory.
  • Menu poziome we Flexbox, które na telefonie układa się w kolumnę (media query).
  • Sekcja „Oferta” w siatce Grid: 1 kolumna na telefonie, 2 na tablecie, 3 na komputerze.
  • Karty ofertowe z border-radius, box-shadow i efektem :hover z przejściem.
  • Obrazy skalujące się (max-width: 100%), czytelna typografia (line-height), kontrast tekstu min. 4,5:1.
  • Przetestuj stronę w trybie urządzenia w przeglądarce (F12) i opisz w 2 zdaniach przyjęte punkty graniczne.

Ocenie podlegać będzie

  • poprawne selektory i brak powtórzeń,
  • układ Flexbox i Grid,
  • responsywność (media queries, obrazy),
  • estetyka i kontrast,
  • czytelność i organizacja pliku CSS.
Wskazówki
  • Siatka kart: grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)) daje responsywność bez media query.
  • Podejście mobile-first: najpierw styl dla telefonu.
  • Lekcje 10–12.

Część C

Bootstrap i dobre praktyki

Gotowe komponenty i siatka frameworka Bootstrap oraz walidacja, testowanie i organizacja projektu.

Część C, lekcja 14

Bootstrap: siatka i gotowe komponenty

Bootstrap to najpopularniejszy framework CSS (z częścią JavaScript). Dostarcza gotową siatkę 12-kolumnową, komponenty (menu, przyciski, karty, formularze, okna modalne) i klasy pomocnicze. Podłączamy go z CDN lub z plików lokalnych:

Podłączenie i siatka
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">

<div class="container">
  <div class="row">
    <div class="col-12 col-md-6 col-lg-4">Kolumna 1</div>
    <div class="col-12 col-md-6 col-lg-4">Kolumna 2</div>
    <div class="col-12 col-md-12 col-lg-4">Kolumna 3</div>
  </div>
</div>

<button class="btn btn-primary">Zapisz</button>
<div class="alert alert-warning">Uwaga!</div>
KlasaZnaczenie
container, container-fluidkontener o stałej maksymalnej szerokości / na całą szerokość
row, col-*wiersz i kolumny; suma kolumn w wierszu to 12
col-sm-*, col-md-*, col-lg-*kolumny od danej szerokości ekranu (≥576, ≥768, ≥992 px)
btn btn-primary, btn-outline-secondaryprzyciski
navbar, card, table, form-controlmenu, karty, tabele, pola formularza
m-3, p-2, text-center, d-flex, d-none d-md-blockklasy pomocnicze: marginesy, wyrównanie, widoczność
Zalety i wady

Bootstrap przyspiesza pracę i zapewnia spójny wygląd i responsywność. Wadą jest podobny wygląd wielu stron i większa waga plików, jeśli korzystasz z niewielkiej części frameworka.

Sprawdź się — zadanie 1

Ile kolumn ma siatka Bootstrap i co oznacza klasa col-md-6?

Pokaż przykładową odpowiedź

Siatka ma 12 kolumn. col-md-6 zajmuje 6 z 12 kolumn (połowę szerokości) od szerokości ekranu md (768 px) w górę; na węższych ekranach kolumna zajmuje całą szerokość.

Sprawdź się — zadanie 2

Jak ukryć element na telefonie, a pokazać na większych ekranach?

Pokaż przykładową odpowiedź

Klasami d-none d-md-block.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Zbuduj układ w siatce Bootstrapa: kontener, wiersz i kolumna zajmująca połowę szerokości na średnich ekranach.

<div class="">
    <div class="">
        <div class="">Lewa</div>
        <div class="col-md-6">Prawa</div>
    </div>
</div>
Ćwiczenie interaktywne — uzupełnij kod

Niebieski przycisk i pasek nawigacji rozwijany od dużych ekranów.

<button class="">Zapisz</button>
<nav class=" navbar-expand-lg"></nav>
Ćwiczenie interaktywne — uzupełnij kod

Podłącz arkusz Bootstrapa z sieci CDN.

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" ="stylesheet">
Ćwiczenie interaktywne — popraw kod

Klasy Bootstrapa są przypisane w atrybucie o złej nazwie. Popraw znacznik.

Ćwiczenie interaktywne — popraw kod

Kolumny muszą być umieszczone w wierszu (row) wewnątrz kontenera. Dodaj brakujący element.

Część C, lekcja 15

Dobre praktyki, walidacja i organizacja plików

  • Rozdzielaj strukturę (HTML), wygląd (CSS) i zachowanie (JS) – w osobnych plikach.
  • Nazwy plików: małe litery, bez spacji i polskich znaków (oferta-lato.html), kodowanie UTF-8.
  • Struktura katalogów: index.html, css/, js/, img/, fonts/.
  • Klasy nazywaj według roli (.karta-oferty), nie wyglądu (.czerwony-duzy).
  • Stosuj wcięcia i komentarze (<!-- --> w HTML, /* */ w CSS).
  • Optymalizuj obrazy (właściwy format i rozmiar), minimalizuj liczbę plików i zapytań.

Walidacja i testowanie

NarzędzieCo sprawdza
W3C Markup Validation Service (validator.w3.org)poprawność składni HTML
W3C CSS Validation Service (jigsaw.w3.org/css-validator)poprawność składni CSS
Narzędzia deweloperskie przeglądarki (F12)inspekcja DOM i CSS, tryb urządzenia, konsola błędów, wydajność
Lighthousewydajność, dostępność, SEO, dobre praktyki
WAVE, axedostępność (WCAG)
Zapamiętaj

Poprawny kod to taki, który przechodzi walidację i działa w różnych przeglądarkach. Typowe błędy: niezamknięte znaczniki, brak alt, powtórzone id, brak DOCTYPE, nieprawidłowe zagnieżdżenie.

Sprawdź się — zadanie 1

Które narzędzie sprawdza poprawność składni kodu HTML?

Pokaż przykładową odpowiedź

Walidator W3C (W3C Markup Validation Service).

Sprawdź się — zadanie 2

Dlaczego nie nadajemy plikom nazw z polskimi znakami i spacjami?

Pokaż przykładową odpowiedź

Mogą powodować problemy z kodowaniem adresów URL i różnicami między systemami (np. serwery Linux rozróżniają wielkość liter), a spacje w adresach zamieniają się na %20.

Ćwiczenia interaktywne: uzupełnij i popraw kod

Wpisz brakujące fragmenty w polach albo popraw kod w oknie i kliknij „Sprawdź”. Białe znaki, rodzaj cudzysłowu i kolejność atrybutów HTML nie mają znaczenia. Rozwiązane ćwiczenia zapisują się na koncie i liczą się do odznak.

Ćwiczenie interaktywne — uzupełnij kod

Uzupełnij podstawowe elementy dostępności: opis obrazu, język strony i komentarz.

<html ="pl">
<img src="a.jpg" ="Opis zdjęcia">
 koniec sekcji -->
Ćwiczenie interaktywne — popraw kod

Zamiast przestarzałych znaczników wyglądu użyj akapitu z klasą uwaga (wygląd ustawisz w CSS).

Ćwiczenie interaktywne — popraw kod

Ścieżka do arkusza stylów wskazuje na dysk komputera autora, więc na innym komputerze nie zadziała. Użyj ścieżki względnej.

Ćwiczenie interaktywne — uzupełnij kod

Pliki są uporządkowane w folderach; wpisz ścieżki względne do arkusza i obrazu.

<link rel="stylesheet" href="">
<img src="" alt="Logo">

Zadanie praktyczne

Strona w Bootstrapie i walidacja

Szacowany czas: 40 minZakres: Lekcje 14–15Forma: plik index.html

Zadanie

Przebuduj stronę wizytówkę z zadania A z użyciem frameworka Bootstrap, a następnie zwaliduj kod i oceń jakość.

Założenia

  • Podłącz Bootstrap z CDN; użyj navbar z przyciskiem zwijania na telefonie (część JavaScript Bootstrapa).
  • Oferta w siatce: row z kartami card, col-12 col-md-6 col-lg-4.
  • Formularz kontaktowy z klasami form-control, form-label i przyciskiem btn btn-primary.
  • Zwaliduj HTML w W3C Validator i uruchom raport Lighthouse; zapisz uzyskane wyniki wydajności i dostępności.
  • Wypisz 3 zmiany, które poprawią wynik Lighthouse.

Ocenie podlegać będzie

  • poprawne użycie siatki i komponentów,
  • responsywność na 3 szerokościach,
  • walidacja kodu,
  • wnioski z raportu Lighthouse.
Wskazówki
  • Dokumentacja: getbootstrap.com/docs.
  • Menu zwijane wymaga skryptu bootstrap.bundle.min.js.
  • Lighthouse jest w narzędziach deweloperskich Chrome.