Serwis używa plików cookies do analizy ruchu i poprawy działania. Szczegóły
EE.09-02-22.06-SGCzerwiec 2022 · 45 kroków · ok. 81 min · 39 kryteriów z klucza
Rozwiązanie krok po kroku: Pomocnik CSS z paletą HSL (Nowoczesny kod (grid, JS w pliku))
To drugi sposób rozwiązania tego samego arkusza. Wynik jest ten sam - baza sklep z czterema zapytaniami, wykadrowana i rozciągnięta grafika przestrzeni barw oraz strona kolory.html, która po kliknięciu „Generuj paletę” koloruje tabelę odcieniami hsl() - i tak samo spełnia każde kryterium klucza. Inna jest droga:
siatka CSS zamiast float: kontener strony ma dwie kolumny po 50%, banery zajmują po jednej, a blok główny i stopka - całą szerokość; nic nie trzeba „czyścić” przez clear,
znaczniki opisujące rolę bloków: pierwszy baner to <header>, drugi - <nav> (menu strony), a kolory strony są zmiennymi CSS,
skrypt w osobnym plikuskrypt.js z atrybutem defer, obsługa kliknięcia przez addEventListener zamiast atrybutu onclick w HTML-u,
wartość z pola jest sprawdzana: pusta, ułamkowa albo spoza zakresu 0-360 daje komunikat zamiast cicho złej palety,
jedna pętla po komórkach z tablicą nasyceń zamiast pięciu prawie takich samych linii.
To arkusz EE.09 z czerwca 2022 - kwalifikacji formuły 2017, którą zastąpiła INF.03. Baza i grafika pochodzą z oryginalnego archiwum CKE zad2.zip (załącznik na stronie arkusza), zapytania i zrzuty są policzone na MariaDB 10.4, a skrypt był uruchomiony w Chrome z wartością 200 z obrazu 2 i ze złymi danymi.
Jak liczą się punkty. Klucz ma 39 kryteriów (R.1.1 - R.5.6), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 30 punktów. Przy każdym kroku jest napisane, które kryteria spełnia; klucz przyjmuje zarówno atrybut onclick, jak i słuchacza zdarzenia click.
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 39 kryteriów (pkt)
Krok 1: Folder zdającego i archiwum zad2.zip
ok. 2 min
Polecenie z arkusza
Na pulpicie znajduje się archiwum o nazwie zad2.zip zabezpieczone hasłem: Css_$_Css Archiwum należy rozpakować. Na pulpicie konta Egzamin należy utworzyć folder. Jako nazwy folderu należy użyć numeru zdającego, którym został podpisany arkusz. Rozpakowane pliki należy umieścić w tym folderze.
Folder na pulpicie nazwany numerem PESEL (w tym rozwiązaniu w jego miejscu stoi Bartosz Bryniarski), do niego archiwum zad2.zip rozpakowane z hasłem Css_$_Css. W środku: sklep.sql i kolory.jpg. Strona nie ma PHP, więc otwierasz ją wprost z dysku.
Krok 2: XAMPP i pusta baza sklep
ok. 2 min
Polecenie z arkusza
Za pomocą narzędzia phpMyAdmin należy wykonać operacje na bazie danych: Utworzenie bazy danych o nazwie: sklep z zestawem polskich znaków (np. utf8_unicode_ci)
Start przy Apache i MySQL, potem http://localhost/phpmyadmin, Nowa, nazwa sklep, porównywanie utf8_unicode_ci, Utwórz.
Krok 3: Import pliku sklep.sql i zrzut import.jpg
Kryteria:
R.1.1 Wykonano import tabel do bazy danych sklep , czynność udokumentowano plikiem o nazwie import w formacie JPEG
ok. 3 min
Polecenie z arkusza
Import do bazy sklep z pliku sklep.sql. Czynność należy udokumentować zrzutem ekranu, na którym powinny być widoczne elementy wskazujące na poprawnie wykonany import tabel. Zrzut należy zapisać w formacie JPEG, pod nazwą import. Powinien on obejmować cały ekran monitora, z widocznym paskiem zadań.
Baza sklep, karta Import, plik sklep.sql, Wykonaj. Po imporcie są cztery tabele: kategorie (4 rekordy), klient (7), produkty (11) i zamowienia (12). Zrzut całego ekranu z komunikatem o sukcesie - import.jpg.
Podgląd strony po tym kroku
Krok 4: Zapytanie 1: klienci z Legionowa i Warszawy
Kryteria: ,
R.1.2 Zapisano plik tekstowy o nazwie kwerendy zawierający co najmniej jedno zapytanie SQL, wynikające z treści zadania
R.1.3 Utworzono zapytanie 1 wybierające jedynie imię, nazwisko i miasto klientów z miast Legionowo, Warszawa. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT imie, nazwisko, miasto FROM klient WHERE miasto = "Legionowo" OR miasto = "Warszawa"; oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczne są dokładnie 4 rekordy: Piotr Górski Legionowo, Adam Binder Warszawa, Robert Halicki Warszawa, Alicja Warkowska Legionowo
ok. 3 min
Polecenie z arkusza
Zapytania SQL na bazie sklep zapisane do pliku kwerendy.txt. Zapytanie 1: wybierające jedynie imię, nazwisko i miasto klientów z miast: Legionowo, Warszawa
IN ('Legionowo', 'Warszawa') - wiersz przechodzi, gdy miasto jest jednym z wymienionych; to krótszy zapis dwóch warunków z OR, wygodny, gdy miast przybędzie. Wynik: 4 klientów (Górski, Binder, Halicki, Warkowska). Zapytanie do kwerendy.txt (R.1.2), zrzut - kw1.png. Zrzut pokazuje zapis z OR z wersji podstawowej - wynik jest identyczny.
kwerendy.txtTekstnowy plik
-- Zapytanie 1SELECT imie, nazwisko, miastoFROM klientWHERE miasto IN ('Legionowo', 'Warszawa');
Podgląd strony po tym kroku
Krok 5: Zapytanie 2: produkty droższe niż 500 zł
Kryteria:
R.1.4 Utworzono zapytanie 2 wybierające jedynie nazwę produktu dla produktów o cenie brutto wyższej od 500 zł. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT nazwa FROM produkty WHERE cena_brutto > 500; oraz wynik działania zapytania udokumentowano zrzutem, na którym widocznych jest dokładnie 5 rekordów: Corei5-7400, Goodram, HyperX, Patriot, Kingston SSD
ok. 2 min
Polecenie z arkusza
Zapytanie 2: wybierające jedynie nazwę produktu dla produktów o cenie brutto wyższej od 500 zł
Ostra nierówność cena_brutto > 500, liczba bez apostrofów. Wynik: 5 produktów - Corei5-7400, Goodram, HyperX, Patriot i Kingston SSD. Zrzut: kw2.png.
kwerendy.txtTekstzmienione: 5 linii
-- Zapytanie 1SELECT imie, nazwisko, miastoFROM klientWHERE miasto IN ('Legionowo', 'Warszawa');-- Zapytanie 2SELECT nazwaFROM produktyWHERE cena_brutto > 500;
Podgląd strony po tym kroku
Krok 6: Zapytanie 3: średnia cena w każdej kategorii
Kryteria:
R.1.5 Utworzono zapytanie 3 wybierające nazwę z tabeli kategorie i odpowiadającą jej wartość średniej arytmetycznej cen brutto produktów z tabeli produkty . W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT nazwa_kategorii, AVG(cena_brutto) FROM produkty JOIN kategorie USING(id_kat) GROUP BY produkty.id_kat; (lub porównanie kluczy po WHERE albo po ON, poprawne też GROUP BY nazwa_kategorii) oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczne są dokładnie 4 rekordy z danymi (AVG dowolna liczba miejsc po przecinku): Procesory 520, Płyty_główne 365, Pamięci 602, Dyski 376 lub 377 (zaokrąglenie)
ok. 3 min
Polecenie z arkusza
Zapytanie 3: wybierające nazwę kategorii z tabeli kategorie i odpowiadającą jej wartość średniej arytmetycznej cen brutto produktów tej kategorii z tabeli produkty. Należy posłużyć się relacją.
Złączenie kategorii z produktami po id_kat, funkcja agregująca AVG i GROUP BY nazwa_kategorii - jedna średnia na kategorię. Każda klauzula w osobnej linii, JOIN także. Wynik: Dyski 376,67, Pamięci 602,38, Płyty_główne 365 i Procesory 520,1 - drobna końcówka …006 to skutek typu float kolumny cena_brutto. W prawdziwym sklepie ceny trzyma się w typie DECIMAL, który zapisuje grosze dokładnie. Zrzut: kw3.png.
kwerendy.txtTekstzmienione: 6 linii
-- Zapytanie 1SELECT imie, nazwisko, miastoFROM klientWHERE miasto IN ('Legionowo', 'Warszawa');-- Zapytanie 2SELECT nazwaFROM produktyWHERE cena_brutto > 500;-- Zapytanie 3SELECT nazwa_kategorii, AVG(cena_brutto)FROM kategorieJOIN produkty ON kategorie.id_kat = produkty.id_katGROUP BY nazwa_kategorii;
Podgląd strony po tym kroku
Krok 7: Zapytanie 4: zamówienia klienta nr 2
Kryteria:
R.1.6 Utworzono zapytanie 4 wybierające id zamówienia, ilość i wartość z tabeli zamowienia oraz odpowiadającą im nazwę z tabeli produkty dla klienta o id równym 2. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT id_zam, ilosc, wartosc, nazwa FROM zamowienia JOIN produkty USING(id_prod) WHERE id_klient = 2; (lub porównanie kluczy po WHERE albo po ON) oraz wynik działania zapytania udokumentowano zrzutem na którym widoczne są dokładnie 3 rekordy, jedynie pola id_zam, ilosc, wartosc, nazwa dla id_zam = 3, 4, 11
ok. 2 min
Polecenie z arkusza
Zapytanie 4: wybierające id zamówienia, ilość i wartość z tabeli zamowienia oraz odpowiadającą im nazwę produktu z tabeli produkty dla klienta o id równym 2. Należy posłużyć się relacją
Złączenie zamówień z produktami po id_prod i warunek id_klient = 2 - numer klienta jest w tabeli zamowienia, więc tabeli klient nie trzeba dołączać. Wynik: zamówienia 3, 4 i 11. Zrzut: kw4.png.
kwerendy.txtTekstzmienione: 6 linii
-- Zapytanie 1SELECT imie, nazwisko, miastoFROM klientWHERE miasto IN ('Legionowo', 'Warszawa');-- Zapytanie 2SELECT nazwaFROM produktyWHERE cena_brutto > 500;-- Zapytanie 3SELECT nazwa_kategorii, AVG(cena_brutto)FROM kategorieJOIN produkty ON kategorie.id_kat = produkty.id_katGROUP BY nazwa_kategorii;-- Zapytanie 4SELECT id_zam, ilosc, wartosc, nazwaFROM zamowieniaJOIN produkty ON zamowienia.id_prod = produkty.id_prodWHERE id_klient = 2;
Podgląd strony po tym kroku
Etap 2: Grafika i strona HTML
Kroki 8-27 · po tym etapie masz 21 z 39 kryteriów (pkt)
Krok 8: Grafika: kadr samej przestrzeni barw
ok. 3 min
Polecenie z arkusza
Cechy grafiki z pliku kolory.jpg: Wykadrowana tak, aby była widoczna jedynie przestrzeń barw zgodnie z obrazem 3
GIMP, narzędzie Kadrowanie: prostokąt dokładnie na krawędziach kolorowego pola, bez szarego tła, osi i podpisów. W tym pliku pole ma 262 × 73 px.
Podgląd strony po tym kroku
Krok 9: Grafika: szerokość 500 px bez zachowania proporcji
Kryteria:
R.2.1 Obraz w pliku kolory .jpg wykadrowano tak, aby była widoczna jedynie przestrzeń barw oraz jego szerokość to 500 px, wysokość 75 px (± 10 px) barwy są rozciągnięte względem pierwotnego obrazu
ok. 2 min
Polecenie z arkusza
Przeskalowana bez zachowania proporcji do szerokości 500 px, wysokość pozostaje bez zmian i wynosi około 75 px (przybliżony wymiar, zależny od kadrowania)
Skaluj obraz z rozpiętym łańcuchem: szerokość 500 px, wysokość zostaje 73 px - barwy rozciągają się w poziomie. Zapis jako kolory.jpg (R.2.1).
Podgląd strony po tym kroku
Krok 10: Plik kolory.html z deklaracją HTML5
Kryteria:
R.2.2 Witrynę internetową zapisano w pliku o nazwie kolory.html
ok. 1 min
Polecenie z arkusza
Cechy witryny: Składa się ze stron o nazwach kolory.html, czcionki.html, style.html
Plik kolory.html od razu z <!DOCTYPE html> w pierwszej linii i szkieletem <html>, <head>, <body>. Dwie pozostałe strony powstaną przy menu.
R.2.3 Zapisano jawnie standard kodowania polskich znaków i deklarację HTML5 <!DOCTYPE HTML> oraz zadeklarowano dla witryny język polski (np. lang = 'pl')
ok. 1 min
Polecenie z arkusza
Zadeklarowany język zawartości witryny: polski
lang="pl" w znaczniku <html> - deklaracja HTML5, kodowanie i język są gotowe (R.2.3).
R.3.7 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl2.css , formatowanie pochodzi jedynie z tego arkusza (lub skryptu generującego kolory tła tabeli) 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 styl2.css prawidłowo połączony z kodem strony
<link rel="stylesheet" href="styl2.css"> - całe formatowanie pochodzi z tego pliku, kolory komórek ustawi skrypt (R.3.7).
Krok 17: Drugi blok banera: lista z odnośnikiem Kolory
Kryteria:
R.3.2 Kliknięcie odnośnika Kolory prowadzi do strony kolory.html
ok. 2 min
Polecenie z arkusza
Zawartość drugiego bloku banera: lista punktowana (nieuporządkowana) z elementami, które jednocześnie są odnośnikami: element Kolory prowadzący do strony kolory.html
Lista <ul> w <nav>, odnośnik <a> w każdym <li> (R.3.2). Atrybut aria-current="page" oznacza bieżącą stronę - czytnik ekranu powie „bieżąca strona”, a CSS mógłby ją wyróżnić.
R.3.4 Kliknięcie odnośnika Pomoc inicjuje otwarcie strony https://www.w3schools.com/css/ w osobnej zakładce przeglądarki
R.2.7 W drugim bloku banera umieszczono listę punktowaną o elementach: Kolory, Czcionki, Style CSS, Pomoc. Zastosowano znaczniki <ul>, <li>
ok. 1 min
Polecenie z arkusza
element Pomoc prowadzący do strony https://www.w3schools.com/css/, odnośnik powinien otwierać się w nowej karcie przeglądarki
Pełny adres i target="_blank" (R.3.4); lista ma komplet czterech elementów (R.2.7). rel="noopener noreferrer" - obca strona w nowej karcie nie dostaje dostępu do karty „Pomocnika CSS” (window.opener) ani adresu, z którego przyszedł użytkownik.
R.2.6 W pierwszym bloku banera zapisano nagłówek h1: "Pomocnik CSS", w bloku głównym h2: "Podaj składową H koloru w kodzie HSL" oraz przynajmniej jeden paragraf
ok. 1 min
Polecenie z arkusza
paragraf treści: „0 do 30 czerwienie, do 60 żółcie, do 150 zielenie, do 250 niebieskie, do 360 fiolet i purpura”
Paragraf <p> - na stronie są <h1>, <h2> i paragraf (R.2.6).
kolory.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Pomocnik CSS</title> <linkrel="stylesheet"href="styl2.css"></head><body> <divid="container"> <headerclass="banner"> <h1>Pomocnik CSS</h1> </header> <navclass="banner"> <ul> <li><ahref="kolory.html"aria-current="page">Kolory</a></li> <li><ahref="czcionki.html">Czcionki</a></li> <li><ahref="style.html">Style CSS</a></li> <li><ahref="https://www.w3schools.com/css/"target="_blank"rel="noopener noreferrer">Pomoc</a></li> </ul> </nav> <main> <h2>Podaj składową H koloru w kodzie HSL</h2> <p>0 do 30 czerwienie, do 60 żółcie, do 150 zielenie, do 250 niebieskie, do 360 fiolet i purpura</p> </main> <footer> </footer> </div></body></html>
Podgląd strony po tym kroku (kolory.html)
Krok 23: Obraz kolory.jpg z tekstem alternatywnym
Kryteria:
R.2.8 W bloku głównym umieszczono obraz kolory.jpg z tekstem alternatywnym "Przestrzeń barw HSL"
ok. 1 min
Polecenie z arkusza
obraz kolory.jpg z tekstem alternatywnym „Przestrzeń barw HSL”
<img> z tekstem alternatywnym (R.2.8) i prawdziwymi wymiarami pliku w width i height - przeglądarka rezerwuje miejsce, zanim obraz się wczyta, więc pole pod nim nie „skacze”.
kolory.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Pomocnik CSS</title> <linkrel="stylesheet"href="styl2.css"></head><body> <divid="container"> <headerclass="banner"> <h1>Pomocnik CSS</h1> </header> <navclass="banner"> <ul> <li><ahref="kolory.html"aria-current="page">Kolory</a></li> <li><ahref="czcionki.html">Czcionki</a></li> <li><ahref="style.html">Style CSS</a></li> <li><ahref="https://www.w3schools.com/css/"target="_blank"rel="noopener noreferrer">Pomoc</a></li> </ul> </nav> <main> <h2>Podaj składową H koloru w kodzie HSL</h2> <p>0 do 30 czerwienie, do 60 żółcie, do 150 zielenie, do 250 niebieskie, do 360 fiolet i purpura</p> <imgsrc="kolory.jpg"alt="Przestrzeń barw HSL"width="500"height="73"> </main> <footer> </footer> </div></body></html>
Podgląd strony po tym kroku (kolory.html)
Krok 24: Pole liczbowe z maksimum 360 i podpowiedzią
Kryteria:
R.3.6 Pole edycyjne jest typu numerycznego i ma ustawiony atrybut max = "360" oraz placeholder = "0 – 360"
ok. 2 min
Polecenie z arkusza
Pole edycyjne typu numerycznego o maksymalnej wartości 360 i podpowiedzi o treści „0 – 360”
type="number", max="360" i placeholder="0 – 360" z arkusza (R.3.6). Dodatki: min="0" i step="1" - strzałki nie zejdą poniżej zera i chodzą co 1. Pole nie ma widocznej etykiety (obraz 2 jej nie pokazuje), dlatego aria-label podaje czytnikowi ekranu jego nazwę - sama podpowiedź znika po wpisaniu wartości.
Pole i przycisk stoją w bloku <div class="controls"> - ich wiersz pod obrazem, bez <br>.
kolory.htmlHTMLzmienione: 3 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Pomocnik CSS</title> <linkrel="stylesheet"href="styl2.css"></head><body> <divid="container"> <headerclass="banner"> <h1>Pomocnik CSS</h1> </header> <navclass="banner"> <ul> <li><ahref="kolory.html"aria-current="page">Kolory</a></li> <li><ahref="czcionki.html">Czcionki</a></li> <li><ahref="style.html">Style CSS</a></li> <li><ahref="https://www.w3schools.com/css/"target="_blank"rel="noopener noreferrer">Pomoc</a></li> </ul> </nav> <main> <h2>Podaj składową H koloru w kodzie HSL</h2> <p>0 do 30 czerwienie, do 60 żółcie, do 150 zielenie, do 250 niebieskie, do 360 fiolet i purpura</p> <imgsrc="kolory.jpg"alt="Przestrzeń barw HSL"width="500"height="73"> <divclass="controls"> <inputtype="number"id="hue"min="0"max="360"step="1"placeholder="0 – 360"aria-label="Składowa H koloru"> </div> </main> <footer> </footer> </div></body></html>
Podgląd strony po tym kroku (kolory.html)
Krok 25: Przycisk „Generuj paletę”
Kryteria:
R.2.10 W bloku głównym umieszczono pole edycyjne i przycisk
ok. 1 min
Polecenie z arkusza
Przycisk „Generuj paletę”, którego wciśnięcie uruchamia skrypt
<button type="button"> z identyfikatorem generate - po nim skrypt podepnie obsługę kliknięcia. type="button" mówi wprost, że przycisk niczego nie wysyła. Pole i przycisk są w bloku głównym (R.2.10).
kolory.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Pomocnik CSS</title> <linkrel="stylesheet"href="styl2.css"></head><body> <divid="container"> <headerclass="banner"> <h1>Pomocnik CSS</h1> </header> <navclass="banner"> <ul> <li><ahref="kolory.html"aria-current="page">Kolory</a></li> <li><ahref="czcionki.html">Czcionki</a></li> <li><ahref="style.html">Style CSS</a></li> <li><ahref="https://www.w3schools.com/css/"target="_blank"rel="noopener noreferrer">Pomoc</a></li> </ul> </nav> <main> <h2>Podaj składową H koloru w kodzie HSL</h2> <p>0 do 30 czerwienie, do 60 żółcie, do 150 zielenie, do 250 niebieskie, do 360 fiolet i purpura</p> <imgsrc="kolory.jpg"alt="Przestrzeń barw HSL"width="500"height="73"> <divclass="controls"> <inputtype="number"id="hue"min="0"max="360"step="1"placeholder="0 – 360"aria-label="Składowa H koloru"> <buttontype="button"id="generate">Generuj paletę</button> </div> </main> <footer> </footer> </div></body></html>
Podgląd strony po tym kroku (kolory.html)
Krok 26: Tabela 4 × 2 i miejsce na komunikat
Kryteria:
R.2.9 W bloku głównym umieszczono tabelę o czterech kolumnach i dwóch wierszach, z czego pierwszy wiersz ma wszystkie komórki połączone (colspan='4'), zastosowano znaczniki <table>, <tr>, <td>
ok. 3 min
Polecenie z arkusza
Tabela o czterech kolumnach i dwóch wierszach, z czego pierwszy wiersz ma wszystkie komórki połączone, wypełniona zgodnie z Obrazem 2
Pierwszy wiersz to jedna komórka z colspan="4", drugi - cztery zwykłe komórki (R.2.9).
Nad tabelą pusty paragraf <p id="message"> - skrypt wpisze do niego komunikat o złej wartości. aria-live="polite" każe czytnikowi ekranu przeczytać nowy komunikat, gdy się pojawi, bez przerywania tego, co właśnie czyta.
kolory.htmlHTMLzmienione: 12 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Pomocnik CSS</title> <linkrel="stylesheet"href="styl2.css"></head><body> <divid="container"> <headerclass="banner"> <h1>Pomocnik CSS</h1> </header> <navclass="banner"> <ul> <li><ahref="kolory.html"aria-current="page">Kolory</a></li> <li><ahref="czcionki.html">Czcionki</a></li> <li><ahref="style.html">Style CSS</a></li> <li><ahref="https://www.w3schools.com/css/"target="_blank"rel="noopener noreferrer">Pomoc</a></li> </ul> </nav> <main> <h2>Podaj składową H koloru w kodzie HSL</h2> <p>0 do 30 czerwienie, do 60 żółcie, do 150 zielenie, do 250 niebieskie, do 360 fiolet i purpura</p> <imgsrc="kolory.jpg"alt="Przestrzeń barw HSL"width="500"height="73"> <divclass="controls"> <inputtype="number"id="hue"min="0"max="360"step="1"placeholder="0 – 360"aria-label="Składowa H koloru"> <buttontype="button"id="generate">Generuj paletę</button> </div> <pid="message"aria-live="polite"></p> <table> <tr> <tdcolspan="4">Kolor główny</td> </tr> <tr> <td>kolor 2</td> <td>kolor 3</td> <td>kolor 4</td> <td>kolor 5</td> </tr> </table> </main> <footer> </footer> </div></body></html>
Podgląd strony po tym kroku (kolory.html)
Krok 27: Stopka: autor
ok. 1 min
Polecenie z arkusza
Zawartość bloku stopki: paragraf o treści „Autor: ”, dalej wstawiony numer zdającego
Paragraf w stopce. Na egzaminie po dwukropku wpisujesz swój numer PESEL; tu stoi Bartosz Bryniarski.
kolory.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Pomocnik CSS</title> <linkrel="stylesheet"href="styl2.css"></head><body> <divid="container"> <headerclass="banner"> <h1>Pomocnik CSS</h1> </header> <navclass="banner"> <ul> <li><ahref="kolory.html"aria-current="page">Kolory</a></li> <li><ahref="czcionki.html">Czcionki</a></li> <li><ahref="style.html">Style CSS</a></li> <li><ahref="https://www.w3schools.com/css/"target="_blank"rel="noopener noreferrer">Pomoc</a></li> </ul> </nav> <main> <h2>Podaj składową H koloru w kodzie HSL</h2> <p>0 do 30 czerwienie, do 60 żółcie, do 150 zielenie, do 250 niebieskie, do 360 fiolet i purpura</p> <imgsrc="kolory.jpg"alt="Przestrzeń barw HSL"width="500"height="73"> <divclass="controls"> <inputtype="number"id="hue"min="0"max="360"step="1"placeholder="0 – 360"aria-label="Składowa H koloru"> <buttontype="button"id="generate">Generuj paletę</button> </div> <pid="message"aria-live="polite"></p> <table> <tr> <tdcolspan="4">Kolor główny</td> </tr> <tr> <td>kolor 2</td> <td>kolor 3</td> <td>kolor 4</td> <td>kolor 5</td> </tr> </table> </main> <footer> <p>Autor: Bartosz Bryniarski</p> </footer> </div></body></html>
Podgląd strony po tym kroku (kolory.html)
Etap 3: Styl CSS
Kroki 28-38 · po tym etapie masz 32 z 39 kryteriów (pkt)
Krok 28: Plik styl2.css: kolory jako zmienne i kontener strony
Kryteria:
R.4.1 Ustawiono krój czcionki Helvetica, sans-serif dla kontenera całej strony lub body (czcionka Helvetica jako pierwsza)
ok. 2 min
Polecenie z arkusza
Styl CSS zdefiniowany w całości w zewnętrznym pliku o nazwie styl2.css. Dla kontenera całej strony: krój czcionki Helvetica, w przypadku braku sans-serif, kolor tła Linen, kolor czcionki #222, marginesy zewnętrzne automatycznie wyliczane przez przeglądarkę, szerokość 90%
Na początku zmienne CSS w :root: pięć kolorów z arkusza dostaje nazwy (--page-bg, --text, --dark, --light, --link). Czarny i biały występują w arkuszu po kilka razy - zmiana motywu to wtedy kilka linii na górze pliku.
Kontener: krój Helvetica, sans-serif (R.4.1), tło i kolor tekstu ze zmiennych, margin: auto przy szerokości 90% - kontener stoi na środku okna.
R.3.1 Układ bloków po uruchomieniu strony w przeglądarce jest zgodny z Obrazem 2 w arkuszu egzaminacyjnym (prawidłowo zastosowano właściwości CSS układające bloki na stronie, np. float i clear albo display flex albo grid)
R.4.4 Ustawiono wysokość 100px dla obu banerów oraz szerokość 90% dla kontenera całej strony lub body i szerokość 50% dla obu banerów (width lub grid-template-columns lub flex)
ok. 3 min
Polecenie z arkusza
Podział zrealizowany za pomocą znaczników sekcji tak, aby wygląd układu bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2
Kontener staje się siatką: display: grid i grid-template-columns: 50% 50% - dwie równe kolumny. Bloki wypełniają komórki po kolei: <header> - pierwszą, <nav> - drugą, więc banery stoją obok siebie.
Blok główny i stopka mają grid-column: 1 / -1 - od pierwszej linii siatki do ostatniej (-1 liczy od końca), czyli przez obie kolumny. Każdy zaczyna nowy wiersz pod banerami, bez float i clear (R.3.1). Klucz przyjmuje grid-template-columns jako szerokość 50% banerów; z wysokością 100 px i szerokością kontenera 90% daje to R.4.4.
Typowe błędy
Bez grid-column: 1 / -1 blok główny trafi do lewej kolumny pod pierwszym banerem, a stopka - obok niego, w prawej.
Krok 36: Odnośnik pod kursorem i z klawiatury: biały
Kryteria:
R.4.10 Gdy kursor znajdzie się na dowolnym odnośniku kolor czcionki zmienia się na biały (za pomocą pseudoklasy :hover)
ok. 1 min
Polecenie z arkusza
W momencie, gdy kursor znajdzie się na odnośniku kolor czcionki tego odnośnika zmienia się na biały
:hover - kursor nad odnośnikiem (R.4.10). Ten sam wygląd dostaje :focus-visible - odnośnik wybrany klawiszem Tab; bez myszy też widać, gdzie się jest w menu.
Krok 37: Elementy listy: kontener liniowo-blokowy z dolną linią
Kryteria: , ,
R.4.6 Ustawiono marginesy zewnętrzne (margin) auto dla kontenera całej strony lub body, 40px dla selektora table i 10px dla selektora li oraz marginesy wewnętrzne (padding) 20px dla bloku głównego i stopki, 30px dla komórki tabeli i 5px dla selektora li
R.4.8 Ustawiono dolną linię obramowania (border-bottom) 1px solid white dla elementu listy
R.4.9 Dla elementu listy ustawiono własność display: inline-block
ok. 2 min
Polecenie z arkusza
Dla selektora elementu listy: sposobem wyświetlenia jest kontener liniowo-blokowy (patrz Tabela 3), marginesy wewnętrzne 5 px, zewnętrzne 10 px, dolna linia obramowania ciągła o szerokości 1 px i kolorze białym
Selektor li: display: inline-block (R.4.9) - elementy obok siebie, ale z marginesami i obramowaniem jak bloki; marginesy z arkusza są komplet (R.4.6); border-bottom - biała linia pod każdym odnośnikiem (R.4.8).
Dodatek spoza arkusza: blok .controls jako flex z odstępem gap: 5px - pole i przycisk stoją w jednym wierszu pod obrazem, w równym odstępie, bez <br> i bez spacji w HTML-u. Klucz tego nie ocenia.
Kroki 39-43 · po tym etapie masz 39 z 39 kryteriów (pkt)
Krok 39: Plik skrypt.js podpięty z atrybutem defer
Kryteria:
R.5.1 Skrypt zapisano językiem JavaScript i zawarto w nim przynajmniej jedną instrukcję języka
ok. 3 min
Polecenie z arkusza
Skrypt: Napisany w języku JavaScript
Skrypt w osobnym pliku skrypt.js, podpięty w <head> znacznikiem <script src="skrypt.js" defer>. Atrybut defer każe pobrać plik od razu, ale wykonać go dopiero po wczytaniu całego HTML-a - pole, przycisk i tabela już wtedy istnieją, choć znacznik stoi na górze strony. Arkusz nie mówi, gdzie ma być skrypt, a osobny plik oddziela zachowanie strony od jej treści.
W pliku:
'use strict' - tryb ścisły: literówka w nazwie zmiennej daje błąd zamiast cicho tworzyć nową zmienną globalną,
const - stałe na elementy strony, pobrane raz (pole, przycisk, paragraf komunikatu),
document.querySelectorAll('td') - wszystkie komórki tabeli, w kolejności z kodu (R.5.1).
kolory.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Pomocnik CSS</title> <linkrel="stylesheet"href="styl2.css"> <scriptsrc="skrypt.js"defer></script></head><body> <divid="container"> <headerclass="banner"> <h1>Pomocnik CSS</h1> </header> <navclass="banner"> <ul> <li><ahref="kolory.html"aria-current="page">Kolory</a></li> <li><ahref="czcionki.html">Czcionki</a></li> <li><ahref="style.html">Style CSS</a></li> <li><ahref="https://www.w3schools.com/css/"target="_blank"rel="noopener noreferrer">Pomoc</a></li> </ul> </nav> <main> <h2>Podaj składową H koloru w kodzie HSL</h2> <p>0 do 30 czerwienie, do 60 żółcie, do 150 zielenie, do 250 niebieskie, do 360 fiolet i purpura</p> <imgsrc="kolory.jpg"alt="Przestrzeń barw HSL"width="500"height="73"> <divclass="controls"> <inputtype="number"id="hue"min="0"max="360"step="1"placeholder="0 – 360"aria-label="Składowa H koloru"> <buttontype="button"id="generate">Generuj paletę</button> </div> <pid="message"aria-live="polite"></p> <table> <tr> <tdcolspan="4">Kolor główny</td> </tr> <tr> <td>kolor 2</td> <td>kolor 3</td> <td>kolor 4</td> <td>kolor 5</td> </tr> </table> </main> <footer> <p>Autor: Bartosz Bryniarski</p> </footer> </div></body></html>
Krok 40: Funkcja generatePalette i słuchacz kliknięcia
Kryteria: ,
R.3.5 Dla przycisku zdefiniowano obsługę zdarzenia kliknięcia (atrybut onClick lub słuchacz zdarzenia click lub właściwość onclick obiektu DOM)
R.5.2 Zapisano w skrypcie funkcję, która jest wywoływana po wciśnięciu przycisku
ok. 2 min
Polecenie z arkusza
Składa się z funkcji wywoływanej po wciśnięciu przycisku
Funkcja generatePalette, na razie pusta, i addEventListener('click', generatePalette) - przycisk wywoła ją przy każdym kliknięciu (R.3.5, R.5.2). Funkcję podajesz bez nawiasów: przekazujesz samą funkcję, a wywoła ją przeglądarka. W HTML-u nie ma atrybutu onclick - cały kod JavaScript jest w jednym pliku.
Typowe błędy
addEventListener('click', generatePalette()) z nawiasami wywołuje funkcję raz, przy wczytaniu strony, i przekazuje jej wynik (undefined) - kliknięcie nic nie robi.
R.5.3 Zapisano instrukcję pobierania wartości wpisanej w polu edycyjnym
ok. 3 min
Polecenie z arkusza
Pobiera wartość wpisaną w polu edycyjnym
hueInput.value - wartość z pola (R.5.3), zawsze napis; Number() zamienia ją na liczbę,
warunek odrzuca pole puste, liczbę niecałkowitą (Number.isInteger) i spoza zakresu 0-360. Atrybut max="360" tego nie załatwia - blokuje tylko strzałki, a z klawiatury da się wpisać 500, które jako kąt barwy dałoby zieleń (500° = 140°),
przy złej wartości komunikat przez textContent (zwykły tekst, nigdy kod HTML) i return - funkcja kończy się, zanim zmieni kolory; przy dobrej komunikat znika.
W podglądzie wpisz 500 i kliknij - pod polem pojawia się komunikat.
R.5.4 W kodzie jest ustalany przynajmniej jeden kolor w postaci hsl(<wartość pobrana>, S, 50%) gdzie S przyjmuje jedną z wartości: 100%, 80%, 60%, 40% lub 20%
R.5.5 Przynajmniej jeden kolor w formacie hsl jest widoczny w przeglądarce jako tło dowolnej komórki tabeli
ok. 2 min
Polecenie z arkusza
Ustala tło w formacie HSL dla komórek tabeli. Składowa H odpowiada wartości pobranej z pola edycyjnego, wartość L jest stała i wynosi zawsze 50%, wartość S jest różna dla poszczególnych komórek tabeli i wynosi: dla pierwszego wiersza 100%
cells[0] to komórka „Kolor główny”. Napis koloru powstaje z szablonu tekstowego - tekst w odwróconych apostrofach (backtick), a w nim ${hue} wstawia wartość zmiennej. Dla 200 wychodzi hsl(200, 100%, 50%) (R.5.4), widoczne jako tło komórki (R.5.5). Szablon czyta się łatwiej niż sklejanie "hsl(" + h + ", 100%, 50%)".
Krok 43: Wszystkie komórki: tablica nasyceń i pętla
Kryteria:
R.5.6 Skrypt wyświetla w przeglądarce kolory tła komórek tabeli: pierwszy wiersz: hsl(<pob.wartość>, 100%, 50%) drugi wiersz, kolejno: hsl(<pob.wartość>, 80%, 50%), hsl(<pob.wartość>, 60%, 50%), hsl(<pob.wartość>, 40%, 50%), hsl(<pob.wartość>, 20%, 50%)
ok. 3 min
Polecenie z arkusza
dla drugiego wiersza, kolejno w czterech komórkach: 80%, 60%, 40% i 20%
Pięć nasyceń z arkusza w tablicy SATURATIONS na górze pliku, a zamiast pięciu prawie identycznych linii - jedna pętla forEach: dla każdej komórki dostaje ją samą (cell) i jej numer (index), a nasycenie bierze z tablicy pod tym samym numerem. Zmiana palety (np. sześć odcieni) to zmiana tablicy, nie kodu (R.5.6).
Sprawdzone w Chrome: po wpisaniu 200 komórki mają kolory hsl(200, 100%, 50%) … hsl(200, 20%, 50%) - niebieskie, jak na obrazie 2; po wpisaniu 500 albo 120.5 paleta zostaje, a pod polem stoi komunikat.
Na egzaminie wersja podstawowa trzyma się funkcji i zdarzeń z tabeli 1 arkusza i łatwiej ją napisać bez dokumentacji. Nowoczesna jest łatwiejsza do rozbudowy (nowy kolor to jedna liczba w tablicy) i nie pokazuje cicho złej palety - a klucz przyjmuje obie.
Krok 45 · po tym etapie masz 39 z 39 kryteriów (pkt)
Krok 45: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
UWAGA: po zakończeniu pracy utwórz w folderze z numerem, którym został podpisany arkusz plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowałeś poprawność działania witryny. Nagraj płytę z rezultatami pracy.
W przeglądarka.txt nazwa przeglądarki. W folderze: czcionki.html, import.jpg, kolory.html, kolory.jpg, kw1.png - kw4.png, kwerendy.txt, przeglądarka.txt, skrypt.js, styl2.css i style.html (arkusz dopuszcza „ewentualnie inne przygotowane pliki”). 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.