INF.03-10-24.06-SGCzerwiec 2024 · 36 kroków · ok. 77 min · 37 kryteriów z klucza
Rozwiązanie krok po kroku: Witryna z kartami pracowników (Nowoczesny kod (grid))
To drugi sposób rozwiązania tego samego arkusza. Wynik jest ten sam - baza kadra z czterema zapytaniami, logo z przezroczystym tłem i strona pracownicy.html z dwoma banerami, trzema kartami pracowniczymi, cytatami zmienianymi kliknięciem i stopką - i tak samo spełnia każde kryterium klucza. Inna jest droga:
siatka CSS na całej stronie: dwa banery w kolumnach 50% 50% (klucz R.4.5 przyjmuje grid-template-columns), a pod nimi pozostałe bloki na całą szerokość - bez float i clear; trzy karty też na siatce,
kolory w zmiennych CSS,
cytaty bez identyfikatorów: drugi i trzeci ukrywa selektor sąsiedztwa blockquote + blockquote, a skrypt pracuje na liście cytatów,
cytaty obsługiwane także z klawiatury od pierwszej wersji skryptu: da się do nich przejść klawiszem Tab i zmienić je Enterem albo spacją,
współczesny JavaScript: const, querySelectorAll, addEventListener i jedna funkcja z resztą z dzielenia zamiast trzech gałęzi if,
SQL czytelniej: alias dla COUNT(*), aliasy tabel i nieujemny typ nowej kolumny.
Na końcu krótkie porównanie z wersją podstawową (zakładka obok). Baza, zdjęcia i teksty pochodzą z prawdziwego archiwum pliki10, zapytania zostały wykonane na tej bazie w MariaDB z XAMPP-a, a skrypt jest sprawdzony w prawdziwej przeglądarce Chrome: kliknięcia, Enter i spacja, położenie bloków i kart.
Jak liczą się punkty. Klucz ma 37 kryteriów (R.1.1 - R.5.7), każde za 1 punkt. Próg zdania to 75%, czyli 28 punktów. Przy każdym kroku jest napisane, które kryteria spełnia.
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 6 z 37 kryteriów (pkt)
Krok 1: Baza danych kadra
ok. 2 min
Polecenie z arkusza
Utwórz bazę danych o nazwie kadra, z zestawem polskich znaków (np. utf8_unicode_ci)
Archiwum pliki10.zip rozpakuj hasłem K@dra_FirMy# (małpa zamiast „a”, podkreślnik, wielkie M, krzyżyk na końcu) do folderu z numerem zdającego. W phpMyAdmin Nowa → kadra, porównywanie utf8_unicode_ci, albo zapytaniem:
CREATE DATABASE kadra CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Krok 2: Import tabel z pliku baza.sql
ok. 2 min
Polecenie z arkusza
Do bazy zaimportuj tabele z pliku baza.sql z rozpakowanego archiwum
Zaznaczona baza kadra, Import → baza.sql. Dwie tabele z obrazu 1: pracownicy (imię, nazwisko, pensja, staż w latach i klucz obcy stanowiska_id) oraz stanowiska (identyfikator i nazwa).
Krok 3: Zrzut ekranu import.png
Kryteria:
R.1.1 Wykonano import tabel do bazy danych kadra czynność udokumentowano plikiem o nazwie import w formacie PNG
ok. 2 min
Polecenie z arkusza
Wykonaj zrzut ekranu po imporcie. Zrzut zapisz w formacie PNG i nazwij 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.
Cały ekran z paskiem zadań, w PNG. Zrzuty zapytań idą później do JPEG (kw1.jpg - kw4.jpg).
Typowe błędy
Wykadrowany zrzut albo zrzut bez paska zadań nie jest oceniany (uwaga w kluczu przy R.1).
Krok 4: Zapytanie 1: liczba osób z każdą pensją
Kryteria: ,
R.1.2 Zapisano plik kwerendy.txt zawierający co najmniej jedno zapytanie SQL, wynikające z treści zadania
R.1.3 Wykonano zapytanie 1 wybierające jedynie liczbę wierszy i pensję grupując pracowników według pensji i sortując dane malejąco ze względu na pensję. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT COUNT(*), pensja FROM pracownicy GROUP BY pensja ORDER BY pensja DESC; oraz wynik działania udokumentowano zrzutem, na którym jest widocznych dokładnie 7 rekordów z danymi: 1 8000; 2 6000; 1 5050; 3 5000; 2 4700; 3 4000; 2 3800
ok. 3 min
Polecenie z arkusza
Zapytanie 1: wybierające jedynie liczbę wierszy i pensję grupując pracowników według pensji i sortując dane malejąco ze względu na pensję. W wyniku zapytania są wyświetlane poszczególne pensje oraz liczba osób, które pobierają taką pensję
GROUP BY pensja - jedna grupa na każdą różną pensję, COUNT(*) liczy wiersze w grupie,
AS liczbaOsob - bez aliasu kolumna wyniku nazywa się dosłownie COUNT(*); alias mówi, co liczba znaczy (arkusz go nie wymaga),
ORDER BY pensja DESC - od najwyższej pensji.
Wynik: 7 wierszy, od 1 osoby z pensją 8000 do 2 osób z pensją 3800, jak w kluczu. Zapytania zapisz w kwerendy.txt, zrzut jako kw1.jpg.
Typowe błędy
ORDER BY bez DESC sortuje rosnąco - te same 7 wierszy w odwrotnej kolejności nie spełnia polecenia.
kwerendy.txtTekstnowy plik
-- Zapytanie 1SELECT COUNT(*) AS liczbaOsob, pensjaFROM pracownicyGROUP BY pensjaORDER BY pensja DESC;
Podgląd strony po tym kroku
Krok 5: Zapytanie 2: pracownicy ze stażem powyżej 10 lat
Kryteria:
R.1.4 Wykonano zapytanie 2 wybierające jedynie imiona i nazwiska pracowników oraz odpowiadające im nazwy stanowisk dla pracowników o stażu wyższym niż 10 lat. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT imie, nazwisko, nazwa FROM pracownicy JOIN stanowiska ON stanowiska_id = stanowiska.id WHERE staz > 10; (możliwe również INNER JOIN lub porównanie kluczy po WHERE) oraz wynik działania udokumentowano zrzutem, na którym są widoczne dokładnie 4 rekordy z wartościami: Krzysztof Dobromilski Dyrektor, Ewa Nowak Kadrowa, Joanna Trojanowska Kierownik, Konrad Grzegorzewski Kierownik
ok. 3 min
Polecenie z arkusza
Zapytanie 2: wybierające jedynie imiona i nazwiska pracowników oraz odpowiadające im nazwy stanowisk dla pracowników o stażu wyższym niż 10 lat. Należy posłużyć się relacją
Aliasy p (pracownicy) i s (stanowiska) - przy każdej kolumnie widać tabelę, a ON s.id = p.stanowiska_id pokazuje parę kluczy relacji. p.staz > 10 - „wyższym niż 10”, bez równości, więc Jan Nowacki ze stażem 10 odpada. Wynik: 4 wiersze - Dobromilski (Dyrektor), Nowak (Kadrowa), Trojanowska i Grzegorzewski (Kierownik). Zrzut: kw2.jpg.
Typowe błędy
staz >= 10 dopisuje piątego pracownika (Nowacki) - klucz wymaga dokładnie 4 rekordów.
kwerendy.txtTekstzmienione: 6 linii
-- Zapytanie 1SELECT COUNT(*) AS liczbaOsob, pensjaFROM pracownicyGROUP BY pensjaORDER BY pensja DESC;-- Zapytanie 2SELECT p.imie, p.nazwisko, s.nazwaFROM pracownicy AS pJOIN stanowiska AS s ON s.id = p.stanowiska_idWHERE p.staz > 10;
Podgląd strony po tym kroku
Krok 6: Zapytanie 3: staż od 10 do 20 lat
Kryteria:
R.1.5 Wykonano zapytanie 3 wybierające jedynie nazwiska i pensję dla pracowników, których staż wynosi od 10 do 20 lat. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT nazwisko, pensja FROM pracownicy WHERE staz >= 10 AND staz <= 20; (możliwe również z zastosowaniem BETWEEN) oraz wynik działania udokumentowano zrzutem, na którym jest widocznych dokładnie 5 rekordów z danymi: Nowak 5000, Trojanowska 6000, Nowacki 5050, Grzegorzewski 6000, Trębosz 4000
ok. 2 min
Polecenie z arkusza
Zapytanie 3: wybierające jedynie nazwiska i pensję dla pracowników, których staż wynosi od 10 do 20 lat
BETWEEN 10 AND 20obejmuje oba końce - to samo co staz >= 10 AND staz <= 20, a czyta się jak polecenie. Wynik: 5 wierszy - Nowak 5000, Trojanowska 6000, Nowacki 5050, Grzegorzewski 6000, Trębosz 4000; staż 10 i 20 wchodzi. Zrzut: kw3.jpg.
kwerendy.txtTekstzmienione: 5 linii
-- Zapytanie 1SELECT COUNT(*) AS liczbaOsob, pensjaFROM pracownicyGROUP BY pensjaORDER BY pensja DESC;-- Zapytanie 2SELECT p.imie, p.nazwisko, s.nazwaFROM pracownicy AS pJOIN stanowiska AS s ON s.id = p.stanowiska_idWHERE p.staz > 10;-- Zapytanie 3SELECT nazwisko, pensjaFROM pracownicyWHERE staz BETWEEN 10 AND 20;
Podgląd strony po tym kroku
Krok 7: Zapytanie 4: kolumna minPensja
Kryteria:
R.1.6 Wykonano zapytanie 4 Dodające do tabeli stanowiska kolumnę o nazwie minPensja dowolnego typu całkowitego. W pliku z kwerendami lub na zrzucie istnieje zapis np.: ALTER TABLE stanowiska ADD COLUMN minPensja INT; (COLUMN jest opcjonalne, dozwolone różne inne typy całkowite) oraz wynik działania udokumentowano zrzutem, na którym widoczne jest poprawnie wykonane zapytanie lub struktura tabeli stanowiska z kolumną minPensja
ok. 2 min
Polecenie z arkusza
Zapytanie 4: Dodające do tabeli stanowiska kolumnę o nazwie minPensja dowolnego typu całkowitego
ALTER TABLE ... ADD COLUMN. Typ INT UNSIGNED - pensja nie bywa ujemna, a w tabeli pracownicy kolumna pensja ma właśnie ten typ, więc obie wartości da się porównywać bez zastrzeżeń. NULL wprost: dla istniejących stanowisk minimalnej pensji jeszcze nie ustalono. Klucz przyjmuje dowolny typ całkowity. Na zrzucie kw4.jpg struktura tabeli stanowiska z nową kolumną.
Typowe błędy
DECIMAL albo FLOAT to nie typ całkowity - kryterium nie jest spełnione.
kwerendy.txtTekstzmienione: 4 linie
-- Zapytanie 1SELECT COUNT(*) AS liczbaOsob, pensjaFROM pracownicyGROUP BY pensjaORDER BY pensja DESC;-- Zapytanie 2SELECT p.imie, p.nazwisko, s.nazwaFROM pracownicy AS pJOIN stanowiska AS s ON s.id = p.stanowiska_idWHERE p.staz > 10;-- Zapytanie 3SELECT nazwisko, pensjaFROM pracownicyWHERE staz BETWEEN 10 AND 20;-- Zapytanie 4ALTER TABLE stanowiskaADD COLUMN minPensja INT UNSIGNED NULL;
Podgląd strony po tym kroku
Etap 2: Grafika i strona HTML
Kroki 8-18 · po tym etapie masz 17 z 37 kryteriów (pkt)
Krok 8: Logo: przezroczyste tło, kadr i 100 px wysokości
Kryteria:
R.2.1 Nadano grafice logo.png przezroczyste tło oraz wykadrowano tak, aby kształt wypełniał całość obrazu. Wymiary grafiki to: wysokość 100 px i szerokość 102 px (± 10 px)
ok. 4 min
Polecenie z arkusza
Dla grafiki logo.png (górny lewy róg obrazu 2) należy: Ustawić przezroczyste tło. Skadrować, tak aby kształt wypełniał całość obrazu. Przeskalować z zachowaniem proporcji do dokładnej wysokości 100 px
Grafika jest taka sama jak w wersji podstawowej. W GIMP-ie, w tej kolejności:
Warstwa → Przezroczystość → Dodaj kanał alfa, różdżka na białym tle i Delete,
Obraz → Przytnij do zawartości - z 640 × 640 px zostaje sama kula, 330 × 325 px,
Obraz → Skaluj obraz, wysokość 100 px przy zamkniętym łańcuchu - szerokość wychodzi 102 px (klucz: 102 ±10).
Eksport pod tą samą nazwą, w PNG. Po lewej oryginał, po prawej wynik na szachownicy.
Typowe błędy
Skalowanie przed kadrowaniem daje obraz 100 × 100 px z małą kulą w środku - kształt nie wypełnia obrazu.
R.2.2 Witrynę internetową zapisano w pliku pracownicy.html oraz zapisano jawnie standard kodowania polskich znaków i deklarację HTML5 <!DOCTYPE HTML> i zadeklarowano język witryny polski np.<HTML lang="pl">. Strona zawiera sekcje head i body
ok. 2 min
Polecenie z arkusza
Składa się ze strony o nazwie pracownicy.html zapisanej w języku HTML5. Ustawiony język zawartości strony na polski. Jawnie zastosowany właściwy standard kodowania polskich znaków
<!DOCTYPE html>, <html lang="pl"> i <meta charset="UTF-8"> jako pierwszy element <head> - razem jedno kryterium (R.2.2).
R.3.5 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl.css , formatowanie CSS pochodzi jedynie z tego arkusza Uwaga: kryterium to nie jest spełnione również, gdy zdający źle przypisał co najmniej jeden selektor do bloku (np. kropka zamiast #)
ok. 1 min
Polecenie z arkusza
Arkusz stylów w pliku o nazwie styl.css prawidłowo połączony z kodem strony
Całe formatowanie pochodzi ze styl.css - bez atrybutów style i znacznika <style> w HTML-u (R.3.5).
Typowe błędy
Klucz odbiera R.3.5 także wtedy, gdy choć jeden selektor nie trafia w blok (np. kropka zamiast #).
Krok 12: Bloki: dwa banery, główny, cytaty, stopka
Kryteria:
R.2.4 Układ strony zdefiniowano dzieląc ją na: dwa bloki banera, blok główny, blok cytatu, stopka. Zastosowano semantyczne znaczniki sekcji HTML5 zgodnie z ich znaczeniem, w tym do części nagłówkowej - header, stopki - footer, dopuszcza się zagnieżdżenie bloków div w znacznikach semantycznych
ok. 3 min
Polecenie z arkusza
Podział strony na: dwa bloki banera obok siebie, poniżej blok główny, poniżej blok cytatu, na dole stopka. Podział zrealizowany wyłącznie za pomocą semantycznych znaczników sekcji języka HTML5 tak, aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z obrazem 2
dwa banery to dwa <header> (klucz R.2.4 wymaga header dla części nagłówkowej; na stronie może ich być kilka). Każdy ma dwie klasy: wspólną banner (jeden styl dla obu) i własną - logo albo title - która wskaże mu kolumnę siatki,
blok główny <main>, blok cytatów <section class="quotes">, stopka <footer>.
Klasy zamiast identyfikatorów: identyfikator musi być jedyny na stronie, a klasa niczego nie zakłada - przy stylach to wygodniejszy i częstszy wybór. Identyfikatorów nie będzie potrzebował nawet skrypt (R.2.4).
R.2.7 Umieszczono obraz osoba1.jpg z tekstem alternatywnym "Dyrektor" lub obraz osoba2.jpg z tekstem alternatywnym "Kierownik logistyków" lub obraz osoba3.jpg z tekstem alternatywnym "Kadry"
R.2.8 Umieszczono w przynajmniej jednym bloku karty nagłówek h2 z imieniem i nazwiskiem, h3 ze stanowiskiem, h5 z odnośnikiem oraz dwa paragrafy z opisem i numerem telefonu
R.3.3 Umieszczono przynajmniej jeden odnośnik pocztowy o treści "Kontakt" , prowadzący do adresu email, np. <a href="mailto:[email protected]">Kontakt</a>
ok. 4 min
Polecenie z arkusza
Zawartość bloku głównego: trzy bloki kart pracowniczych, umieszczone obok siebie. Zawartość kart jest zgodna z obrazem 2. Dane do kart należy skopiować do dokumentu HTML z pliku tekstyNaStrone.txt, wypakowanego z archiwum. Każdy z bloków zawiera: Obraz z tekstem alternatywnym. Imię i nazwisko w nagłówku drugiego stopnia. Stanowisko w nagłówku trzeciego stopnia. Opis i numer telefonu w dwóch paragrafach (akapitach). Odnośnik pocztowy o treści „Kontakt” do adresu e-mail danej osoby, zapisany w nagłówku piątego stopnia
Karta to zamknięta treść o jednej osobie - <article> z klasą card. W środku, w kolejności z arkusza:
<img> z plikiem i tekstem alternatywnym z tekstyNaStrone.txt (dla dyrektora osoba1.jpg, „Dyrektor”) - R.2.7,
<h2> z imieniem i nazwiskiem, <h3> ze stanowiskiem, dwa akapity: opis i telefon,
<h5> z odnośnikiem mailto: - kliknięcie otwiera program pocztowy z wpisanym odbiorcą (R.3.3).
Pierwsza karta jest kompletna (R.2.8).
Typowe błędy
Adres bez mailto: przeglądarka traktuje jak plik na serwerze - odnośnik nie jest pocztowy.
pracownicy.htmlHTMLzmienione: 8 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Nasz zespół</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerclass="banner logo"> <imgsrc="logo.png"alt="logo firmy"> </header> <headerclass="banner title"> <h1>Nasz zespół</h1> </header> <main> <articleclass="card"> <imgsrc="osoba1.jpg"alt="Dyrektor"> <h2>Krzysztof Dobromilski</h2> <h3>Dyrektor</h3> <p>Firma logistyczna była jego marzeniem. Zrealizował je 10 lat temu. Nasza firma prosperuje dzięki Krzysztofowi</p> <p>telefon: 111222333</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> </main> <sectionclass="quotes"> </section> <footer> </footer></body></html>
Podgląd strony po tym kroku (pracownicy.html)
Krok 16: Druga i trzecia karta
ok. 3 min
Polecenie z arkusza
Zawartość kart jest zgodna z obrazem 2.
Dwie kopie karty z danymi z tekstyNaStrone.txt: Joanna Trojanowska (osoba2.jpg, alt „Kierownik logistyków”) i Ewa Nowak (osoba3.jpg, alt „Kadry”, stanowisko „Księgowość i kadry”). Obok siebie postawi je CSS.
pracownicy.htmlHTMLzmienione: 16 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Nasz zespół</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerclass="banner logo"> <imgsrc="logo.png"alt="logo firmy"> </header> <headerclass="banner title"> <h1>Nasz zespół</h1> </header> <main> <articleclass="card"> <imgsrc="osoba1.jpg"alt="Dyrektor"> <h2>Krzysztof Dobromilski</h2> <h3>Dyrektor</h3> <p>Firma logistyczna była jego marzeniem. Zrealizował je 10 lat temu. Nasza firma prosperuje dzięki Krzysztofowi</p> <p>telefon: 111222333</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba2.jpg"alt="Kierownik logistyków"> <h2>Joanna Trojanowska</h2> <h3>Kierownik logistyków</h3> <p>Od początku firmy z nami. Wie jak zorganizować pracę swoich logistyków aby wszystko było na czas</p> <p>telefon: 222333444</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba3.jpg"alt="Kadry"> <h2>Ewa Nowak</h2> <h3>Księgowość i kadry</h3> <p>Od lat finanse powierzamy niezawodnej Ewie. Twardą ręką trzyma kasę i dba o wszystkich pracowników</p> <p>telefon: 333444555</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> </main> <sectionclass="quotes"> </section> <footer> </footer></body></html>
Podgląd strony po tym kroku (pracownicy.html)
Krok 17: Blok cytatów: trzy cytaty
Kryteria:
R.2.9 W bloku cytatów umieszczono przynajmniej jeden cytat, zastosowano znacznik blockquote lub q
ok. 3 min
Polecenie z arkusza
Zawartość bloku cytatów: Trzy cytaty, które należy skopiować do dokumentu HTML z pliku tekstynastrone.txt. Do zdefiniowania poszczególnych cytatów należy zastosować znacznik semantyczny przeznaczony dla cytatu. Treść cytatu jest zapisana w cudzysłowach, imię w paragrafie.
<blockquote> - znacznik dłuższego cytatu (R.2.9). Treść w cudzysłowach, jak w pliku, autor w akapicie. Cytaty nie mają identyfikatorów: skrypt weźmie je jako listę, w kolejności z kodu.
Cytat zmienia się po kliknięciu, więc działa jak przycisk - i tak go opisują dwa atrybuty:
tabindex="0" - do cytatu można przejść klawiszem Tab (zwykły blok tekstu nie dostaje fokusu),
role="button" - czytnik ekranu zapowie go jako przycisk, czyli coś, co da się nacisnąć.
pracownicy.htmlHTMLzmienione: 12 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Nasz zespół</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerclass="banner logo"> <imgsrc="logo.png"alt="logo firmy"> </header> <headerclass="banner title"> <h1>Nasz zespół</h1> </header> <main> <articleclass="card"> <imgsrc="osoba1.jpg"alt="Dyrektor"> <h2>Krzysztof Dobromilski</h2> <h3>Dyrektor</h3> <p>Firma logistyczna była jego marzeniem. Zrealizował je 10 lat temu. Nasza firma prosperuje dzięki Krzysztofowi</p> <p>telefon: 111222333</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba2.jpg"alt="Kierownik logistyków"> <h2>Joanna Trojanowska</h2> <h3>Kierownik logistyków</h3> <p>Od początku firmy z nami. Wie jak zorganizować pracę swoich logistyków aby wszystko było na czas</p> <p>telefon: 222333444</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba3.jpg"alt="Kadry"> <h2>Ewa Nowak</h2> <h3>Księgowość i kadry</h3> <p>Od lat finanse powierzamy niezawodnej Ewie. Twardą ręką trzyma kasę i dba o wszystkich pracowników</p> <p>telefon: 333444555</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> </main> <sectionclass="quotes"> <blockquotetabindex="0"role="button"> "Każdego dnia stawiam sobie nieosiągalne wyzwania i próbuję je wykonać" <p>- Krzysztof</p> </blockquote> <blockquotetabindex="0"role="button"> "Nie bój się porażek, im więcej ich rozwiążesz, tym szybciej osiągniesz cel" <p>- Joanna</p> </blockquote> <blockquotetabindex="0"role="button"> "Niezadowolony pracownik jest dla mnie źródłem nauki" <p>- Ewa</p> </blockquote> </section> <footer> </footer></body></html>
Podgląd strony po tym kroku (pracownicy.html)
Krok 18: Stopka
Kryteria:
R.2.6 W drugim bloku banera zapisano nagłówek h1 "Nasz zespół" , zapisano przynajmniej jeden paragraf w bloku cytatów oraz paragraf w bloku stopki
ok. 1 min
Polecenie z arkusza
Zawartość stopki: paragraf o treści: „Stronę wykonał: ”, dalej wstawiony numer zdającego.
Akapit w <footer>. Na egzaminie po dwukropku wpisujesz swój numer zdającego (PESEL), tu stoi autor rozwiązania. Z <h1> i akapitami w cytatach to R.2.6.
pracownicy.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Nasz zespół</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerclass="banner logo"> <imgsrc="logo.png"alt="logo firmy"> </header> <headerclass="banner title"> <h1>Nasz zespół</h1> </header> <main> <articleclass="card"> <imgsrc="osoba1.jpg"alt="Dyrektor"> <h2>Krzysztof Dobromilski</h2> <h3>Dyrektor</h3> <p>Firma logistyczna była jego marzeniem. Zrealizował je 10 lat temu. Nasza firma prosperuje dzięki Krzysztofowi</p> <p>telefon: 111222333</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba2.jpg"alt="Kierownik logistyków"> <h2>Joanna Trojanowska</h2> <h3>Kierownik logistyków</h3> <p>Od początku firmy z nami. Wie jak zorganizować pracę swoich logistyków aby wszystko było na czas</p> <p>telefon: 222333444</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba3.jpg"alt="Kadry"> <h2>Ewa Nowak</h2> <h3>Księgowość i kadry</h3> <p>Od lat finanse powierzamy niezawodnej Ewie. Twardą ręką trzyma kasę i dba o wszystkich pracowników</p> <p>telefon: 333444555</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> </main> <sectionclass="quotes"> <blockquotetabindex="0"role="button"> "Każdego dnia stawiam sobie nieosiągalne wyzwania i próbuję je wykonać" <p>- Krzysztof</p> </blockquote> <blockquotetabindex="0"role="button"> "Nie bój się porażek, im więcej ich rozwiążesz, tym szybciej osiągniesz cel" <p>- Joanna</p> </blockquote> <blockquotetabindex="0"role="button"> "Niezadowolony pracownik jest dla mnie źródłem nauki" <p>- Ewa</p> </blockquote> </section> <footer> <p>Stronę wykonał: Bartosz Bryniarski</p> </footer></body></html>
Podgląd strony po tym kroku (pracownicy.html)
Etap 3: Styl CSS
Kroki 19-30 · po tym etapie masz 30 z 37 kryteriów (pkt)
Krok 19: Plik styl.css: zmienne i krój Bookman Old Style
Kryteria:
R.4.1 Ustawiono domyślne formatowanie wszystkich selektorów (dla *): krój czcionki "Bookman Old Style", Serif - tylko taka kolejność jest poprawna
ok. 2 min
Polecenie z arkusza
Domyślne formatowanie wszystkich selektorów: krój czcionki Bookman Old Style, w przypadku braku - Serif
Kolory z arkusza w zmiennych na :root - nazwy mówią, do czego służą (--contact-hover), a nie jaki to kolor. Krój ze spacjami w cudzysłowie, rodzina zapasowa serif na końcu - klucz uznaje tylko tę kolejność (R.4.1).
R.3.1 Układ bloków po uruchomieniu strony w przeglądarce jest zgodny z obrazem 2 w arkuszu egzaminacyjnym, nie należy brać pod uwagę zawartości bloku głównego (prawidłowo zastosowano właściwości CSS decydujące o układzie strony, np. float i clear albo display flex albo grid)
ok. 3 min
Polecenie z arkusza
Podział strony na: dwa bloki banera obok siebie, poniżej blok główny, poniżej blok cytatu, na dole stopka. Podział zrealizowany wyłącznie za pomocą semantycznych znaczników sekcji języka HTML5 tak, aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z obrazem 2
grid-template-areas rysuje obraz 2: w pierwszym wierszu dwa banery obok siebie, pod nimi blok główny, cytaty i stopka - każdy przez obie kolumny. grid-template-columns: 50% 50% to od razu szerokości banerów z arkusza (klucz R.4.5 przyjmuje je w tej postaci). Bez float nie trzeba clear - blok główny ma swój wiersz (R.3.1).
Dla obu bloków banera: kolor tła DarkCyan, biały kolor czcionki, szerokość 50%, wysokość 100 px, odstępy między literami 15 px
Wspólna klasa .banner. Szerokość 50% daje kolumna siatki - dopisane width: 50% liczyłoby się od kolumny i zwęziło baner do ćwierci strony. letter-spacing rozstrzela litery „Nasz zespół” jak na obrazie 2 (R.4.4).
Typowe błędy
width: 50% na banerze w kolumnie 50% daje baner szeroki na 25% strony - procent szerokości elementu siatki liczy się od jego kolumny.
Krok 23: Karta pracownicza: siatka, tło, margines i cień
Kryteria: ,
R.3.2 W bloku głównym zdefiniowano trzy bloki kart pracowniczych, umieszczone obok siebie zgodnie z obrazem 2
R.4.8 Ustawiono dla bloków kart pracowniczych cień bloku o przesunięciu w obu osiach 4px, rozmyciu 8px, kolorze DimGray, np. box-shadow: 4px 4px 8px DimGray;
ok. 3 min
Polecenie z arkusza
Dla bloku karty pracowniczej: kolor tła Azure, szerokość 30%, marginesy zewnętrzne 1%, cień bloku o przesunięciu w obu osiach 4 px, rozmyciu 8 px, kolorze DimGray
main dostaje własną siatkę: repeat(3, 30%) to trzy kolumny po 30% - szerokość karty z arkusza zapisana raz, w siatce. Karty stają obok siebie (R.3.2),
margin: 1% - jak każe arkusz. Uwaga na siatkę: procentowy margines elementu siatki liczy się od jego kolumny (30%), więc wychodzi drobniejszy niż w wersji podstawowej. Odstęp między kartami daje column-gap: 2% - tyle, ile dwa marginesy po 1% w wersji podstawowej,
box-shadow: 4px 4px 8px DimGray - przesunięcie w poziomie i w pionie, rozmycie, kolor (R.4.8).
Jedynie dla obrazów w karcie pracowniczej: szerokość 100%
Selektor potomka .card img - logo w banerze zostaje w swoim rozmiarze. display: block (dodatek) usuwa kilka pikseli przerwy pod zdjęciem: obraz w linii tekstu zostawia pod sobą miejsce na „ogonki” liter.
R.4.3 Ustawiono biały kolor czcionki dla obu banerów, stopki oraz selektora a
ok. 1 min
Polecenie z arkusza
Dla selektora odnośnika: biały kolor czcionki
Uwaga w arkuszu i w kluczu: wyłącznie selektor a - nie klasa, nie h5 a. Tu nowoczesność ustępuje projektowi: arkusz zastrzega to pod „późniejszą rozbudowę witryny”. Banery, stopka i odnośniki mają już biały tekst (R.4.3).
Typowe błędy
Reguła .card a albo h5 a nie spełnia R.4.3, nawet jeśli tekst jest biały - klucz sprawdza selektor.
R.4.2 Ustawiono kolor tła DarkCyan dla obu banerów i stopki oraz Azure dla bloków kart pracowniczych i Teal dla nagłówka h5
R.4.5 Ustawiono szerokość obu banerów 50% (width lub grid-template-columns lub flex), bloków kart pracowniczych 30%, nagłówka h5 100%, oraz jedynie obrazów w blokach kart pracowniczych 100%
ok. 2 min
Polecenie z arkusza
Dla nagłówka piątego stopnia: kolor tła Teal, szerokość 100%, wyrównanie tekstu do środka, marginesy wewnętrzne górny i dolny 10 px, pozostałe 0
padding-block: 10px - margines wewnętrzny górny i dolny, padding-inline: 0 - lewy i prawy. To właściwości logiczne: dokładnie to, co mówi arkusz, bez liczenia, która wartość skrótu padding jest która. Ta reguła domyka kolory tła (R.4.2) i szerokości (R.4.5: banery w kolumnach, karty 30%, h5 i zdjęcia 100%).
R.4.10 W momencie gdy kursor myszy znajdzie się na nagłówku h5 jego kolor tła zmienia się na LightSeaGreen
ok. 1 min
Polecenie z arkusza
W momencie gdy kursor myszy znajdzie się na nagłówku piątego stopnia jego kolor tła zmienia się na LightSeaGreen (patrz obraz 2 – środkowa karta)
:hover - kursor nad nagłówkiem (R.4.10). :focus-within - nagłówek, w którym coś ma fokus: przejście klawiszem Tab do odnośnika „Kontakt” podświetla cały pasek tak samo jak kursor.
R.4.6 Ustawiono wyrównanie tekstu do środka dla nagłówka h5 i bloku cytatów
R.4.7 Ustawiono marginesy wewnętrzne (padding) dla nagłówka h5 jedynie górny i dolny 10px, dla bloku cytatów jedynie górny i dolny 30px oraz zewnętrzne (margin) dla paragrafu, nagłówków h2 i h3 15px, dla bloków kart pracowniczych 1%
R.4.9 Ustawiono dla obu banerów odstępy między literami 15px (letter-spacing) oraz dla bloku cytatów czcionkę pochyloną
ok. 2 min
Polecenie z arkusza
Dla bloku cytatów: wyrównanie tekstu do środka, marginesy wewnętrzne górny i dolny 30 px, pozostałe 0, czcionka pochylona
Te same właściwości logiczne co przy h5, font-style: italic dla pochylenia. Domknięte: wyrównanie (h5 i cytaty - R.4.6), marginesy (R.4.7), rozstrzelenie liter banerów i kursywa cytatów (R.4.9).
R.5.2 W stanie początkowym wyświetlany jest tylko pierwszy cytat ("Każdego dnia…"), pozostałe są niewidoczne
ok. 2 min
Polecenie z arkusza
Drugi i trzeci cytat jest usunięty (nie jest wyświetlany)
blockquote + blockquote to selektor sąsiedztwa: cytat, który stoi bezpośrednio po innym cytacie. Pierwszy cytat nie ma poprzednika, więc zostaje; drugi i trzeci znikają (display: none - nie zajmują miejsca). Bez identyfikatorów i bez wyliczania numerów - czwarty cytat w HTML-u też byłby na starcie ukryty (R.5.2).
cursor: pointer pokazuje rączkę nad cytatem - podpowiedź, że da się go kliknąć.
Kroki 31-34 · po tym etapie masz 37 z 37 kryteriów (pkt)
Krok 31: Kliknięcie w pierwszy cytat
Kryteria: , , ,
R.3.4 Dla dowolnego cytatu zdefiniowano zdarzenie związane z jego kliknięciem , które uruchamia funkcję skryptu (atrybut onClick lub słuchacz zdarzenia click lub właściwość onclick obiektu DOM)
R.5.1 Skrypt zapisano w języku JavaScript i zawiera on przynajmniej jedną instrukcję zapisaną zgodnie ze składnią
R.5.3 Po kliknięciu na cytat jeżeli jest wyświetlony pierwszy cytat, zostaje on ukryty, a wyświetlony zostaje drugi cytat ("Nie bój się porażek...")
R.5.6 Przynajmniej jedna czynność z R.5.3 do R.5.5 jest zrealizowana poprzez zmianę właściwości display lub visibility stylu CSS
ok. 3 min
Polecenie z arkusza
Działanie funkcji dla kliknięcia w pierwszy cytat: Pierwszy cytat jest usuwany/ukryty. Drugi cytat jest uwidoczniony (blokowo)
Skrypt na końcu <body>, w pliku strony (klucz sprawdza go „w kodzie strony”).
const quotes - lista trzech cytatów, w kolejności z HTML-u,
showNextQuote(index) ukrywa cytat o podanej pozycji i pokazuje następny „blokowo”. Klucz R.5.6 wymaga zmiany właściwości display (albo visibility) stylu, dlatego skrypt ustawia style.display, a nie klasę CSS,
forEach podpina każdemu cytatowi nasłuchiwacz click; funkcja strzałkowa pamięta pozycję cytatu (index) i przekazuje ją dalej (R.3.4).
Arkusz pozwala na „jedną funkcję parametrową”. W podglądzie: kliknięcie cytatu Krzysztofa pokazuje cytat Joanny.
pracownicy.htmlHTMLzmienione: 12 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Nasz zespół</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerclass="banner logo"> <imgsrc="logo.png"alt="logo firmy"> </header> <headerclass="banner title"> <h1>Nasz zespół</h1> </header> <main> <articleclass="card"> <imgsrc="osoba1.jpg"alt="Dyrektor"> <h2>Krzysztof Dobromilski</h2> <h3>Dyrektor</h3> <p>Firma logistyczna była jego marzeniem. Zrealizował je 10 lat temu. Nasza firma prosperuje dzięki Krzysztofowi</p> <p>telefon: 111222333</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba2.jpg"alt="Kierownik logistyków"> <h2>Joanna Trojanowska</h2> <h3>Kierownik logistyków</h3> <p>Od początku firmy z nami. Wie jak zorganizować pracę swoich logistyków aby wszystko było na czas</p> <p>telefon: 222333444</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba3.jpg"alt="Kadry"> <h2>Ewa Nowak</h2> <h3>Księgowość i kadry</h3> <p>Od lat finanse powierzamy niezawodnej Ewie. Twardą ręką trzyma kasę i dba o wszystkich pracowników</p> <p>telefon: 333444555</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> </main> <sectionclass="quotes"> <blockquotetabindex="0"role="button"> "Każdego dnia stawiam sobie nieosiągalne wyzwania i próbuję je wykonać" <p>- Krzysztof</p> </blockquote> <blockquotetabindex="0"role="button"> "Nie bój się porażek, im więcej ich rozwiążesz, tym szybciej osiągniesz cel" <p>- Joanna</p> </blockquote> <blockquotetabindex="0"role="button"> "Niezadowolony pracownik jest dla mnie źródłem nauki" <p>- Ewa</p> </blockquote> </section> <footer> <p>Stronę wykonał: Bartosz Bryniarski</p> </footer> <script>const quotes = document.querySelectorAll(".quotes blockquote");function showNextQuote(index) { quotes[index].style.display = "none"; quotes[index + 1].style.display = "block"; } quotes.forEach((quote, index) => { quote.addEventListener("click", () => showNextQuote(index)); }); </script></body></html>
Podgląd strony po tym kroku (pracownicy.html)
Krok 32: Kliknięcie w drugi cytat
Kryteria:
R.5.4 Po kliknięciu na cytat jeżeli jest wyświetlony drugi cytat, zostaje on ukryty, a wyświetlony zostaje trzeci cytat ("Niezadowolony pracownik...")
ok. 1 min
Polecenie z arkusza
Działanie funkcji dla kliknięcia w drugi cytat: Drugi cytat jest usuwany/ukryty. Trzeci cytat jest uwidoczniony (blokowo)
Ten przypadek działa bez nowej linii kodu: drugi cytat ma pozycję 1, więc funkcja ukrywa quotes[1] i pokazuje quotes[2] - trzeci. Jedna reguła („ukryj ten, pokaż następny”) obsługuje każdy cytat, który ma następcę. Sprawdzone w Chrome: po dwóch kliknięciach widać tylko cytat Ewy (R.5.4).
Krok 33: Kliknięcie w trzeci cytat: powrót do pierwszego
Kryteria:
R.5.5 Po kliknięciu na cytat jeżeli jest wyświetlony trzeci cytat, zostaje on ukryty, a wyświetlony zostaje pierwszy cytat
ok. 2 min
Polecenie z arkusza
Działanie funkcji dla kliknięcia w trzeci cytat: Trzeci cytat jest usuwany/ukryty. Pierwszy cytat jest uwidoczniony (blokowo)
Trzeci cytat ma pozycję 2, a quotes[3] nie istnieje. Reszta z dzielenia przez liczbę cytatów zawija numerację: (2 + 1) % 3 daje 0 - pierwszy cytat. Dla pozostałych nic się nie zmienia (1 % 3 = 1, 2 % 3 = 2). Bez trzeciej gałęzi if i bez liczby 3 w kodzie (R.5.5).
Typowe błędy
Bez reszty z dzielenia kliknięcie trzeciego cytatu kończy się błędem quotes[3] is undefined - trzeci znika, a pierwszy się nie pojawia.
pracownicy.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Nasz zespół</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerclass="banner logo"> <imgsrc="logo.png"alt="logo firmy"> </header> <headerclass="banner title"> <h1>Nasz zespół</h1> </header> <main> <articleclass="card"> <imgsrc="osoba1.jpg"alt="Dyrektor"> <h2>Krzysztof Dobromilski</h2> <h3>Dyrektor</h3> <p>Firma logistyczna była jego marzeniem. Zrealizował je 10 lat temu. Nasza firma prosperuje dzięki Krzysztofowi</p> <p>telefon: 111222333</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba2.jpg"alt="Kierownik logistyków"> <h2>Joanna Trojanowska</h2> <h3>Kierownik logistyków</h3> <p>Od początku firmy z nami. Wie jak zorganizować pracę swoich logistyków aby wszystko było na czas</p> <p>telefon: 222333444</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba3.jpg"alt="Kadry"> <h2>Ewa Nowak</h2> <h3>Księgowość i kadry</h3> <p>Od lat finanse powierzamy niezawodnej Ewie. Twardą ręką trzyma kasę i dba o wszystkich pracowników</p> <p>telefon: 333444555</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> </main> <sectionclass="quotes"> <blockquotetabindex="0"role="button"> "Każdego dnia stawiam sobie nieosiągalne wyzwania i próbuję je wykonać" <p>- Krzysztof</p> </blockquote> <blockquotetabindex="0"role="button"> "Nie bój się porażek, im więcej ich rozwiążesz, tym szybciej osiągniesz cel" <p>- Joanna</p> </blockquote> <blockquotetabindex="0"role="button"> "Niezadowolony pracownik jest dla mnie źródłem nauki" <p>- Ewa</p> </blockquote> </section> <footer> <p>Stronę wykonał: Bartosz Bryniarski</p> </footer> <script>const quotes = document.querySelectorAll(".quotes blockquote");function showNextQuote(index) { quotes[index].style.display = "none"; quotes[(index + 1) % quotes.length].style.display = "block"; } quotes.forEach((quote, index) => { quote.addEventListener("click", () => showNextQuote(index)); }); </script></body></html>
Podgląd strony po tym kroku (pracownicy.html)
Krok 34: Cytaty obsługiwane z klawiatury
Kryteria:
R.5.7 Zastosowano znaczące nazewnictwo dla wszystkich zmiennych i funkcji w języku polskim lub angielskim. Nazwy odzwierciedlają cel zastosowania
ok. 3 min
Dodatek spoza arkusza - klucz go nie ocenia. Element z role="button" obiecuje zachowanie przycisku, a prawdziwy przycisk działa Enterem i spacją. Nasłuchiwacz keydown:
reaguje na Enter i spację (" "), === porównuje bez zamiany typów,
preventDefault() - spacja nie przewija przy okazji strony,
przenosi fokus na nowy cytat, bo ten, który miał fokus, właśnie zniknął.
Nazwy mówią, do czego służą: quotes, showNextQuote, index (R.5.7).
pracownicy.htmlHTMLzmienione: 7 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Nasz zespół</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerclass="banner logo"> <imgsrc="logo.png"alt="logo firmy"> </header> <headerclass="banner title"> <h1>Nasz zespół</h1> </header> <main> <articleclass="card"> <imgsrc="osoba1.jpg"alt="Dyrektor"> <h2>Krzysztof Dobromilski</h2> <h3>Dyrektor</h3> <p>Firma logistyczna była jego marzeniem. Zrealizował je 10 lat temu. Nasza firma prosperuje dzięki Krzysztofowi</p> <p>telefon: 111222333</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba2.jpg"alt="Kierownik logistyków"> <h2>Joanna Trojanowska</h2> <h3>Kierownik logistyków</h3> <p>Od początku firmy z nami. Wie jak zorganizować pracę swoich logistyków aby wszystko było na czas</p> <p>telefon: 222333444</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> <articleclass="card"> <imgsrc="osoba3.jpg"alt="Kadry"> <h2>Ewa Nowak</h2> <h3>Księgowość i kadry</h3> <p>Od lat finanse powierzamy niezawodnej Ewie. Twardą ręką trzyma kasę i dba o wszystkich pracowników</p> <p>telefon: 333444555</p> <h5><ahref="mailto:[email protected]">Kontakt</a></h5> </article> </main> <sectionclass="quotes"> <blockquotetabindex="0"role="button"> "Każdego dnia stawiam sobie nieosiągalne wyzwania i próbuję je wykonać" <p>- Krzysztof</p> </blockquote> <blockquotetabindex="0"role="button"> "Nie bój się porażek, im więcej ich rozwiążesz, tym szybciej osiągniesz cel" <p>- Joanna</p> </blockquote> <blockquotetabindex="0"role="button"> "Niezadowolony pracownik jest dla mnie źródłem nauki" <p>- Ewa</p> </blockquote> </section> <footer> <p>Stronę wykonał: Bartosz Bryniarski</p> </footer> <script>const quotes = document.querySelectorAll(".quotes blockquote");function showNextQuote(index) { quotes[index].style.display = "none"; quotes[(index + 1) % quotes.length].style.display = "block"; } quotes.forEach((quote, index) => { quote.addEventListener("click", () => showNextQuote(index)); quote.addEventListener("keydown", (event) => {if (event.key === "Enter" || event.key === " ") { event.preventDefault(); showNextQuote(index); quotes[(index + 1) % quotes.length].focus(); } }); }); </script></body></html>
Podgląd strony po tym kroku (pracownicy.html)
Etap 5: Porównanie z wersją podstawową
Krok 35 · po tym etapie masz 37 z 37 kryteriów (pkt)
Krok 35: Co jest inaczej i którą wersję wybrać na egzaminie
ok. 2 min
Obie wersje dają komplet 37 punktów. Różnice:
wersja podstawowa
wersja nowoczesna
banery
float: left, width: 50%, clear bloku głównego
kolumny siatki 50% 50% na <body>
karty
display: flex w <main>, width: 30%
siatka repeat(3, 30%) w <main>
ukrycie cytatów
identyfikatory #quote2, #quote3
selektor sąsiedztwa blockquote + blockquote
odstępy
skrót padding: 10px 0
padding-block i padding-inline
zdarzenie
atrybut onclick="changeQuote(N)"
addEventListener w pętli forEach
zmiana cytatu
trzy gałęzie if / else if / else
jedna linia z resztą z dzielenia
klawiatura
dopiero w dobrych praktykach
od początku: tabindex, role="button", Enter i spacja
W obu wersjach zostały dwie rzeczy wymuszone przez klucz: selektor a dla odnośników (R.4.3) i zmiana style.display w skrypcie (R.5.6) - zamiast przestawiania klasy CSS, które w innych arkuszach jest wygodniejsze.
Na egzaminie trzy gałęzie if z wersji podstawowej trudno pomylić i łatwo sprawdzić kliknięciem. Wersja nowoczesna jest krótsza i działa dla dowolnej liczby cytatów. Przy siatce pilnuj, żeby szerokości bloków stały w grid-template-columns, a nie w width.
Krok 36 · po tym etapie masz 37 z 37 kryteriów (pkt)
Krok 36: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
UWAGA: 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 nazwa przeglądarki, w której sprawdzana była strona. W folderze z numerem zdającego: import.png, kw1.jpg - kw4.jpg, kwerendy.txt, logo.png, osoba1.jpg - osoba3.jpg, pracownicy.html, przeglądarka.txt, 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.