Serwis używa plików cookies do analizy ruchu i poprawy działania. Szczegóły
EE.09-06-22.01-SGStyczeń 2022 · 25 kroków · ok. 72 min · 37 kryteriów z klucza
Rozwiązanie krok po kroku: Konfigurator stylów CSS w JavaScript (Nowoczesny kod (flex, addEventListener))
To drugi sposób rozwiązania tego samego arkusza. Wynik jest ten sam - baza auta z czterema zapytaniami, zdjęcie Gibraltaru o szerokości 300 px oraz strona konfigurator.html, na której kontrolki z bloku lewego zmieniają wygląd bloku prawego - i tak samo spełnia każde kryterium klucza. Inna jest droga:
flex zamiast float: blok lewy i prawy stoją w <main>, a obraz z listą - we wspólnym kontenerze; ani stopka, ani akapit nie potrzebują clear,
etykiety <label> przy każdej kontrolce, pola radio z wartościami (value="square") i przyciski z atrybutem data-color - kolor przycisku i kolor tła bierze się z tego samego miejsca,
zmienne CSS dla kolorów bloków,
skrypt w osobnym plikuskrypt.js, podpięty z atrybutem defer, z obsługą zdarzeń przez addEventListener zamiast atrybutów onclick w HTML-u,
ramka obrazu włączana klasą CSS, a rozmiar czcionki sprawdzany przed użyciem.
To arkusz EE.09 ze stycznia 2022 - kwalifikacji formuły 2017, którą zastąpiła INF.03. Baza, zdjęcie i tekst pochodzą z oryginalnego archiwum CKE pliki6 (załącznik na stronie arkusza), zapytania i zrzuty są policzone na MariaDB 10.4, a każda reakcja skryptu sprawdzona w Chrome. Kroki bazy danych i grafiki są takie same jak w wersji podstawowej. Podgląd od kroku z HTML-em to działająca strona - kontrolki można klikać.
Jak liczą się punkty. Klucz ma 37 kryteriów (R.1.1 - R.5.6), każde za 1 punkt. Próg zdania części praktycznej 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: Folder zdającego i archiwum pliki6
ok. 2 min
Polecenie z arkusza
Należy utworzyć folder o nazwie odpowiadającej numerowi PESEL zdającego lub w przypadku jego braku innemu numerowi, którym został podpisany arkusz. Archiwum należy rozpakować do tego folderu. Wszystkie wykonane w czasie egzaminu pliki w tym zrzuty ekranu, pliki strony, styli należy umieścić w tym folderze.
Na pulpicie tworzysz folder nazwany numerem PESEL - w tym rozwiązaniu w jego miejscu stoi imię i nazwisko autora, Bartosz Bryniarski. Archiwum pliki6.zip rozpakowujesz do tego folderu, podając hasło #s4mochody! (z krzyżykiem na początku, cyfrą 4 zamiast „a” i wykrzyknikiem na końcu). W środku są: auta.sql, gibraltar.jpg i Lorem Ipsum.txt.
Krok 2: XAMPP i pusta baza auta
ok. 2 min
Polecenie z arkusza
Uruchom usługi MySQL i Apache za pomocą XAMPP Control Panel. Za pomocą narzędzia phpMyAdmin wykonaj podane operacje na bazie danych: Utwórz bazę danych o nazwie auta
W XAMPP Control PanelStart przy Apache i MySQL, potem http://localhost/phpmyadmin, Nowa, nazwa auta, Utwórz. Sama strona tego zadania nie łączy się z bazą - baza służy tylko do czterech zapytań.
Krok 3: Import pliku auta.sql i zrzut egzamin.jpg
Kryteria:
R.1.1 Wykonano import tabel do bazy auta , czynność udokumentowano plikiem o nazwie egzamin w formacie JPEG
ok. 3 min
Polecenie z arkusza
Do bazy auta zaimportuj plik auta.sql z rozpakowanego archiwum. Wykonaj zrzut ekranu po imporcie. Zrzut zapisz w folderze z numerem PESEL lub w przypadku jego braku w folderze z innym numerem, którym został podpisany arkusz, w formacie JPEG o nazwie egzamin. 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
Zaznacz bazę auta, karta Import, Wybierz plik → auta.sql, Wykonaj. Plik tworzy cztery tabele z kluczami głównymi i obcymi: klasa (3 wiersze), klienci (6), samochody (5) i wypozyczenia (7). Na zrzucie widać zielony komunikat o sukcesie i cztery tabele w lewym panelu.
Zrzut całego ekranu z paskiem zadań zapisujesz jako egzamin.jpg.
Typowe błędy
Zrzut importu ma być w JPEG, a zrzuty zapytań w PNG - pomylony format to strata punktu.
Podgląd strony po tym kroku
Krok 4: Zapytanie 1: użytkownik Agnieszka z hasłem haslo4
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 tworzące użytkownika Agnieszka z hasłem haslo4. W pliku z kwerendami lub na zrzucie istnieje zapis np.: CREATE USER 'Agnieszka' IDENTIFIED BY 'haslo4'; (lub z @'localhost') oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczny jest efekt poprawnie wykonanego zapytania
ok. 3 min
Polecenie z arkusza
Zapisz i wykonaj zapytania SQL działające na bazie auta. Zapytania zapisz w pliku kwerendy.txt, w folderze z numerem PESEL lub w przypadku jego braku w folderze z innym numerem, którym został podpisany arkusz. Wykonaj zrzuty ekranu przedstawiające wyniki działania kwerend. Zrzuty zapisz w formacie PNG i nadaj im nazwy kw1, kw2, kw3, kw4. Zrzuty powinny obejmować cały ekran monitora z widocznym paskiem zadań. Zapytanie 1: tworzące użytkownika Agnieszka z hasłem haslo4
CREATE USER 'Agnieszka' - nowe konto serwera bazy danych (nie wiersz w tabeli). Nazwa w apostrofach,
IDENTIFIED BY 'haslo4' - hasło konta; serwer zapisze jego skrót.
Bez części @'host' konto może łączyć się z dowolnego komputera (%); klucz przyjmuje też 'Agnieszka'@'localhost'. Nowe konto nie ma jeszcze żadnych uprawnień - arkusz ich nie wymaga. phpMyAdmin odpowiada „MySQL zwrócił pusty wynik”, a konto widać na karcie Konta użytkowników. Zapytanie kopiujesz do nowego pliku kwerendy.txt, zrzut - do kw1.png.
Typowe błędy
Drugie wykonanie zgłosi błąd #1396 („Operation CREATE USER failed”) - konto już istnieje. Na zrzucie ma być efekt udanego wykonania.
kwerendy.txtTekstnowy plik
-- Zapytanie 1CREATE USER 'Agnieszka' IDENTIFIED BY 'haslo4';
Podgląd strony po tym kroku
Krok 5: Zapytanie 2: średni rocznik opli
Kryteria:
R.1.4 Utworzono zapytanie 2 liczące w tabeli samochody średnią arytmetyczną roczników samochodów, których marką jest opel. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT AVG(rocznik) FROM samochody WHERE marka='opel'; oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczna jest wartość 2017,5 (dowolnie zaokrąglona lub nie)
ok. 2 min
Polecenie z arkusza
Zapytanie 2: liczące w tabeli samochody średnią arytmetyczną roczników samochodów, których marką jest opel
SELECT AVG(rocznik) - funkcja AVG liczy średnią arytmetyczną kolumny,
FROM samochody,
WHERE marka = 'opel' - tylko wiersze opli.
W tabeli są dwa ople: zafira z 2018 i insignia z 2017 roku, więc wynik to 2017.5000 - phpMyAdmin pokazuje średnią z czterema miejscami po przecinku. Zrzut: kw2.png.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1CREATE USER 'Agnieszka' IDENTIFIED BY 'haslo4';-- Zapytanie 2SELECT AVG(rocznik) FROM samochody WHERE marka = 'opel';
Podgląd strony po tym kroku
Krok 6: Zapytanie 3: marki i imiona klientów przez tabelę wypozyczenia
Kryteria:
R.1.5 Utworzono zapytanie 3 wybierające nazwy marek samochodów i imiona klientów z nimi powiązane za pomocą tabeli wypozyczenia . Zapytanie wykorzystuje relację pomiędzy trzema tabelami. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT marka, imie FROM samochody JOIN wypozyczenia ON samochody.id = wypozyczenia.samochody_id JOIN klienci ON klienci.id = wypozyczenia.klienci_id; możliwe również INNER JOIN lub za pomocą warunku oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczne są jedynie kolumny marka i imie; jedynie 7 rekordów
ok. 4 min
Polecenie z arkusza
Zapytanie 3: wybierające jedynie nazwy marek samochodów i imiona klientów z nimi powiązane za pomocą tabeli wypozyczenia. Zapytanie wykorzystuje relację wiele do wielu pomiędzy trzema tabelami
Relacja wiele do wielu nie ma bezpośredniego połączenia samochodu z klientem - łączy je tabela pośrednia wypozyczenia, w której każdy wiersz ma numer klienta (klienci_id) i numer samochodu (samochody_id):
SELECT marka, imie - tylko dwie kolumny,
FROM samochody,
JOIN wypozyczenia ON samochody.id = wypozyczenia.samochody_id - do każdego samochodu jego wypożyczenia,
JOIN klienci ON klienci.id = wypozyczenia.klienci_id - do każdego wypożyczenia klient.
Wynik ma 7 wierszy - tyle, ile wypożyczeń. Ford nie był wypożyczony, więc go nie ma; fiat i opel występują kilka razy, bo wypożyczało je kilku klientów (Jan dwa razy brał opla). Zrzut: kw3.png.
Typowe błędy
Złączenie samych tabel samochody i klienci (bez wypozyczenia) nie ma wspólnej kolumny - wyjdzie każdy samochód z każdym klientem, 30 wierszy.
kwerendy.txtTekstzmienione: 6 linii
-- Zapytanie 1CREATE USER 'Agnieszka' IDENTIFIED BY 'haslo4';-- Zapytanie 2SELECT AVG(rocznik) FROM samochody WHERE marka = 'opel';-- Zapytanie 3SELECT marka, imieFROM samochodyJOIN wypozyczenia ON samochody.id = wypozyczenia.samochody_idJOIN klienci ON klienci.id = wypozyczenia.klienci_id;
Podgląd strony po tym kroku
Krok 7: Zapytanie 4: usunięcie kolumny cena
Kryteria:
R.1.6 Utworzono zapytanie 4 usuwające kolumnę cena z tabeli klasa . W pliku z kwerendami lub na zrzucie istnieje zapis np.: ALTER TABLE klasa DROP COLUMN cena; (poprawne też bez COLUMN) oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczny jest efekt poprawnie wykonanego zapytania lub tabela bez kolumny cena
ok. 2 min
Polecenie z arkusza
Zapytanie 4: usuwające kolumnę cena z tabeli klasa
ALTER TABLE klasa zmienia strukturę tabeli, a DROP COLUMN cena usuwa kolumnę razem z danymi (słowo COLUMN jest opcjonalne). Po wykonaniu karta Struktura tabeli klasa ma tylko id i klasa. Zrzut: kw4.png; kwerendy.txt ma komplet czterech zapytań.
Typowe błędy
Usunięcie kolumny jest nieodwracalne - nie ma „cofnij”. Drugie wykonanie zgłosi błąd #1091 („nie można usunąć kolumny, sprawdź, czy istnieje”).
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1CREATE USER 'Agnieszka' IDENTIFIED BY 'haslo4';-- Zapytanie 2SELECT AVG(rocznik) FROM samochody WHERE marka = 'opel';-- Zapytanie 3SELECT marka, imieFROM samochodyJOIN wypozyczenia ON samochody.id = wypozyczenia.samochody_idJOIN klienci ON klienci.id = wypozyczenia.klienci_id;-- Zapytanie 4ALTER TABLE klasa DROP COLUMN cena;
Podgląd strony po tym kroku
Etap 2: Grafika i strona HTML
Kroki 8-14 · po tym etapie masz 20 z 37 kryteriów (pkt)
Krok 8: Grafika: gibraltar.jpg o szerokości 300 px
Kryteria:
R.2.1 Plik gibraltar.jpg jest przeskalowany z zachowaniem proporcji do szerokości dokładnie 300 px odpowiadająca temu wysokość wynosi 300 px ±5 px
ok. 3 min
Polecenie z arkusza
Plik gibraltar.jpg, wypakowany z archiwum, należy przeskalować z zachowaniem proporcji tak, aby szerokość wynosiła dokładnie 300 px i zapisać obraz pod tą samą nazwą
Oryginał ma 400 × 400 px. W GIMP-ie Obraz → Skaluj obraz, łańcuch między szerokością a wysokością złączony (zachowanie proporcji), szerokość 300 - wysokość sama zmieni się na 300. Plik → Nadpisz gibraltar.jpg. Klucz dopuszcza wysokość 300 ± 5 px.
Typowe błędy
Ustawienie szerokości atrybutem width albo w CSS nie zmienia pliku - klucz mierzy sam plik gibraltar.jpg.
R.2.2 Witrynę internetową zapisano w pliku o nazwie konfigurator.html
R.2.3 Zastosowano właściwy standard kodowania polskich znaków dla witryny
R.2.4 Nadano tytuł strony: "Style w JavaScript”
R.3.5 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl6.css , formatowanie pochodzi jedynie z tego arkusza Uwaga: kryterium to nie jest spełnione również, gdy źle przypisano co najmniej jeden selektor do bloku (np. kropka zamiast #)
ok. 3 min
Polecenie z arkusza
Składa się ze strony o nazwie konfigurator.html. Zastosowany właściwy standard kodowania polskich znaków. Tytuł strony widoczny na karcie przeglądarki: „Style w JavaScript”. Arkusz stylów w pliku o nazwie styl6.css prawidłowo połączony z kodem strony
Plik konfigurator.html obok gibraltar.jpg, a w <head> od razu wszystko, co dotyczy całego dokumentu:
<meta charset="UTF-8"> - polskie litery (R.2.3),
viewport - telefon pokaże stronę w swojej szerokości (klucz tego nie ocenia),
<title>Style w JavaScript</title> (R.2.4),
<link> do styl6.css (R.3.5).
konfigurator.htmlHTMLnowy plik
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Style w JavaScript</title> <linkrel="stylesheet"href="styl6.css"></head><body></body></html>
Podgląd strony po tym kroku (konfigurator.html)
Krok 10: Bloki: część główna z dwiema sekcjami i stopka
Kryteria:
R.2.5 Wygląd strony zdefiniowano dzieląc ją na bloki: lewy, prawy i stopka. Zastosowano znaczniki sekcji
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: obok siebie lewy i prawy, poniżej stopka. 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 2a. Zawartość stopki: napis o treści „Autor: ”, dalej wstawiony numer PESEL zdającego lub w przypadku jego braku inny numer, którym został podpisany arkusz
Blok lewy i prawy to dwa znaczniki <section> w <main> - głównej treści strony. <main> jest kontenerem rzędu: w CSS dostanie display: flex. Stopka <footer> stoi poza nim, z napisem „Autor: ” i - zamiast numeru PESEL - imieniem i nazwiskiem autora, Bartosz Bryniarski (R.2.5).
Krok 11: Nagłówek i przyciski koloru tła z atrybutem data-color
ok. 3 min
Polecenie z arkusza
Zawartość bloku lewego: Nagłówek pierwszego stopnia o treści „Konfigurator stylu”. Paragraf (akapit) z tekstem „Podaj kolor tła” i w nowej linii trzy przyciski z podpisami: „Indigo”, „SteelBlue”, „Olive”
<h1> z nazwą konfiguratora,
akapit z pytaniem, a pod nim przyciski we wspólnym bloku <div class="buttons"> - „w nowej linii” bez <br>,
każdy przycisk ma type="button" (nie wysyła żadnego formularza) i atrybut data-color z nazwą koloru. Atrybuty data-* to miejsce na własne dane elementu: CSS pokoloruje po nim przycisk, a skrypt odczyta z niego kolor tła. Kolor jest zapisany raz, w HTML-u.
Krok 12: Lista koloru czcionki i pole rozmiaru z etykietami
Kryteria: ,
R.2.7 W bloku lewym umieszczono kontrolki: trzy przyciski i listę rozwijaną z czterema elementami
R.3.2 Pole edycyjne ma domyślną wartość 100% (za pomocą atrybutu value)
ok. 3 min
Polecenie z arkusza
Paragraf z tekstem „Podaj kolor czcionki” i w nowej linii lista rozwijalna z wartościami: White, Tan, Bisque, Plum. Paragraf z tekstem „Podaj rozmiar czcionki w procentach, np. 200%” i w nowej linii pole edycyjne z wartością domyślną 100%
Tekst akapitu jest zarazem etykietą kontrolki: <label for="color"> w akapicie łączy go z listą o id="color". Kliknięcie w napis otwiera listę, a czytnik ekranu przeczyta pytanie razem z kontrolką.
<select> z czterema <option> - tekst opcji jest jej wartością i nazwą koloru CSS (R.2.7 razem z przyciskami),
pole tekstowe z value="100%" (R.3.2). inputmode="numeric" pokaże na telefonie klawiaturę z cyframi, a size="6" - wąskie pole na kilka znaków.
R.2.8 W bloku lewym umieszczono kontrolki: pole edycyjne, checkbox i trzy przyciski radio
R.3.3 Pole checkbox jest domyślnie zaznaczone
R.3.4 Jednocześnie może być zaznaczone tylko jedno pole typu radio
ok. 3 min
Polecenie z arkusza
Paragraf z tekstem „Czy rysunek ma mieć ramkę?” i w nowej linii pole checkbox domyślnie zaznaczone i podpisane „Rysuj ramkę”. Paragraf z tekstem „Jaki jest typ punktora listy?” i w nowej linii trzy zgrupowane pola radio, z których pierwszy jest zaznaczony. Podpisy pól: dysk, kwadrat, okrąg
checkbox z checked (R.3.3) jest w środku<label> z podpisem „Rysuj ramkę” - kliknięcie w podpis też przełącza pole,
pola radio mają wspólne name="bullet", więc zaznaczone może być tylko jedno (R.3.4). Każde ma value z nazwą punktora CSS (disc, square, circle) - skrypt nie musi tłumaczyć „kwadrat” na square,
blok pól ma role="radiogroup" i aria-labelledby wskazujące akapit z pytaniem - czytnik ekranu ogłosi grupę razem z pytaniem.
Kontrolki w bloku lewym: pole edycyjne, checkbox i trzy pola radio (R.2.8).
konfigurator.htmlHTMLzmienione: 10 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Style w JavaScript</title> <linkrel="stylesheet"href="styl6.css"></head><body> <main> <sectionid="left"> <h1>Konfigurator stylu</h1> <p>Podaj kolor tła</p> <divclass="buttons"> <buttontype="button"data-color="Indigo">Indigo</button> <buttontype="button"data-color="SteelBlue">SteelBlue</button> <buttontype="button"data-color="Olive">Olive</button> </div> <p><labelfor="color">Podaj kolor czcionki</label></p> <selectid="color"> <option>White</option> <option>Tan</option> <option>Bisque</option> <option>Plum</option> </select> <p><labelfor="size">Podaj rozmiar czcionki w procentach, np. 200%</label></p> <inputtype="text"id="size"value="100%"inputmode="numeric"size="6"> <p>Czy rysunek ma mieć ramkę?</p> <label><inputtype="checkbox"id="frame"checked> Rysuj ramkę</label> <pid="bullet-question">Jaki jest typ punktora listy?</p> <divclass="radios"role="radiogroup"aria-labelledby="bullet-question"> <label><inputtype="radio"name="bullet"value="disc"checked> dysk</label> <label><inputtype="radio"name="bullet"value="square"> kwadrat</label> <label><inputtype="radio"name="bullet"value="circle"> okrąg</label> </div> </section> <sectionid="right"> </section> </main> <footer> Autor: Bartosz Bryniarski </footer></body></html>
Podgląd strony po tym kroku (konfigurator.html)
Krok 14: Blok prawy: obraz z listą we wspólnym bloku i akapit
Kryteria: , ,
R.2.6 W bloku lewym zapisano nagłówek h1: "Konfigurator stylu" oraz przynajmniej jeden paragraf, w bloku prawym zapisano paragraf z treścią "Lorem ipsum… "
R.2.9 W bloku prawym umieszczono obraz gibraltar.jpg z tekstem alternatywnym „półwysep Gibraltar”
R.2.10 W bloku prawym umieszczono listę punktowaną o trzech elementach, zastosowano znaczniki <ul> i <li> wraz z ich zamknięciami
ok. 3 min
Polecenie z arkusza
Zawartość bloku prawego: obraz gibraltar.jpg z tekstem alternatywnym „półwysep Gibraltar”. lista punktowana (nieuporządkowana) o trzech elementach: element 1, element 2, element 3. paragraf o treści „Lorem ipsum...”. Tekst znajduje się w pliku Lorem Ipsum.txt rozpakowanym z archiwum
Obraz i lista mają stać obok siebie, akapit pod nimi - więc obraz i lista trafiają do wspólnego bloku <div class="media">, a akapit stoi za nim. CSS ustawi flex tylko na tym bloku.
<img> z alt="półwysep Gibraltar" (R.2.9), klasą framed (ramka - włącza ją CSS, wyłącza skrypt) oraz width i height - przeglądarka rezerwuje miejsce, zanim plik się wczyta, więc tekst nie „skacze”,
<ul> z trzema <li> (R.2.10),
akapit z całą treścią pliku Lorem Ipsum.txt (R.2.6 razem z akapitami bloku lewego).
konfigurator.htmlHTMLzmienione: 9 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Style w JavaScript</title> <linkrel="stylesheet"href="styl6.css"></head><body> <main> <sectionid="left"> <h1>Konfigurator stylu</h1> <p>Podaj kolor tła</p> <divclass="buttons"> <buttontype="button"data-color="Indigo">Indigo</button> <buttontype="button"data-color="SteelBlue">SteelBlue</button> <buttontype="button"data-color="Olive">Olive</button> </div> <p><labelfor="color">Podaj kolor czcionki</label></p> <selectid="color"> <option>White</option> <option>Tan</option> <option>Bisque</option> <option>Plum</option> </select> <p><labelfor="size">Podaj rozmiar czcionki w procentach, np. 200%</label></p> <inputtype="text"id="size"value="100%"inputmode="numeric"size="6"> <p>Czy rysunek ma mieć ramkę?</p> <label><inputtype="checkbox"id="frame"checked> Rysuj ramkę</label> <pid="bullet-question">Jaki jest typ punktora listy?</p> <divclass="radios"role="radiogroup"aria-labelledby="bullet-question"> <label><inputtype="radio"name="bullet"value="disc"checked> dysk</label> <label><inputtype="radio"name="bullet"value="square"> kwadrat</label> <label><inputtype="radio"name="bullet"value="circle"> okrąg</label> </div> </section> <sectionid="right"> <divclass="media"> <imgsrc="gibraltar.jpg"alt="półwysep Gibraltar"class="framed"width="300"height="300"> <ulid="list"> <li>element 1</li> <li>element 2</li> <li>element 3</li> </ul> </div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </section> </main> <footer> Autor: Bartosz Bryniarski </footer></body></html>
Podgląd strony po tym kroku (konfigurator.html)
Etap 3: Styl CSS
Kroki 15-18 · po tym etapie masz 31 z 37 kryteriów (pkt)
Krok 15: Plik styl6.css: zmienne kolorów i krój Georgia
Kryteria:
R.4.1 Ustawiono domyślny krój czcionki dla całej strony na Georgia (dla selektora * lub body lub html lub kontenera całej strony)
ok. 2 min
Polecenie z arkusza
Cechy formatowania CSS: Są zawarte wyłącznie w zewnętrznym arkuszu stylów. Domyślne dla całej strony: krój czcionki Georgia
Kolory bloków dostają nazwy w :root (--panel, --footer, --text), a reguły odwołują się do nich przez var(). * z krojem Georgia obejmuje też przyciski i pola (R.4.1). body bez marginesu - bloki dochodzą do krawędzi okna.
Krok 16: Bloki obok siebie na flex: tła, wysokości, szerokości, przewijanie
Kryteria: , , , , ,
R.3.1 Układ bloków lewego, prawego i stopki po uruchomieniu strony w przeglądarce jest zgodny z Obrazem 2a 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.2 Ustawiono kolor tła Maroon dla bloku lewego i prawego oraz DimGray dla stopki
R.4.3 Ustawiono biały kolor czcionki dla bloków lewego, prawego i stopki (lub wszystkich bloków)
R.4.4 Ustawiono wysokość 600px dla bloku lewego i prawego
R.4.5 Ustawiono szerokość bloku lewego 30% oraz prawego 70%
R.4.6 Ustawiono paski przewijania dla bloku prawego, tak że pojawiają się tylko w przypadku, gdy zawartość bloku nie mieści się, np. overflow: auto;
ok. 4 min
Polecenie z arkusza
Dla bloku lewego: kolor tła Maroon, biały kolor czcionki, wysokość 600 px, szerokość 30%. Dla bloku prawego: kolor tła Maroon, biały kolor czcionki, wysokość 600 px, szerokość 70%, paski przewijania pojawiające się tylko w przypadku, gdy zawartość bloku nie mieści się. Dla bloku stopki: kolor tła DimGray, biały kolor czcionki
main { display: flex } - obie sekcje stają w jednym rzędzie, stopka jest poza <main>, więc stoi pod nimi (R.3.1),
wspólne cechy bloków w jednej regule, szerokości osobno: 30% i 70% (R.4.4, R.4.5),
overflow: auto w bloku prawym - pasek przewijania tylko wtedy, gdy treść się nie mieści (R.4.6),
stopka: tło DimGray, biały tekst.
Tła (R.4.2) i biały tekst (R.4.3) wszystkich trzech bloków są ustawione. Szerokości są na samych blokach, bo tak opisuje je klucz.
Typowe błędy
Bez overflow blok w kontenerze flex nie urośnie (ma stałą wysokość 600 px), ale tekst przy 200% wyjdzie poza blok i nałoży się na stopkę.
Krok 17: Obraz i lista obok siebie, odstępy, ramka obrazu
Kryteria: , ,
R.4.7 Ustawiono marginesy wewnętrzne (padding) 10px dla selektora p i img
R.4.8 Ustawiono styl dla obrazu i listy, tak aby były wyświetlane obok siebie, paragraf pod nimi
R.4.9 Ustawiono obramowanie obrazu linią ciągłą o grubości 1 px i białym kolorze (selektor img lub identyfikator lub klasa)
ok. 3 min
Polecenie z arkusza
Dla elementów bloku prawego: obraz i lista są wyświetlane obok siebie, paragraf pod nimi. Dla paragrafu: marginesy wewnętrzne 10 px. Dla obrazu: marginesy wewnętrzne 10 px, obramowanie linią ciągłą o grubości 1 px i białym kolorze
.media { display: flex } - obraz i lista w jednym rzędzie, akapit stoi za blokiem, więc pod nimi (R.4.8). align-items: flex-start nie rozciąga listy na wysokość obrazu,
padding: 10px dla p i img (R.4.7),
ramka w regule img.framed - obraz z klasą framed ma białą ramkę 1 px (R.4.9). Skrypt będzie tylko dodawał i zdejmował tę klasę, a wygląd ramki zostaje w CSS.
Dla przycisków zmieniających tło: kolor tła przycisku odpowiada jego podpisowi (np. kolor Indigo dla przycisku podpisanego Indigo)
Selektor atrybutubutton[data-color="Indigo"] trafia w przycisk z tą wartością atrybutu - niezależnie od jego pozycji w kodzie. Kolejność z klucza: Indigo, SteelBlue, Olive (R.4.10). Na końcu dwie reguły tylko dla wyglądu bloku lewego: etykiety pól radio z display: block (każde pole w osobnej linii, jak na obrazie 2a), a akapity z pytaniami bez dolnego marginesu i kontrolki wcięte o 10 px - kontrolka stoi tuż pod swoim pytaniem, na równi z jego tekstem.
Kroki 19-23 · po tym etapie masz 37 z 37 kryteriów (pkt)
Krok 19: Plik skrypt.js i zmiana tła przyciskami
Kryteria: ,
R.5.1 Dla przynajmniej jednego zdarzenia kontrolki przypisano do niego funkcję JavaScript (może być pusta)
R.5.2 Po kliknięciu na przynajmniej jeden przycisk zmieniający tło, zostaje zmienione tło bloku prawego na kolor odpowiadający podpisowi przycisku
ok. 4 min
Polecenie z arkusza
Skrypt: Napisany w języku JavaScript i wykonujący akcje spowodowane zdarzeniami kontrolek. Akcje modyfikują styl CSS bloku prawego i jego elementów, na podstawie przykładu przedstawionego na Obrazie 2b. Po kliknięciu na dowolny przycisk zmieniający tło, zostaje zmienione tło bloku prawego na kolor odpowiadający podpisowi przycisku
Skrypt stoi w osobnym pliku skrypt.js, podpiętym w <head> z atrybutem defer: przeglądarka pobiera go równolegle ze stroną, a uruchamia dopiero wtedy, gdy cały HTML jest wczytany - elementy strony już istnieją.
trzy stałe const na elementy, które skrypt zmienia: blok prawy, obraz w nim (querySelector('img') - pierwszy obraz w bloku) i lista,
querySelectorAll('button[data-color]') - wszystkie przyciski z atrybutem koloru, forEach przechodzi po nich,
addEventListener('click', …) przypisuje każdemu przyciskowi funkcję obsługi kliknięcia (R.5.1). Funkcja odczytuje kolor z button.dataset.color (atrybut data-color) i wpisuje go do style.backgroundColor bloku prawego (R.5.2).
HTML nie ma ani jednego atrybutu onclick - cała obsługa zdarzeń jest w jednym miejscu. Kliknij w podglądzie „Olive”.
konfigurator.htmlHTMLzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Style w JavaScript</title> <linkrel="stylesheet"href="styl6.css"> <scriptsrc="skrypt.js"defer></script></head><body> <main> <sectionid="left"> <h1>Konfigurator stylu</h1> <p>Podaj kolor tła</p> <divclass="buttons"> <buttontype="button"data-color="Indigo">Indigo</button> <buttontype="button"data-color="SteelBlue">SteelBlue</button> <buttontype="button"data-color="Olive">Olive</button> </div> <p><labelfor="color">Podaj kolor czcionki</label></p> <selectid="color"> <option>White</option> <option>Tan</option> <option>Bisque</option> <option>Plum</option> </select> <p><labelfor="size">Podaj rozmiar czcionki w procentach, np. 200%</label></p> <inputtype="text"id="size"value="100%"inputmode="numeric"size="6"> <p>Czy rysunek ma mieć ramkę?</p> <label><inputtype="checkbox"id="frame"checked> Rysuj ramkę</label> <pid="bullet-question">Jaki jest typ punktora listy?</p> <divclass="radios"role="radiogroup"aria-labelledby="bullet-question"> <label><inputtype="radio"name="bullet"value="disc"checked> dysk</label> <label><inputtype="radio"name="bullet"value="square"> kwadrat</label> <label><inputtype="radio"name="bullet"value="circle"> okrąg</label> </div> </section> <sectionid="right"> <divclass="media"> <imgsrc="gibraltar.jpg"alt="półwysep Gibraltar"class="framed"width="300"height="300"> <ulid="list"> <li>element 1</li> <li>element 2</li> <li>element 3</li> </ul> </div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </section> </main> <footer> Autor: Bartosz Bryniarski </footer></body></html>
skrypt.jsJavaScriptnowy plik
const right = document.getElementById('right');const image = right.querySelector('img');const list = document.getElementById('list');document.querySelectorAll('button[data-color]').forEach((button) => { button.addEventListener('click', () => { right.style.backgroundColor = button.dataset.color; });});
Podgląd strony po tym kroku (konfigurator.html)
Krok 20: Kolor czcionki po wyborze z listy
Kryteria:
R.5.3 Po wybraniu koloru z listy, zostaje zmieniony w bloku prawym kolor czcionki na wybrany
ok. 2 min
Polecenie z arkusza
Po kliknięciu pola wyboru koloru czcionki, zostaje zmieniony kolor czcionki bloku prawego na kolor odpowiadający wyborowi
Zdarzenie change listy zachodzi po wybraniu innej opcji. Funkcja dostaje obiekt zdarzenia, a event.target to sama lista - jej value (np. Plum) trafia do style.color bloku prawego (R.5.3). Arkusz pisze „po kliknięciu”, ale click zachodzi już przy rozwijaniu listy - change reaguje dokładnie na wybór.
konfigurator.htmlHTMLzmienione: 0 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Style w JavaScript</title> <linkrel="stylesheet"href="styl6.css"> <scriptsrc="skrypt.js"defer></script></head><body> <main> <sectionid="left"> <h1>Konfigurator stylu</h1> <p>Podaj kolor tła</p> <divclass="buttons"> <buttontype="button"data-color="Indigo">Indigo</button> <buttontype="button"data-color="SteelBlue">SteelBlue</button> <buttontype="button"data-color="Olive">Olive</button> </div> <p><labelfor="color">Podaj kolor czcionki</label></p> <selectid="color"> <option>White</option> <option>Tan</option> <option>Bisque</option> <option>Plum</option> </select> <p><labelfor="size">Podaj rozmiar czcionki w procentach, np. 200%</label></p> <inputtype="text"id="size"value="100%"inputmode="numeric"size="6"> <p>Czy rysunek ma mieć ramkę?</p> <label><inputtype="checkbox"id="frame"checked> Rysuj ramkę</label> <pid="bullet-question">Jaki jest typ punktora listy?</p> <divclass="radios"role="radiogroup"aria-labelledby="bullet-question"> <label><inputtype="radio"name="bullet"value="disc"checked> dysk</label> <label><inputtype="radio"name="bullet"value="square"> kwadrat</label> <label><inputtype="radio"name="bullet"value="circle"> okrąg</label> </div> </section> <sectionid="right"> <divclass="media"> <imgsrc="gibraltar.jpg"alt="półwysep Gibraltar"class="framed"width="300"height="300"> <ulid="list"> <li>element 1</li> <li>element 2</li> <li>element 3</li> </ul> </div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </section> </main> <footer> Autor: Bartosz Bryniarski </footer></body></html>
Krok 21: Rozmiar czcionki po wyjściu z pola, ze sprawdzeniem wartości
Kryteria:
R.5.4 Po wpisaniu rozmiaru czcionki i opuszczeniu kontrolki (np. onfocusout lub onblur), zmieniany jest rozmiar czcionki dla całego bloku prawego. Należy wpisać wartość, np. 200%, 50%
ok. 4 min
Polecenie z arkusza
Po wpisaniu rozmiaru czcionki i wyjściu z kontrolki (tabulacją lub kliknięciem myszą w obszar poza kontrolką), zmieniany jest rozmiar czcionki dla całego bloku prawego. Nie jest wymagana walidacja tego pola, należy założyć, że pole jest wypełnione poprawnie
Wyjście z pola to zdarzenie blur (R.5.4). Arkusz zwalnia z walidacji, ale w wersji nowoczesnej wartość jest sprawdzana od razu - kosztuje to kilka linii:
trim() obcina spacje z brzegów,
wyrażenie regularne /^\d{1,3}%$/ przepuszcza tylko od jednej do trzech cyfr i znak procentu, a parseInt z warunkiem - wartości od 50 do 300%,
poprawna wartość trafia do style.fontSize bloku prawego i do zmiennej lastSize; niepoprawna nie zmienia strony, a pole wraca do ostatniej poprawnej wartości.
Sprawdzone w Chrome: 200% daje czcionkę 32 px i pasek przewijania jak na obrazie 2b, a 5000% i abc nie zmieniają strony i przywracają w polu 200%.
konfigurator.htmlHTMLzmienione: 0 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Style w JavaScript</title> <linkrel="stylesheet"href="styl6.css"> <scriptsrc="skrypt.js"defer></script></head><body> <main> <sectionid="left"> <h1>Konfigurator stylu</h1> <p>Podaj kolor tła</p> <divclass="buttons"> <buttontype="button"data-color="Indigo">Indigo</button> <buttontype="button"data-color="SteelBlue">SteelBlue</button> <buttontype="button"data-color="Olive">Olive</button> </div> <p><labelfor="color">Podaj kolor czcionki</label></p> <selectid="color"> <option>White</option> <option>Tan</option> <option>Bisque</option> <option>Plum</option> </select> <p><labelfor="size">Podaj rozmiar czcionki w procentach, np. 200%</label></p> <inputtype="text"id="size"value="100%"inputmode="numeric"size="6"> <p>Czy rysunek ma mieć ramkę?</p> <label><inputtype="checkbox"id="frame"checked> Rysuj ramkę</label> <pid="bullet-question">Jaki jest typ punktora listy?</p> <divclass="radios"role="radiogroup"aria-labelledby="bullet-question"> <label><inputtype="radio"name="bullet"value="disc"checked> dysk</label> <label><inputtype="radio"name="bullet"value="square"> kwadrat</label> <label><inputtype="radio"name="bullet"value="circle"> okrąg</label> </div> </section> <sectionid="right"> <divclass="media"> <imgsrc="gibraltar.jpg"alt="półwysep Gibraltar"class="framed"width="300"height="300"> <ulid="list"> <li>element 1</li> <li>element 2</li> <li>element 3</li> </ul> </div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </section> </main> <footer> Autor: Bartosz Bryniarski </footer></body></html>
R.5.5 Jeżeli zaznaczono pole checkbox, w bloku prawym jest dodawane obramowanie obrazu, w przeciwnym wypadku usuwane obramowanie
ok. 3 min
Polecenie z arkusza
Po kliknięciu w pole checkbox, w zależności od stanu pola, jest dodawane lub usuwane obramowanie obrazu – wymagana realizacja zdarzenia za pomocą funkcji
Arkusz wymaga funkcji, więc obsługa ma nazwę: updateFrame, przekazaną do addEventListener('change', updateFrame) - bez nawiasów, bo przekazuje się samą funkcję, a nie wynik jej wywołania.
classList.toggle('framed', warunek) dodaje klasę, gdy warunek jest prawdziwy, i zdejmuje, gdy fałszywy. Warunkiem jest stan checkboxa, więc obraz ma ramkę dokładnie wtedy, gdy pole jest zaznaczone (R.5.5). Wygląd ramki zostaje w CSS (img.framed) - skrypt nie zna jej grubości ani koloru.
konfigurator.htmlHTMLzmienione: 0 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Style w JavaScript</title> <linkrel="stylesheet"href="styl6.css"> <scriptsrc="skrypt.js"defer></script></head><body> <main> <sectionid="left"> <h1>Konfigurator stylu</h1> <p>Podaj kolor tła</p> <divclass="buttons"> <buttontype="button"data-color="Indigo">Indigo</button> <buttontype="button"data-color="SteelBlue">SteelBlue</button> <buttontype="button"data-color="Olive">Olive</button> </div> <p><labelfor="color">Podaj kolor czcionki</label></p> <selectid="color"> <option>White</option> <option>Tan</option> <option>Bisque</option> <option>Plum</option> </select> <p><labelfor="size">Podaj rozmiar czcionki w procentach, np. 200%</label></p> <inputtype="text"id="size"value="100%"inputmode="numeric"size="6"> <p>Czy rysunek ma mieć ramkę?</p> <label><inputtype="checkbox"id="frame"checked> Rysuj ramkę</label> <pid="bullet-question">Jaki jest typ punktora listy?</p> <divclass="radios"role="radiogroup"aria-labelledby="bullet-question"> <label><inputtype="radio"name="bullet"value="disc"checked> dysk</label> <label><inputtype="radio"name="bullet"value="square"> kwadrat</label> <label><inputtype="radio"name="bullet"value="circle"> okrąg</label> </div> </section> <sectionid="right"> <divclass="media"> <imgsrc="gibraltar.jpg"alt="półwysep Gibraltar"class="framed"width="300"height="300"> <ulid="list"> <li>element 1</li> <li>element 2</li> <li>element 3</li> </ul> </div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </section> </main> <footer> Autor: Bartosz Bryniarski </footer></body></html>
R.5.6 Po kliknięciu w pola radio jest ustawiony wybrany rodzaj formatowania punktorów listy w bloku prawym
ok. 2 min
Polecenie z arkusza
Po kliknięciu w pola radio jest ustawiony wybrany rodzaj formatowania punktorów listy
Każde pole radio dostaje obsługę zdarzenia change - zachodzi, gdy pole zostaje zaznaczone. Wartość pola (value="square") jest gotową nazwą punktora, więc trafia wprost do style.listStyleType listy (R.5.6). Jedna pętla obsługuje trzy pola i obsłużyłaby czwarte bez zmian w skrypcie.
Sprawdzone w Chrome cały scenariusz z obrazu 2b: Olive, Tan, 200%, odznaczona ramka i kwadrat.
konfigurator.htmlHTMLzmienione: 0 linii
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Style w JavaScript</title> <linkrel="stylesheet"href="styl6.css"> <scriptsrc="skrypt.js"defer></script></head><body> <main> <sectionid="left"> <h1>Konfigurator stylu</h1> <p>Podaj kolor tła</p> <divclass="buttons"> <buttontype="button"data-color="Indigo">Indigo</button> <buttontype="button"data-color="SteelBlue">SteelBlue</button> <buttontype="button"data-color="Olive">Olive</button> </div> <p><labelfor="color">Podaj kolor czcionki</label></p> <selectid="color"> <option>White</option> <option>Tan</option> <option>Bisque</option> <option>Plum</option> </select> <p><labelfor="size">Podaj rozmiar czcionki w procentach, np. 200%</label></p> <inputtype="text"id="size"value="100%"inputmode="numeric"size="6"> <p>Czy rysunek ma mieć ramkę?</p> <label><inputtype="checkbox"id="frame"checked> Rysuj ramkę</label> <pid="bullet-question">Jaki jest typ punktora listy?</p> <divclass="radios"role="radiogroup"aria-labelledby="bullet-question"> <label><inputtype="radio"name="bullet"value="disc"checked> dysk</label> <label><inputtype="radio"name="bullet"value="square"> kwadrat</label> <label><inputtype="radio"name="bullet"value="circle"> okrąg</label> </div> </section> <sectionid="right"> <divclass="media"> <imgsrc="gibraltar.jpg"alt="półwysep Gibraltar"class="framed"width="300"height="300"> <ulid="list"> <li>element 1</li> <li>element 2</li> <li>element 3</li> </ul> </div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </section> </main> <footer> Autor: Bartosz Bryniarski </footer></body></html>
Krok 24 · po tym etapie masz 37 z 37 kryteriów (pkt)
Krok 24: Co jest inaczej i którą wersję wybrać na egzaminie
ok. 3 min
Obie wersje dają komplet 37 punktów. Różnice:
wersja podstawowa
wersja nowoczesna
układ bloków
float: left sekcji, clear stopki
<main> z display: flex
obraz obok listy
float obrazu i listy, clear akapitu
wspólny blok .media na flex
kolor przycisków
:nth-child(2) - :nth-child(4)
button[data-color="…"]
opisy kontrolek
tekst w akapicie, <br>
<label for>, etykiety obejmujące pola
wartości pól radio
brak, typ w wywołaniu funkcji
value="square" w HTML-u
gdzie jest skrypt
<script> na końcu strony
skrypt.js z defer
zdarzenia
onclick, onchange, onblur w HTML-u
addEventListener w skrypcie
ramka
style.border w skrypcie
klasa framed przełączana classList.toggle
rozmiar czcionki
wartość z pola bez sprawdzenia
biała lista 50-300%
Klucz oceniał skutek, nie sposób: przypisanie funkcji do zdarzenia (R.5.1) spełnia zarówno onclick="…", jak i addEventListener.
Na egzaminie wersja podstawowa trzyma się pól i zdarzeń z tabeli 1 arkusza i łatwiej ją napisać z pamięci. Nowoczesna oddziela treść, wygląd i zachowanie: kolor przycisku zmienia się w jednym atrybucie, nowy punktor to jedno pole radio, a błędnie wpisany rozmiar nie psuje strony.
Krok 25 · po tym etapie masz 37 z 37 kryteriów (pkt)
Krok 25: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
Po zakończeniu pracy utwórz, w folderze z numerem PESEL lub w przypadku jego braku w folderze z innym 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 której sprawdzany był skrypt. W folderze z numerem zdającego: egzamin.jpg, gibraltar.jpg, konfigurator.html, kw1.png - kw4.png, kwerendy.txt, przeglądarka.txt, skrypt.js (arkusz dopuszcza „inne przygotowane pliki”) i styl6.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.