INF.03-03-26.06-SGCzerwiec 2026 · 52 kroki · ok. 92 min · 39 kryteriów z klucza
Rozwiązanie krok po kroku: Karta produktu sklepu meblowego (Wersja podstawowa)
Rozwiązanie buduje kartę produktu sklepu meblowego: baza sklep i cztery zapytania - SELECT z warunkiem i sortowaniem, widok (CREATE VIEW), funkcje agregujące z aliasami liczone na tym widoku i DELETE z dwoma warunkami - potem trzy fotele wycięte z jednej grafiki z zachowaniem przezroczystości, strony kartaProduktu.html i sklep.html, style w styl.css z oknem nakładanym na stronę (position: fixed, z-index, display: none) i skrypt JavaScript: miniatury podmieniają obraz główny, kliknięcie obrazu głównego otwiera okno z powiększeniem, a znak × je zamyka.
Kroki idą zdanie po zdaniu za treścią arkusza - przy każdym jest polecenie z arkusza, a kod pokazuje dokładnie te linie, które je spełniają. Skrypt jest najpierw pisany najprościej, jak robi to większość zdających: funkcje wywoływane atrybutem onclick i document.getElementById z tabeli 1 arkusza, a na końcu zostaje przerobiony na wersję z prawdziwych projektów: nasłuchiwacze zdarzeń, zamykanie okna klawiszem Esc i kliknięciem w tło, opisy dla czytników ekranu. W tym arkuszu nie ma PHP.
To jest wersja podstawowa. W zakładce „Nowoczesny kod (grid, JS)” jest drugi sposób rozwiązania tego samego arkusza: sekcja i artykuł na siatce CSS, skrypt w osobnym pliku z addEventListener od pierwszej linii - obie wersje są zgodne z kluczem.
Baza i grafika pochodzą z prawdziwego archiwum pliki3 (załącznik do arkusza, hasło w treści zadania). Zrzuty wyników zapytań są odtworzone z tej bazy - na egzaminie robisz je sam, z całego ekranu. Skrypt został sprawdzony w prawdziwej przeglądarce: kliknięcie trzeciej miniatury, obrazu głównego i znaku × daje dokładnie to, co pokazują ilustracje 3 i 6.
Jak liczą się punkty. Klucz ma 39 kryteriów (R.1.1 - R.5.7), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 30 punktów - można stracić 9 kryteriów i nadal zdać. Przy każdym kroku jest napisane, które kryteria spełnia; egzaminator ocenia spełnienie kryteriów z klucza, nie zgodność z tym kodem.
Suwak i strzałki obok niego - albo ←→ na klawiaturze - przechodzą krok po kroku; wyjaśnienie, pliki i podgląd zmieniają się razem z krokiem.
Lista „Etap” przenosi od razu do wybranego etapu.
„Rozwiązuję samodzielnie” chowa rozwiązanie kroku - najpierw własna próba, potem odsłonięcie.
„Tryb prezentacji” pokazuje same kroki, bez menu strony - na rzutnik.
Etap 1: Baza danych
Kroki 1-7 · po tym etapie masz 7 z 39 kryteriów (pkt)
Krok 1: Baza danych sklep
ok. 2 min
Polecenie z arkusza
Utwórz bazę danych o nazwie sklep, z zestawem polskich znaków (np. utf8_polish_ci)
Rozpakuj pliki3.7z z pulpitu (hasło #Kart@ProduKtu - z krzyżykiem na początku, małpą i wielkim K) i załóż folder z numerem zdającego. W phpMyAdmin: Nowa, nazwa sklep, porównywanie utf8_polish_ci.
Krok 2: Import tabel z pliku sklep.sql
ok. 2 min
Polecenie z arkusza
Do utworzonej bazy zaimportuj tabele z pliku sklep.sql
Zaznacz bazę sklep, potem Import → sklep.sql → Wykonaj. Powstają trzy tabele z ilustracji 1: klienci (3 osoby), meble (11 mebli) i pusta zakupy, która łączy klientów z meblami w relacji m:n. W meble pole kategoria to 1 - sofy, 2 - fotele, 3 - komody, a czyNowy to 1 dla mebla nowego i 0 dla używanego.
Krok 3: Zrzut ekranu import.png
Kryteria:
R.1.1 Wykonany import tabel do bazy danych sklep - plik import.png
ok. 2 min
Polecenie z arkusza
Wykonaj zrzut ekranu po imporcie. Zapisz zrzut w formacie PNG pod nazwą import. Nie kadruj zrzutu. Powinien on obejmować cały ekran monitora, z widocznym paskiem zadań. Na zrzucie powinny być widoczne elementy wskazujące na poprawnie wykonany import tabel
Print Screen, wklejasz do edytora grafiki i zapisujesz jako import.png. W tym arkuszu wszystkie zrzuty są w PNG - także zrzut importu (w wielu innych arkuszach import idzie do JPEG).
Typowe błędy
Wykadrowany zrzut albo zrzut bez paska zadań nie jest oceniany (uwaga w kluczu przy R.1).
Krok 4: Zapytanie 1: nowe meble do 1000 zł
Kryteria: ,
R.1.2 W pliku kwerendy.txt zapisane co najmniej jedno zapytanie SQL, wynikające z treści zadania
R.1.3 Wykonane zapytanie 1 wybierające jedynie nazwę, styl i cene tylko nowych mebli, których cena nie przekracza 1000 zł. Rekordy powinny być posortowane począwszy od ceny najniższej. W pliku z kwerendami lub na zrzucie istnieje zapis np. SELECT nazwa, styl, cena FROM meble WHERE czyNowy = 1 AND cena <= 1000 ORDER BY cena; oraz na zrzucie widoczne są dokładnie 3 wiersze, kolejno ceny: 700, 800, 1000
ok. 2 min
Polecenie z arkusza
Zapytanie 1: wybierające jedynie nazwę, styl i cenę tylko nowych mebli, których cena nie przekracza 1000 zł. Rekordy powinny być posortowane począwszy od najniższej ceny
SELECT nazwa, styl, cena - trzy pola,
FROM meble,
WHERE czyNowy = 1 AND cena <= 1000 - „nie przekracza” znaczy „mniejsza lub równa”, więc <=,
ORDER BY cena - rosnąco, to kierunek domyślny (ASC można dopisać).
Wynik: trzy meble za 700, 800 i 1000 zł - jak w kluczu. Zapytanie zapisujesz w kwerendy.txt, zrzut jako kw1.png.
Typowe błędy
Warunek cena < 1000 gubi brązową sofę za dokładnie 1000 zł - na zrzucie są wtedy 2 wiersze zamiast 3.
kwerendy.txtTekstnowy plik
-- Zapytanie 1SELECT nazwa, styl, cena FROM meble WHERE czyNowy = 1 AND cena <= 1000 ORDER BY cena;
Podgląd strony po tym kroku
Krok 5: Zapytanie 2: widok komody
Kryteria:
R.1.4 Wykonane zapytanie 2 tworzące widok o nazwie komody zawierający jedynie pola idMeble, nazwa, kategoria, cena z tabeli meble jedynie dla kategorii równej 3. W pliku z kwerendami lub na zrzucie istnieje zapis np. CREATE VIEW komody AS SELECT idMeble, nazwa, kategoria, cena FROM meble WHERE kategoria = 3; oraz na zrzucie widoczny jest widok komody z 5 rekordami o idMeble: 4, 5, 6 ,7 ,8 lub komunikat o poprawnie wykonanym zapytaniu
ok. 3 min
Polecenie z arkusza
Zapytanie 2: tworzące widok (perspektywę) o nazwie komody zawierający jedynie pola idMeble, nazwa, kategoria, cena z tabeli meble jedynie dla kategorii równej 3. W pliku ze zrzutem należy przedstawić zawartość widoku komody
Widok to zapisane zapytanie, którego można potem używać jak tabeli: CREATE VIEW komody AS i dalej zwykły SELECT z warunkiem kategoria = 3. Samo utworzenie widoku nie zwraca wierszy, dlatego arkusz każe pokazać na zrzucie jego zawartość: klikasz komody w lewym panelu (albo SELECT * FROM komody). Pięć komód o identyfikatorach 4 - 8. Zrzut: kw2.png.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT nazwa, styl, cena FROM meble WHERE czyNowy = 1 AND cena <= 1000 ORDER BY cena;-- Zapytanie 2CREATE VIEW komody AS SELECT idMeble, nazwa, kategoria, cena FROM meble WHERE kategoria = 3;
Podgląd strony po tym kroku
Krok 6: Zapytanie 3: średnia, najniższa i najwyższa cena komód
Kryteria: ,
R.1.5 W zapytaniu 3 zastosowano widok komody
R.1.6 Wykonane zapytanie 3 zliczające cenę średnią, minimalną i maksymalną. Aliasy: „Średnia cena komód”, „Minimalna”, „Maksymalna”. Średnia cena dowolnie zaokrąglona do liczby całkowitej. Zapytanie stosuje widok lub warunek. W pliku z kwerendami lub na zrzucie istnieje zapis np. SELECT ROUND(AVG(cena), 0) AS "Średnia cena komód", MIN(cena) AS "Minimalna", MAX(cena) AS "Maksymalna" FROM komody; lub ... FROM meble WHERE kategoria = 3;(AS opcjonalnie) oraz na zrzucie widoczne są wartości: 2180, 700, 4000
ok. 3 min
Polecenie z arkusza
Zapytanie 3: zliczające cenę średnią, minimalną i maksymalną. Nazwy kolumn (aliasy): Średnia cena – „Średnia cena komód”, minimalna cena – „Minimalna”, maksymalna cena – „Maksymalna”. Średnia cena powinna być dowolnie zaokrąglona do liczby całkowitej. W zapytaniu należy posłużyć się utworzonym widokiem
AVG, MIN, MAX - funkcje agregujące liczą jedną wartość z wielu wierszy,
ROUND - bez drugiego argumentu zaokrągla do całości; bez niego średnia wyszłaby jako 2180.0000,
AS "Średnia cena komód" - alias ze spacjami i polskimi literami musi być w cudzysłowach (albo odwróconych apostrofach),
FROM komody - widok zamiast tabeli, więc warunek na kategorię jest już w nim zaszyty.
Wynik: 2180, 700, 4000. Zrzut: kw3.png.
Typowe błędy
FROM meble WHERE kategoria = 3 daje te same liczby, ale arkusz wymaga widoku - osobne kryterium (R.1.5) za użycie komody przepada.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT nazwa, styl, cena FROM meble WHERE czyNowy = 1 AND cena <= 1000 ORDER BY cena;-- Zapytanie 2CREATE VIEW komody AS SELECT idMeble, nazwa, kategoria, cena FROM meble WHERE kategoria = 3;-- Zapytanie 3SELECT ROUND(AVG(cena)) AS "Średnia cena komód", MIN(cena) AS "Minimalna", MAX(cena) AS "Maksymalna" FROM komody;
Podgląd strony po tym kroku
Krok 7: Zapytanie 4: usunięcie klienta
Kryteria:
R.1.7 Wykonane zapytanie 4 usuwające z tabeli klienci rekord, dla którego imię to Tomasz, a nazwisko Nowak. W pliku z kwerendami lub na zrzucie istnieje zapis np. DELETE FROM klienci WHERE imie = "Tomasz" AND nazwisko = "Nowak"; oraz na zrzucie jest widoczny komunikat o poprawnie wykonanym zapytaniu lub w tabeli klienci są 2 rekordy bez Tomasza Nowaka (gdy kwerenda sprawdzana w bazie przy następnych pracach uwzględnić brak rekordu )
ok. 2 min
Polecenie z arkusza
Zapytanie 4: usuwające z tabeli klienci rekord, dla którego imię to Tomasz, a nazwisko Nowak
DELETE FROM klienci z dwoma warunkami połączonymi AND - sam warunek na nazwisko usunąłby każdego Nowaka. phpMyAdmin pyta, czy na pewno wykonać DELETE, i po potwierdzeniu pokazuje „Usuniętych rekordów: 1”. W tabeli zostają Anna Kowalska i Julita Nowakowska. Zrzut: kw4.png.
Typowe błędy
DELETE FROM klienci; bez WHERE usuwa wszystkich klientów - przed wykonaniem zawsze przeczytaj warunek.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT nazwa, styl, cena FROM meble WHERE czyNowy = 1 AND cena <= 1000 ORDER BY cena;-- Zapytanie 2CREATE VIEW komody AS SELECT idMeble, nazwa, kategoria, cena FROM meble WHERE kategoria = 3;-- Zapytanie 3SELECT ROUND(AVG(cena)) AS "Średnia cena komód", MIN(cena) AS "Minimalna", MAX(cena) AS "Maksymalna" FROM komody;-- Zapytanie 4DELETE FROM klienci WHERE imie = 'Tomasz' AND nazwisko = 'Nowak';
Podgląd strony po tym kroku
Etap 2: Grafika i strona HTML
Kroki 8-30 · po tym etapie masz 20 z 39 kryteriów (pkt)
Krok 8: Grafika fotel1.png: wycięcie pierwszego fotela
ok. 3 min
Polecenie z arkusza
Z grafiki fotele.png należy wyciąć trzy fotele z pierwszej kolumny i nazwać kolejno fotel1.png, fotel2.png, fotel3.png
fotele.png (1920 × 1814 px) ma już przezroczyste tło - dziewięć mebli w trzech kolumnach. W GIMP-ie Zaznaczenie prostokątne wokół górnego fotela z lewej kolumny, Obraz → Przytnij do zaznaczenia, potem Eksportuj jakofotel1.png. Cofnij przycięcie (Ctrl+Z) i powtórz dla kolejnych foteli z tej samej kolumny.
Podgląd strony po tym kroku
Krok 9: Kadr przy samych krawędziach, bez skalowania
ok. 2 min
Polecenie z arkusza
Fotele powinny być obcięte bezpośrednio przy krawędziach, przezroczystość powinna być zachowana. Obrazów nie należy skalować
Ręczny prostokąt prawie zawsze zostawia pasek pustego tła. Po przycięciu do zaznaczenia wybierasz Obraz → Przytnij do zawartości - GIMP sam odcina przezroczyste brzegi i kadr dotyka fotela z każdej strony (biała ramka na ilustracji 4). Wymiary bierzesz takie, jakie wyjdą: fotel1.png ma 539 × 489 px, bo grafiki nie skalujesz. Eksport do PNG zachowuje kanał alfa.
Typowe błędy
Zapis do JPEG zamienia przezroczyste tło na białe - klucz wymaga przezroczystości (R.2.1).
R.2.1 Utworzone 3 grafiki foteli (fotel1.png, fotel2.png, fotel3.png) zgodnie z ilustracją 4 arkusza egzaminacyjnego. Przynajmniej jedna grafika jest przycięta do wszystkich krawędzi fotela (sprawdzić bez powiększania grafiki) oraz jej tło jest przezroczyste
ok. 3 min
Polecenie z arkusza
Z grafiki fotele.png należy wyciąć trzy fotele z pierwszej kolumny i nazwać kolejno fotel1.png, fotel2.png, fotel3.png
Tak samo środkowy i dolny fotel z lewej kolumny: fotel2.png ma 543 × 488 px, fotel3.png (z guzikiem na oparciu) 554 × 552 px. Podgląd pokazuje trzy fotele na szachownicy przezroczystości, jak w GIMP-ie.
Podgląd strony po tym kroku
Krok 11: Plik kartaProduktu.html w HTML5
ok. 2 min
Polecenie z arkusza
Cechy strony kartaProduktu.html: Zapisana w języku HTML5
Deklaracja <!DOCTYPE html> i szkielet strony. Nazwa pliku z wielką literą P w środku: kartaProduktu.html - na serwerze z Linuksem wielkość liter w nazwie ma znaczenie.
R.2.2 Istnieją pliki kartaProduktu.html i sklep.html oraz w pliku kartaProduktu.html znajduje się deklaracja HTML5 <!DOCTYPE HTML> i deklaracja języka zawartości: polski np. <html lang="pl">
ok. 2 min
Polecenie z arkusza
Witryna składa się z dwóch stron: kartaProduktu.html i sklep.html. Na stronie sklep.html znajduje się jedynie napis „strona w trakcie budowy”
Druga strona to sam napis w poprawnym szkielecie HTML5 - zapisujesz ją od razu, żeby odnośnik „Do strony głównej” miał dokąd prowadzić. Klucz w jednym kryterium sprawdza, że oba pliki istnieją, oraz deklarację HTML5 i język strony kartaProduktu.html.
sklep.htmlHTMLnowy plik
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Sklep meblowy</title></head><body> <p>strona w trakcie budowy</p></body></html>
Podgląd strony po tym kroku (sklep.html)
Krok 17: Bloki: nagłówek, główny, stopka
Kryteria:
R.2.4 W sekcji body zdefiniowany jest podział na bloki za pomocą semantycznych znaczników HTML5: header, main -> section + article, footer (dopuszcza się stosowanie bloków pomocniczych, nie należy brać pod uwagę bloku okna)
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: nagłówkowy, główny i stopkę. Blok główny zawiera blok sekcji i blok artykułu. Podział zrealizowany za pomocą semantycznych znaczników języka HTML5 tak, aby po uruchomieniu w przeglądarce układ bloków był zgodny z ilustracją 5
Klucz wymaga header, main z section i article w środku oraz footer (R.2.4). Sekcja i artykuł staną obok siebie w CSS.
Zawartość bloku sekcji: Obraz główny fotel1.png z tekstem alternatywnym „fotel”. Obraz jest formatowany klasą o nazwie obraz. Jego kliknięcie powoduje wywołanie funkcji JavaScript otwierającej okno
class="obraz" dla stylu, a id="mainImage" dla skryptu - po identyfikatorze document.getElementById znajdzie ten obraz, żeby zmienić jego źródło. Wywołanie funkcji po kliknięciu dopiszesz, gdy funkcja będzie gotowa.
R.2.6 W bloku sekcji znajdują się cztery obrazy: fotel1.png z tekstem alternatywnym "fotel" oraz trzy grafiki z fotelami z tekstem alternatywnym "miniatura" (w przypadku braku obrazów - sprawdzić w kodzie HTML)
ok. 2 min
Polecenie z arkusza
Poniżej trzy obrazy miniatur fotel1.png, fotel2.png, fotel3.png z tekstem alternatywnym „miniatura”. Obrazy są formatowane klasą miniatury. Kliknięcie każdej miniatury powoduje wywołanie funkcji JavaScript podmieniającej obraz główny
Obrazy są elementami liniowymi - po nadaniu szerokości w CSS (40% i 3 × 15%) wszystkie cztery zmieściłyby się w jednym wierszu. <br> po obrazie głównym przenosi miniatury do nowej linii, jak na ilustracji 2. Klasa miniatury przy każdym z trzech obrazów.
R.2.9 Na stronie umieszczono blok (np. div ) a w nim element liniowy z zawartością × oraz obraz
R.3.4 Klasy przypisane do 7 elementów: obraz do obrazu głównego w sekcji, miniatury do trzech obrazów miniatur, okno do bloku okna, zamknij do elementu zawierającego ×, obrazOkno do obrazu w oknie
ok. 3 min
Polecenie z arkusza
Blok okna z ilustracji 3 formatowany klasą o nazwie okno, zawierający: Znacznik ogólny liniowy <span> z zawartością × i formatowany klasą zamknij. Kliknięcie znacznika powoduje wywołanie funkcji zamykającej okno. Obraz bez źródła formatowany klasą obrazOkno
Blok <div class="okno"> z identyfikatorem popup - skrypt będzie go pokazywał i chował. W środku <span class="zamknij"> z encją ×, którą przeglądarka rysuje jako znak mnożenia ×, i <img class="obrazOkno">bez atrybutu src - źródło wstawi skrypt w chwili otwarcia okna. Na razie okno widać w sekcji jako znak × i pusty obraz; schowa je styl display: none. Z tym krokiem wszystkie siedem elementów ma klasy z arkusza.
Dwa paragrafy z treścią przekopiowaną z pliku opisFotel.txt zgodnie z ilustracją 2
Plik opisFotel.txt ma dwie linie i każda staje się osobnym <p>: długi opis wariantów i zdanie o bezpłatnej dostawie. Skopiuj tekst dokładnie, bez przepisywania z ilustracji.
kartaProduktu.htmlHTMLzmienione: 2 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> </article> </main> <footer> </footer></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 25: Tekst ważny w znaczniku strong
ok. 1 min
Polecenie z arkusza
Tekst „Wybierz wariant fotela” zapisany za pomocą znacznika semantycznego oznaczającego tekst ważny, formatowany domyślnie jako pogrubiony
Znacznik semantyczny tekstu ważnego to <strong> (nie <b>, który tylko pogrubia, bez znaczenia).
kartaProduktu.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> </article> </main> <footer> </footer></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 26: Lista wariantów
ok. 1 min
Polecenie z arkusza
Lista rozwijana z elementami „wariant 1”, „wariant 2”, „wariant 3”
<select> z trzema <option>. <strong> i <select> są liniowe, więc stoją w jednym wierszu - jak na ilustracji 2.
kartaProduktu.htmlHTMLzmienione: 5 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> </article> </main> <footer> </footer></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 27: Przycisk „KUP TERAZ”
Kryteria:
R.2.7 W bloku artykułu znajduje się lista rozwijana z elementami „wariant 1”, „wariant 2”, „wariant 3” oraz przycisk "KUP TERAZ"
ok. 1 min
Polecenie z arkusza
Paragraf z przyciskiem „KUP TERAZ”. Przycisk nie ma funkcjonalności
<button> w akapicie. Nie ma formularza ani skryptu, więc kliknięcie nic nie robi - tak chce arkusz.
kartaProduktu.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> </article> </main> <footer> </footer></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 28: Odnośnik do sklep.html
Kryteria:
R.3.5 Kliknięcie odnośnika „Do strony głównej” otwiera stronę sklep.html
ok. 1 min
Polecenie z arkusza
Paragraf z odnośnikiem do pliku sklep.html o treści „Do strony głównej”
Ścieżka względna sklep.html - oba pliki leżą w tym samym folderze. Podwójna spacja w poleceniu arkusza to literówka.
kartaProduktu.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> </footer></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 29: Linia pozioma w stopce
ok. 1 min
Polecenie z arkusza
Zawartość bloku stopki: Linia pozioma
Drugi <hr>, tym razem na początku stopki.
kartaProduktu.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> </footer></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 30: Stopka z numerem zdającego w em
Kryteria: , ,
R.2.5 W bloku nagłówkowym znajduje się <h1>: "Sklep meblowy", w bloku artykułu <h2>: "Żółty Fotel" oraz dwa paragrafy z opisem, w stopce <p> z numerem zdającego
R.2.8 Tekst „Wybierz wariant fotela” znajduje się w znaczniku <strong> numer zdającego znajduje się w znaczniku <em>
R.2.10 W bloku nagłówkowym i stopce znajduje się linia pozioma (<hr> lub za pomocą obramowania w CSS)
ok. 1 min
Polecenie z arkusza
Paragraf o treści „Autor strony: ”, dalej wstawiony numer zdającego. Numer zdającego jest zapisany za pomocą znacznika semantycznego oznaczającego tekst uwypuklony, formatowany domyślnie jako pochylony
Tekst uwypuklony to <em> - przeglądarka pokazuje go kursywą. Na egzaminie w <em> wpisujesz swój numer zdającego (PESEL); tutaj stoi imię i nazwisko autora rozwiązania.
kartaProduktu.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Etap 3: Styl CSS
Kroki 31-42 · po tym etapie masz 31 z 39 kryteriów (pkt)
Krok 31: Plik styl.css: krój czcionki
Kryteria:
R.4.1 domyślne formatowanie selektorów (*): krój czcionki "Century Gothic" - jako pierwszy, sans-serif - jako ostatni
ok. 1 min
Polecenie z arkusza
Domyślnie, dla wszystkich selektorów: krój czcionki „Century Gothic", w przypadku braku sans-serif
Nazwa kroju ze spacją musi być w cudzysłowie: "Century Gothic". Na końcu rodzina zapasowa sans-serif.
styl.cssCSSnowy plik
* {font-family: "Century Gothic", sans-serif;}
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 32: Ciało strony
ok. 1 min
Polecenie z arkusza
Dla ciała strony: kolor tła Beige, rozmiar czcionki 140%
R.3.1 Układ bloków po uruchomieniu strony w przeglądarce jest zgodny z ilustracją 5 w arkuszu egzaminacyjnym (prawidłowo zastosowane właściwości CSS decydujące o układzie bloków na stronie, np. float i clear albo display flex albo grid albo position; żaden blok nie zachodzi na inne bloki - sprawdzić w inspektorze)
ok. 2 min
Polecenie z arkusza
Podział zrealizowany za pomocą semantycznych znaczników języka HTML5 tak, aby po uruchomieniu w przeglądarce układ bloków był zgodny z ilustracją 5
Arkusz nie mówi, jak postawić sekcję obok artykułu - wybierasz display: flex na <main>: dzieci stają w rzędzie, 50% + 50% wypełnia szerokość, a stopka zostaje pod spodem bez clear. Klucz uznaje też float, grid albo position, byle bloki na siebie nie zachodziły (R.3.1).
R.4.8 styl klasy .okno : kolor tła czarny, przezroczystość (opacity lub RGBA) - 0.7, szerokość - 80%, oraz cechy position: fixed; left: 0; top: 0; display: none; element zawsze na wierzchu (z-index z wartością dodatnią)
ok. 3 min
Polecenie z arkusza
Dla klasy okno: kolor tła czarny z przezroczystością 0.7, szerokość 80%, pozycjonowana względem okna przeglądarki, od lewej strony 0, od góry 0, zawsze na wierzchu, element jest usunięty
rgba(0, 0, 0, 0.7) - czarne tło przepuszczające 30% tego, co pod spodem; opacity: 0.7 (klucz też je uznaje) zrobiłoby półprzezroczyste całe okno razem z fotelem, a na ilustracji 3 fotel jest pełny,
position: fixed z left: 0 i top: 0 - przyklejenie do lewego górnego rogu okna przeglądarki (tabela 3 arkusza),
z-index: 10 - dodatnia wartość, okno nad resztą strony,
display: none - „element jest usunięty”: okna nie ma, dopóki skrypt go nie pokaże. Dlatego znak × i pusty obraz właśnie zniknęły z podglądu.
Dla klasy obrazOkno: marginesy zewnętrzne automatycznie wyliczane przez przeglądarkę, blokowy sposób wyświetlania
margin: auto wyśrodkowuje tylko element blokowy o szerokości mniejszej niż rodzic - dlatego para display: block i margin: auto. Obraz liniowy zignorowałby automatyczne marginesy.
R.4.9 styl klasy .obrazOkno : margin: auto; display: block; styl klasy .zamknij : position: absolute; top: 15px, right: 35px; czcionka koloru Beige, pogrubiona, o rozmiarze - 40px
ok. 2 min
Polecenie z arkusza
Dla klasy zamknij: pozycjonowanie względem pierwszego rodzica, od góry 15 px, od prawej strony 35 px, czcionka koloru Beige, pogrubiona, o rozmiarze 40 px
position: absolute liczy top i right od najbliższego pozycjonowanego przodka - okno ma position: fixed, więc znak × trafia w prawy górny róg okna, nie strony.
R.4.10 Gdy kursor znajdzie się na elemencie przypisanym do klasy .zamknij , zmienia się na pointer
ok. 1 min
Polecenie z arkusza
Gdy kursor znajdzie się na elemencie przypisanym do klasy zamknij, zmienia się na pointer
Pseudoklasa :hover i cursor: pointer - rączka podpowiada, że znak da się kliknąć. Samo cursor: pointer w regule .zamknij działa tak samo, ale arkusz opisuje to jako zachowanie pod kursorem.
Kroki 43-48 · po tym etapie masz 39 z 39 kryteriów (pkt)
Krok 43: Funkcja podmieniająca obraz główny
Kryteria: , ,
R.5.1 Skrypt napisany w języku JavaScript i zawiera on przynajmniej jedną poprawną składniowo instrukcję wynikającą z treści zadania
R.5.2 Zastosowana przynajmniej jedna zmienna lub funkcja oraz nazewnictwo jest w języku polskim lub angielskim i odzwierciedla cel zastosowania
R.5.5 W skrypcie zmieniana jest wartość atrybutu src w elemencie DOM obrazu głównego lub obrazu w oknie, np. document.getElementById("obrazOkno").src = …
ok. 3 min
Polecenie z arkusza
Po kliknięciu dowolnej miniatury jest podmieniany obraz główny na obraz z miniatury. Na ilustracji 6 kliknięto miniaturę fotel3.png, obraz główny zmienił się na fotel3.png
Skrypt w <script> na końcu <body> - wtedy wszystkie elementy strony są już w drzewie dokumentu (DOM) i getElementById je znajdzie (same pliki obrazów mogą się jeszcze pobierać, ale to skryptowi nie przeszkadza). Funkcja changeImage dostaje klikniętą miniaturę jako parametr i przepisuje jej src do obrazu głównego znalezionego po id. Jedna funkcja obsłuży wszystkie trzy miniatury, bo każda przekaże samą siebie.
kartaProduktu.htmlHTMLzmienione: 5 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; } </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 44: Miniatury wywołują funkcję po kliknięciu
Kryteria: ,
R.3.3 Dla przynajmniej jednego obrazu lub elementu zawierającego × zdefiniowane zdarzenie związane z jego kliknięciem, które uruchamia funkcję skryptu
R.5.3 Po kliknięciu każdej miniatury obraz glówny zamieniany jest na grafikę z miniatury
ok. 2 min
Polecenie z arkusza
Kliknięcie każdej miniatury powoduje wywołanie funkcji JavaScript podmieniającej obraz główny
Atrybut onclick="changeImage(this)" przy każdej miniaturze: słowo this oznacza element, który kliknięto. Kliknij trzecią miniaturę w podglądzie - obraz główny zmienia się na fotel z guzikiem, jak na ilustracji 6.
kartaProduktu.htmlHTMLzmienione: 3 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; } </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 45: Otwarcie okna: display block
Kryteria:
R.5.4 W skrypcie zmieniany jest styl CSS elementu DOM dla bloku okna, np. document.getElementById("okno").style.display = "block"; lub "none"
ok. 2 min
Polecenie z arkusza
Pojawienie się okna jest realizowane poprzez: Zmianę sposobu wyświetlania bloku okna na blokowy
Styl .okno ma display: none. Skrypt nadpisuje to stylem wpisanym w sam element: style.display = "block" - okno się pojawia, a reszta reguły (tło, pozycja, z-index) działa dalej.
kartaProduktu.htmlHTMLzmienione: 3 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; }function openPopup() {document.getElementById("popup").style.display = "block"; } </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 46: Otwarcie okna: obraz z obrazu głównego
ok. 1 min
Polecenie z arkusza
Przypisanie do obrazu w bloku okna źródła grafiki z obrazu głównego
Obraz w oknie dostaje to samo src, co obraz główny w chwili kliknięcia - jeśli wcześniej wybrano trzecią miniaturę, w oknie też będzie fotel3.png.
kartaProduktu.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; }function openPopup() {document.getElementById("popup").style.display = "block";document.getElementById("popupImage").src = document.getElementById("mainImage").src; } </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 47: Kliknięcie obrazu głównego otwiera okno
Kryteria:
R.5.6 Po kliknięciu głównego obrazu pojawia się blok okna z tą samą grafiką co w głównym obrazie
ok. 1 min
Polecenie z arkusza
Po kliknięciu obrazu głównego otwiera się okno z tym obrazem (ilustracja 3)
onclick="openPopup()" przy obrazie głównym. W podglądzie kliknij fotel: na stronę nakłada się przyciemnione okno z fotelem w naturalnym rozmiarze - jak na ilustracji 3.
kartaProduktu.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"onclick="openPopup()"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; }function openPopup() {document.getElementById("popup").style.display = "block";document.getElementById("popupImage").src = document.getElementById("mainImage").src; } </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 48: Znak × zamyka okno
Kryteria:
R.5.7 Po kliknięciu elementu × blok okna jest usuwany (np. okno.style.display = "none")
ok. 2 min
Polecenie z arkusza
Po kliknięciu znaku × okno jest usuwane poprzez zastosowanie odpowiedniej właściwości CSS
Funkcja closePopup przywraca display: none, a onclick="closePopup()" przy znaku × ją wywołuje. Okno znika, strona pod spodem zostaje bez zmian.
kartaProduktu.htmlHTMLzmienione: 4 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"onclick="openPopup()"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"onclick="changeImage(this)"> <divclass="okno"id="popup"> <spanclass="zamknij"onclick="closePopup()">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; }function openPopup() {document.getElementById("popup").style.display = "block";document.getElementById("popupImage").src = document.getElementById("mainImage").src; }function closePopup() {document.getElementById("popup").style.display = "none"; } </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Etap 5: Dobre praktyki (poza kluczem)
Kroki 49-51 · po tym etapie masz 39 z 39 kryteriów (pkt)
Krok 49: Nasłuchiwacze zdarzeń zamiast onclick
ok. 3 min
Polecenie z arkusza
Kliknięcie każdej miniatury powoduje wywołanie funkcji JavaScript podmieniającej obraz główny
Atrybuty onclick mieszają HTML ze skryptem. W prawdziwych projektach HTML zostaje czysty, a skrypt sam przypina obsługę zdarzeń: addEventListener("click", ...) dla każdej miniatury (znalezionych przez querySelectorAll(".miniatury")), dla obrazu głównego i dla znaku ×. Funkcje się nie zmieniły, a dawne wywołania zostały opisane w komentarzu. Sprawdzone w przeglądarce: te same kliknięcia dają ten sam wynik co wersja z onclick. Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.
kartaProduktu.htmlHTMLzmienione: 14 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; }function openPopup() {document.getElementById("popup").style.display = "block";document.getElementById("popupImage").src = document.getElementById("mainImage").src; }function closePopup() {document.getElementById("popup").style.display = "none"; }// Wersja z egzaminu: atrybuty onclick="changeImage(this)", onclick="openPopup()" i onclick="closePopup()" w znacznikach.var thumbnails = document.querySelectorAll(".miniatury");for (var i = 0; i < thumbnails.length; i++) { thumbnails[i].addEventListener("click", function () { changeImage(this); }); }document.getElementById("mainImage").addEventListener("click", openPopup);document.querySelector(".zamknij").addEventListener("click", closePopup); </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 50: Zamykanie okna klawiszem Esc i kliknięciem w tło
ok. 3 min
Polecenie z arkusza
Po kliknięciu znaku × okno jest usuwane poprzez zastosowanie odpowiedniej właściwości CSS
Mały znak × to jedyna droga wyjścia z okna, a użytkownicy odruchowo wciskają Esc albo klikają obok obrazu. Dwa nasłuchiwacze: keydown na całym dokumencie sprawdza event.key === "Escape", a click na oknie zamyka je tylko wtedy, gdy kliknięto samo tło (event.target === this) - kliknięcie fotela okna nie zamyka. Sprawdzone w przeglądarce: Esc zamyka, klik w fotel zostawia okno, klik w tło zamyka. Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.
kartaProduktu.htmlHTMLzmienione: 10 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <strong>Wybierz wariant fotela</strong> <select> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><button>KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; }function openPopup() {document.getElementById("popup").style.display = "block";document.getElementById("popupImage").src = document.getElementById("mainImage").src; }function closePopup() {document.getElementById("popup").style.display = "none"; }// Wersja z egzaminu: atrybuty onclick="changeImage(this)", onclick="openPopup()" i onclick="closePopup()" w znacznikach.var thumbnails = document.querySelectorAll(".miniatury");for (var i = 0; i < thumbnails.length; i++) { thumbnails[i].addEventListener("click", function () { changeImage(this); }); }document.getElementById("mainImage").addEventListener("click", openPopup);document.querySelector(".zamknij").addEventListener("click", closePopup);document.addEventListener("keydown", function (event) {if (event.key === "Escape") { closePopup(); } });document.getElementById("popup").addEventListener("click", function (event) {if (event.target === this) { closePopup(); } }); </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Krok 51: Opisy dla czytników ekranu i walidatora
ok. 2 min
Polecenie z arkusza
Obraz bez źródła formatowany klasą obrazOkno
Trzy drobiazgi, które wychwytuje walidator HTML i czytnik ekranu. Obraz w oknie dostaje alt - bez niego czytnik przeczyta tylko „obraz” (sam brak src walidator też zgłasza, ale tu jest celowy: źródło wstawia skrypt). Napis „Wybierz wariant fotela” staje się etykietą listy (<label for> + id), więc kliknięcie napisu otwiera listę, a czytnik wie, czego dotyczy wybór. Przycisk bez działania dostaje type="button" - gdyby kiedyś trafił do formularza, nie wyśle go przypadkiem. Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.
kartaProduktu.htmlHTMLzmienione: 4 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Fotel</title> <linkrel="stylesheet"href="styl.css"></head><body> <header> <h1>Sklep meblowy</h1> <hr> </header> <main> <section> <imgsrc="fotel1.png"alt="fotel"class="obraz"id="mainImage"> <br> <imgsrc="fotel1.png"alt="miniatura"class="miniatury"> <imgsrc="fotel2.png"alt="miniatura"class="miniatury"> <imgsrc="fotel3.png"alt="miniatura"class="miniatury"> <divclass="okno"id="popup"> <spanclass="zamknij">×</span> <imgclass="obrazOkno"id="popupImage"alt="powiększony fotel"> </div> </section> <article> <h2>Żółty Fotel</h2> <p>Nasz żółty fotel może być przygotowany w trzech wariantach, które można przeglądać na grafikach. Jest wygodny i elegancki. Wariant 1 polecamy do wnętrz klasycznych. Wariant 3 jest utrzymany w stylu glamour, a guzik na środku oparcia jest wykonany z kryształka. Wygodne podłokietniki sprawiają, że w tym fotelu naprawdę się odpoczywa. Wykonany z elastycznej pianki - materiału, który wyróżnia się plastycznością oraz sprężystością, zapewniając komfort siedzenia.</p> <p>Zorganizujemy dla Ciebie bezpłatną dostawę oraz wniesiemy towar.</p> <labelfor="variant"><strong>Wybierz wariant fotela</strong></label> <selectid="variant"name="variant"> <option>wariant 1</option> <option>wariant 2</option> <option>wariant 3</option> </select> <p><buttontype="button">KUP TERAZ</button></p> <p><ahref="sklep.html">Do strony głównej</a></p> </article> </main> <footer> <hr> <p>Autor strony: <em>Bartosz Bryniarski</em></p> </footer> <script>function changeImage(thumbnail) {document.getElementById("mainImage").src = thumbnail.src; }function openPopup() {document.getElementById("popup").style.display = "block";document.getElementById("popupImage").src = document.getElementById("mainImage").src; }function closePopup() {document.getElementById("popup").style.display = "none"; }// Wersja z egzaminu: atrybuty onclick="changeImage(this)", onclick="openPopup()" i onclick="closePopup()" w znacznikach.var thumbnails = document.querySelectorAll(".miniatury");for (var i = 0; i < thumbnails.length; i++) { thumbnails[i].addEventListener("click", function () { changeImage(this); }); }document.getElementById("mainImage").addEventListener("click", openPopup);document.querySelector(".zamknij").addEventListener("click", closePopup);document.addEventListener("keydown", function (event) {if (event.key === "Escape") { closePopup(); } });document.getElementById("popup").addEventListener("click", function (event) {if (event.target === this) { closePopup(); } }); </script></body></html>
Podgląd strony po tym kroku (kartaProduktu.html)
Etap 6: Oddanie pracy
Krok 52 · po tym etapie masz 39 z 39 kryteriów (pkt)
Krok 52: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
Po zakończeniu pracy utwórz plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowana była poprawność działania witryny. Umieść go w folderze z numerem zdającego. Nagraj płytę z rezultatami pracy.
W przeglądarka.txt wpisujesz nazwę przeglądarki, w której sprawdzasz stronę.
W folderze z numerem zdającego: fotel1.png, fotel2.png, fotel3.png, import.png, kartaProduktu.html, kw1.png - kw4.png, kwerendy.txt, przeglądarka.txt, sklep.html, styl.css. Nagraj płytę, sprawdź jej odczyt i opisz ją numerem zdającego.
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
To jedno z możliwych rozwiązań. Egzaminator ocenia spełnienie kryteriów z klucza odpowiedzi, a nie zgodność z tym kodem - inna, poprawna droga też daje punkty.
Autor rozwiązania: Bartosz Bryniarski. Licencja CC BY-NC 4.0 - kopiowanie i przeróbki do celów niekomercyjnych, z podaniem autora i źródła (link do tej strony) (zasady wykorzystania). Treść arkusza i klucza oceniania pochodzi z CKE.