Dwa oceniane rezultaty krok po kroku: plik .php z rysunku układu (HTML5, język, kodowanie, znaczniki sekcji, obrazy z alt, tabela, formularz POST) i zewnętrzny arkusz styl_1.css z kolorami, wymiarami, marginesami, box-shadow, border-collapse i float. Lekcja 13.3 kursu INF.03.
Po tej lekcji zbudujesz plik strony z rysunku układu w arkuszu i napiszesz do niego zewnętrzny arkusz stylów, czyli dwa z pięciu ocenianych rezultatów: „zawartość witryny internetowej" (w innych arkuszach „wygląd witryny internetowej") oraz „styl CSS witryny internetowej". Wymagania są w arkuszu wypisane punkt po punkcie i tak samo, punkt po punkcie, są sprawdzane, więc pominięty tekst alternatywny obrazu znika z rezultatu tak samo jak cała brakująca sekcja. Teorii nie ma tu od nowa: HTML jest w dziale 3, CSS w dziale 4, a ta lekcja mówi, w jakiej kolejności to poskładać i które słowa arkusza są dosłownymi wymaganiami. Pliki, folder nazwany numerem PESEL i płytę opisuje anatomia zadania. Grafika, zanim powstanie strona
Arkusz zwykle wtrąca jedno krótkie zadanie z edytora grafiki rastrowej i robi się je przed pisaniem strony, bo gotowy plik jest potem potrzebny w kodzie. Brzmi ono na przykład tak: plik ryba1.jpg należy przeskalować z zachowaniem proporcji tak, aby jego szerokość wynosiła dokładnie 400 px. W GIMP-ie robi to Obraz, potem Skaluj obraz: wpisujesz 400 w polu szerokości i sprawdzasz, czy ikona łańcucha obok pól jest zamknięta, bo wtedy wysokość przeliczy się sama i proporcje zostaną zachowane. Zapis idzie przez Plik, potem Wyeksportuj jako, pod nazwą i w formacie podanym w arkuszu, ponieważ zwykłe Zapisz tworzy plik .xcf, którego przeglądarka nie otworzy.
Zmniejszenie obrazu atrybutem width w znaczniku albo właściwością CSS nie jest wykonaniem tego polecenia. Oceniany jest plik leżący na dysku i jego rzeczywisty rozmiar w pikselach, a nie to, jak duży wygląda na stronie.
Plik strony i głowa dokumentu
Nazwa pliku stoi w arkuszu i jest dosłowna: noclegi.php w zadaniu o biurze turystycznym, wedkuj.php w zadaniu o portalu dla wędkarzy. Rozszerzenie .php plik dostaje od razu, choć pierwsza wersja strony to czysty HTML, bo Apache po samym rozszerzeniu rozstrzyga, czy przepuścić plik przez interpreter PHP. Kod PHP dopisany później do pliku .html nie wykona się, tylko zostanie w źródle strony, a zmiana nazwy pliku na końcu zadania psuje wszystko, co się już do niej odwoływało.
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Portal dla wędkarzy</title>
<link rel="stylesheet" href="styl_1.css">
</head>
<body>
</body>
</html>
Pięć wierszy głowy odpowiada pięciu osobnym wymaganiom arkusza. Deklaracja <!DOCTYPE html> to „napisana w języku HTML 5", bez niej dokument nie jest tym, o co arkusz prosi. Atrybut lang="pl" to „zadeklarowany język dla witryny: polski". Znacznik <meta charset="utf-8"> to „jawnie zastosowany właściwy standard kodowania polskich znaków", a słowo „jawnie" znaczy, że poprawnie wyświetlone litery nie wystarczą: deklaracja ma być w kodzie, a edytor musi zapisywać plik w tym samym kodowaniu, które ta deklaracja podaje. Zawartość <title> to tytuł widoczny na karcie przeglądarki. Znacznik <link> dołącza ZEWNĘTRZNY arkusz o nazwie z arkusza, na przykład styl_1.css, i ten sam wygląd uzyskany znacznikiem <style> w głowie albo atrybutem style przy elemencie nie jest tym samym wymaganiem. Budowę głowy dokładniej opisuje lekcja o szkielecie dokumentu, a trzy sposoby dołączania stylów lekcja o dołączaniu i kaskadzie. Bloki z rysunku układu
Arkusz daje obraz układu: prostokąty z podpisami w rodzaju baner, menu, blok lewy, blok prawy, stopka. Przepisujesz go na znaczniki sekcji jeden do jednego, w tej samej kolejności i z tym samym zagnieżdżeniem. Prostokąt narysowany wewnątrz drugiego to znacznik wewnątrz znacznika, a dwa prostokąty stojące na rysunku obok siebie to dwa znaczniki rodzeństwa: rozstawia je dopiero CSS, w HTML-u stoją jeden pod drugim. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<body>
<header>
<h1>Portal dla wędkarzy</h1>
</header>
<nav>
<a href="zawody.html">Zawody</a>
</nav>
<main>
<section>
<h3>Ostatnie połowy</h3>
<img src="ryba1.jpg" alt="Szczupak złowiony na jeziorze">
</section>
<article>
<h4>Zapisy</h4>
<table>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</table>
</article>
</main>
<footer>Numer zdającego</footer>
</body>
Poziomy nagłówków arkusz podaje wprost i przepisuje się je dosłownie, nawet gdy przeskok z h1 na h3 z pominięciem h2 wygląda dziwnie. Każdy obraz dostaje atrybut alt (tekst alternatywny) z opisem tego, co widać, bo arkusz wymaga obrazów „z tekstem alternatywnym", a pusty cudzysłów opisem nie jest. Tabela ma dokładnie tyle wierszy i kolumn, ile podaje arkusz: „tabela o dwóch wierszach i dwóch kolumnach" to dwa znaczniki <tr>, a w każdym dwa <td>. Komórki zostają puste, jeśli mają je wypełnić skrypty, co robi już lekcja o skryptach PHP i JS. Listy, tabele i odnośniki opisuje osobna lekcja HTML. <button onclick="zmienKolory()">Zmień kolory</button>
<form action="wedkuj.php" method="post">
<input type="number" name="dlugosc">
<input type="submit" value="Wyślij">
<input type="reset" value="Kasuj">
</form>
Przycisk uruchamiający skrypt to <button> albo <input type="button"> z atrybutem onclick wskazującym funkcję. Formularz idzie metodą POST do TEJ SAMEJ strony, więc w atrybucie action stoi nazwa pliku, w którym ten formularz się znajduje. Metoda musi być zapisana wprost, bo domyślna jest GET, a wartości szłyby wtedy w adresie zamiast w treści żądania. Każde pole ma atrybut name, ponieważ to on jest kluczem w tablicy $_POST i pole bez niego nie dojdzie do skryptu; szczegóły w lekcjach o formularzach HTML i formularzach w PHP. Przycisk kasujący to reset, który czyści pola, a nie zwykły button. Na końcu strony stoi stopka z treścią podaną w arkuszu, zwykle danymi kontaktowymi albo numerem zdającego, przepisaną co do znaku. Arkusz styl_1.css
Arkusz stylów to osobny plik tekstowy w tym samym katalogu co strona, o nazwie dokładnie takiej, jaka stoi w znaczniku <link>. Arkusz egzaminacyjny często dodaje warunek: style mają powstać „wyłącznie przy pomocy selektora dla danego znacznika". Selektorem jest wtedy sama nazwa znacznika, czyli body, nav, table, footer, a klasa .menu i identyfikator #menu łamią to zdanie nawet wtedy, gdy dają identyczny wygląd. Wynika z tego podpowiedź do poprzedniej części zadania: skoro dwa bloki mają wyglądać różnie, muszą być zbudowane z różnych znaczników. Rodzaje selektorów porównuje lekcja o selektorach CSS. body {
font-family: Helvetica;
background-color: #EFEFEF;
width: 80%;
margin: auto;
}
header {
height: 150px;
background-color: #00838F;
padding: 10px;
border-radius: 5px;
box-shadow: 5px 5px 10px gray;
}
Kolory arkusz podaje w jednym z dwóch zapisów i przepisuje się ten, który jest w treści: nazwami CSS, jak DeepSkyBlue, Tomato i Maroon, albo szesnastkowo, jak #00838F, #EFEFEF i #4FB3BF. Zbliżony odcień dobrany na oko jest inną wartością. Wysokości idą w pikselach, bo piksel to stała liczba punktów ekranu, a szerokości w procentach, bo procent liczy się od szerokości rodzica i blok zwęża się razem z oknem; jednostki zbiera lekcja o kolorach i jednostkach. Właściwość margin (margines zewnętrzny) odsuwa blok od sąsiadów, padding (margines wewnętrzny) odsuwa treść od krawędzi bloku i mylenie ich dwóch jest w tym rezultacie najczęstsze; rysunek obu jest w lekcji o modelu pudełkowym. Zapis margin: auto to arkuszowe „marginesy wyliczane automatycznie": przeglądarka dzieli wolne miejsce po równo na lewo i prawo, więc blok staje na środku, ale tylko wtedy, gdy ma podaną szerokość mniejszą od rodzica. Właściwość border-radius (promień obramowania) zaokrągla narożniki, a box-shadow (cień pudełka) rysuje cień i jego składnię arkusz podaje w treści zadania: przesunięcie w poziomie, przesunięcie w pionie, rozmycie i kolor. Cienie i tła szerzej opisuje lekcja o tłach i cieniach. table, td {
border: 1px solid Maroon;
border-collapse: collapse;
}
img {
float: left;
margin: 10px;
}
tr:hover {
background-color: DeepSkyBlue;
}
Zapis border-collapse: collapse (scal obramowanie) łączy ramkę tabeli z ramkami komórek w jedną linię i to jest dokładnie to, co arkusz nazywa obramowaniem „połączonym". Bez niego widać podwójne kreski z odstępem. Obramowanie trzeba przy tym nadać i tabeli, i komórkom, bo border na samym table obrysuje wyłącznie zewnętrzną krawędź. Właściwość float (opływanie) wyjmuje obraz z normalnego biegu tekstu i dosuwa do krawędzi bloku, a tekst układa się obok; tak realizuje się arkuszowe „obtekanie" i opisuje to lekcja o display, position i float. Zapis tr:hover to pseudoklasa :hover (najechanie), czyli jedyne w tym arkuszu odstępstwo od stylowania samym znacznikiem; arkusz prosi o nią słowami o zmianie tła wiersza po najechaniu kursorem, a listę pseudoklas zbiera osobna lekcja. Sprawdzenie w przeglądarce
Stronę otwierasz adresem http://localhost/wedkuj.php, a nie podwójnym kliknięciem pliku, bo tylko wtedy przechodzi ona przez serwer i późniejsze skrypty PHP w ogóle się wykonają. Rysunek układu z arkusza kładziesz obok okna i porównujesz blok po bloku: kolejność, szerokości, kolory, zaokrąglenia, cień. Po każdej zmianie w pliku CSS odświeżasz stronę z pominięciem pamięci podręcznej, bo przeglądarka trzyma poprzednią wersję arkusza i potrafi pokazywać stary wygląd mimo poprawionego pliku. Na koniec sprawdzasz polskie znaki w tekście i to, czy obrazy się wyświetlają, bo brakujący plik graficzny i literówka w nazwie pliku CSS wyglądają z zewnątrz podobnie: strona po prostu wygląda inaczej, niż powinna.
Gdzie traci się punkty
›
Plik zapisany jako .html albo pod nazwą inną niż podana w arkuszu.
›
Brak <!DOCTYPE html>, brak lang w znaczniku <html> albo brak <meta charset>.
›
Deklaracja kodowania jest, ale edytor zapisał plik w innym kodowaniu i zamiast polskich liter na stronie stoją znaki zapytania.
›
Style wpisane w <style> w głowie albo w atrybucie style przy elemencie zamiast w pliku zewnętrznym.
›
Literówka w nazwie pliku w znaczniku <link>: arkusz CSS jest napisany dobrze, a strona wygląda tak, jakby go nie było.
›
Bloki zbudowane ze znaczników <div>, gdy arkusz każe je wykonać „za pomocą znaczników sekcji".
›
Inne poziomy nagłówków niż wskazane w arkuszu.
›
Obraz bez atrybutu alt albo z atrybutem pustym.
›
Tabela o innej liczbie wierszy lub kolumn niż zadana.
›
Formularz wysyłany metodą GET, kierowany do innego pliku niż ta sama strona albo z polem bez atrybutu name.
›
Klasy i identyfikatory w CSS tam, gdzie arkusz żąda stylowania wyłącznie selektorem znacznika.
›
Kolor dobrany na oko zamiast wartości podanej w arkuszu.
›
Wysokość podana w procentach, a szerokość w pikselach, czyli odwrotnie niż w wymaganiu.
›
Zapis margin: auto na bloku bez ustawionej szerokości, przez co nic się nie centruje.
›
Obraz zmniejszony właściwością CSS zamiast przeskalowany w edytorze grafiki.
›
Pominięta stopka albo treść stopki inna niż w arkuszu.
Ściąga
Wymaganie z arkusza
Zapis
napisana w języku HTML 5
<!DOCTYPE html>
zadeklarowany język strony
<html lang="pl">
jawne kodowanie polskich znaków
<meta charset="utf-8">
tytuł na karcie przeglądarki
<title>Portal</title>
dołączony zewnętrzny arkusz
<link rel="stylesheet" href="styl_1.css">
podział za pomocą znaczników sekcji
header, nav, main, section, article, aside, footer
obraz z tekstem alternatywnym
<img src="ryba1.jpg" alt="opis">
tabela dwa na dwa
dwa <tr>, w każdym dwa <td>
przycisk uruchamiający skrypt
<button onclick="funkcja()">
formularz POST do tej samej strony
<form action="wedkuj.php" method="post">
przycisk wysyłający i kasujący
<input type="submit">, <input type="reset">
styl tylko selektorem znacznika
nav { }, nigdy .menu { }
kolor nazwą CSS lub szesnastkowo
Tomato, #00838F
wysokość w px, szerokość w %
height: 150px; width: 80%;
margines zewnętrzny i wewnętrzny
margin: 10px; padding: 10px;
marginesy wyliczane automatycznie
margin: auto; przy podanej szerokości
zaokrąglenie narożników
border-radius: 5px;
cień bloku
box-shadow: 5px 5px 10px gray;
obramowanie tabeli połączone
border-collapse: collapse; na table
obtekanie obrazu tekstem
float: left;
zmiana tła wiersza po najechaniu
tr:hover { background-color: DeepSkyBlue; }
skalowanie obrazu z proporcjami
edytor grafiki, szerokość 400 px, zamknięty łańcuch
Pobierz ściągę PDF