Stały układ znaczników, od którego zaczyna się każdy plik HTML: deklaracja typu dokumentu, element html z atrybutem lang, sekcja head z kodowaniem i tytułem oraz body z widoczną treścią. Lekcja 3.2 kursu INF.03.
Szkielet dokumentu to stały układ znaczników, od którego zaczyna się każdy plik HTML: deklaracja typu dokumentu, element html, a w nim head z informacjami dla przeglądarki i body z treścią widoczną w oknie. W części pisemnej wracają z niego dwa pytania: który znacznik należy do sekcji head, a który do body, oraz co oznacza wpis <!DOCTYPE html>. W zadaniu praktycznym ten sam szkielet daje cztery punkty w pierwszej minucie pracy, bo arkusz wymaga strony w HTML5, z kodowaniem polskich znaków, z zadeklarowanym językiem i z tytułem widocznym na karcie przeglądarki.
Znacznik, element, atrybut
Znacznik (tag) to nazwa w nawiasach ostrych, która mówi przeglądarce, czym jest dany fragment dokumentu. Element to znacznik otwierający, treść i znacznik zamykający razem.
<p class="uwaga">Monitor 27 jest chwilowo niedostępny.</p>
Tu <p> to znacznik otwierający akapitu, </p> to znacznik zamykający, poznawalny po ukośniku przed nazwą, a zdanie między nimi to treść elementu. Zapis class="uwaga" to atrybut: class jest nazwą atrybutu, uwaga jego wartością. Atrybuty stoją wyłącznie w znaczniku otwierającym, w postaci nazwa, znak równości, wartość w cudzysłowie, a kolejnych atrybutów tego samego elementu nie oddziela przecinek, tylko spacja.
Część elementów nie ma treści, więc nie ma też znacznika zamykającego. Nazywa się je elementami pustymi: <br> (łamanie wiersza), <hr> (linia pozioma), <img> (obraz), <meta> (informacja o dokumencie), <link> (dołączony plik). W HTML5 pisze się je bez ukośnika na końcu; zapis <br /> pochodzi z XHTML, przeglądarka go przyjmuje, ale walidator HTML5 go nie wymaga.
Notatka dla siebie i dla kolegi z zespołu to komentarz <!-- tu zaczyna się stopka -->. Przeglądarka go nie wyświetla, ale każdy widzi go w kodzie źródłowym strony, więc nie chowa się w nim haseł.
HTML nie rozróżnia wielkości liter w nazwach znaczników, czyli <P> działa tak samo jak <p>, ale w HTML5 pisze się je małymi literami i tylko taki zapis jest w arkuszach. Wartości atrybutów to inna sprawa: id="menu" i id="Menu" to dwa różne identyfikatory.
Elementy wolno zagnieżdżać, ale nie wolno ich krzyżować. Poprawny zapis to <p>To jest <strong>ważne</strong> zdanie.</p>, bo element otwarty jako ostatni zamyka się jako pierwszy.
Pułapka: zapis <p><strong>tekst</p></strong> walidator zgłasza jako błąd, choć przeglądarka zwykle go naprawia i strona wygląda dobrze. Punkty na egzaminie idą za kod, nie za wygląd.
Deklaracja typu dokumentu i znacznik html
<!DOCTYPE html> to deklaracja typu dokumentu: pierwszy wiersz pliku, który mówi przeglądarce, że dalej idzie HTML w wersji 5. Nie jest znacznikiem, nie ma znacznika zamykającego i nie wyświetla niczego. Stoi przed wszystkim innym, także przed komentarzami.
Sens tej deklaracji jest praktyczny: z nią przeglądarka włącza tryb standardów i liczy wymiary elementów zgodnie z obowiązującą specyfikacją, bez niej przechodzi w tryb zgodności ze starymi stronami (quirks mode), w którym te same style dają inny układ. Deklaracje starszych standardów były długie, bo wskazywały plik z definicją dokumentu, i w takiej postaci trafiają do pytań:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Pierwsza to HTML 4.01, druga XHTML 1.0. Krótki wpis bez słowa PUBLIC to zawsze HTML5.
Zaraz pod deklaracją stoi <html lang="pl">, element korzeniowy, czyli taki, który obejmuje cały dokument i zamyka się dopiero w ostatnim wierszu pliku. Atrybut lang deklaruje język treści. Korzysta z niego czytnik ekranu, żeby czytać stronę polską wymową, wyszukiwarka, żeby pokazać ją polskim użytkownikom, i przeglądarka, żeby zaproponować tłumaczenie albo sprawdzić pisownię w formularzu. Arkusz CKE wymienia go wprost jako osobne wymaganie.
Sekcja head: co przeglądarka wie, a czego nie widać
<head> (nagłówek dokumentu) to część dokumentu z informacjami o stronie, których przeglądarka nie rysuje w oknie. Jedyny ślad, jaki po nich zostaje na ekranie, to tekst tytułu na karcie.
›
<meta charset="UTF-8"> deklaruje kodowanie znaków i ma być PIERWSZYM dzieckiem head, bo przeglądarka musi wiedzieć, jak czytać bajty, zanim dojdzie do pierwszej polskiej litery. Przy złym kodowaniu zamiast „ą" i „ś" pojawiają się krzaki.
›
<title>Sklep komputerowy</title> to tytuł dokumentu: widać go na karcie przeglądarki, w zakładkach i jako nagłówek wyniku w Google. Jest jedynym obowiązkowym elementem sekcji head, więc jego brak walidator zgłasza jako błąd, a nie ostrzeżenie.
›
<meta name="viewport" content="width=device-width, initial-scale=1"> ustawia szerokość widoku na szerokość ekranu urządzenia. Bez tego wpisu telefon pokazuje stronę pomniejszoną, tak jakby ekran miał około 980 pikseli.
›
<meta name="description" content="Klawiatury, myszy i monitory"> to streszczenie strony, które wyszukiwarka wyświetla pod odnośnikiem, a <meta name="author" content="Jan Kowalski"> podaje autora. Oba są w sekcji head, oba są elementami pustymi.
›
<link rel="stylesheet" href="styl.css"> dołącza zewnętrzny arkusz stylów: rel mówi, czym jest wskazany plik, href gdzie on leży. Ten sam znacznik z rel="icon" podaje ikonę wyświetlaną na karcie.
›
<style> zawiera wewnętrzny arkusz stylów, czyli reguły CSS wpisane wprost w dokument, i jego miejscem jest właśnie head. <script> z kodem JavaScript zadziała i tu, i w body, ale zwykle stawia się go na końcu body, żeby strona zdążyła się narysować, zanim skrypt zacznie szukać w niej elementów.
Do sekcji head nie należy nic, co ma być widoczne. Nagłówek <h2>, akapit <p> czy obraz <img> wpisany między <head> a </head> to błąd struktury, choć plik się otworzy.
Pułapka: <meta charset="UTF-8"> odpowiada za polskie znaki, lang="pl" za deklarację języka treści. To dwie różne rzeczy i arkusz punktuje je osobno.
Sekcja body i gotowy szkielet
<body> (treść dokumentu) to część widoczna: teksty, nagłówki, obrazy, tabele, odnośniki i formularze. Wszystko, co użytkownik ma zobaczyć, stoi między <body> a </body>. Poniżej cały szkielet strony sklepu, plik index.html. To jest wzór do przepisania z pamięci na egzaminie.
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Sklep komputerowy</title>
<link rel="stylesheet" href="styl.css">
</head>
<body>
<header>Sklep komputerowy</header>
<main>
<h1>Nasze produkty</h1>
<p>Klawiatury, myszy i monitory w dobrej cenie.</p>
</main>
<footer>Kontakt: sklep@example.com</footer>
</body>
</html>
W przeglądarce ten plik daje białą stronę z czterema rzeczami jedna pod drugą: napisem „Sklep komputerowy" zwykłą czcionką, dużym pogrubionym napisem „Nasze produkty", akapitem o klawiaturach i wierszem z adresem na dole. Na karcie widnieje „Sklep komputerowy", choć w treści strony tego tytułu z <title> nie ma. Żadnych ramek, kolorów ani dwóch kolumn na razie nie będzie, bo wygląd przyjdzie dopiero z arkusza styl.css.
Trzy elementy w body to znaczniki sekcji: <header> (nagłówek strony) trzyma baner na górze, <main> (treść główna) właściwą zawartość, a <footer> (stopka) dane na dole. Dzielą stronę na nazwane bloki, dzięki czemu przeglądarka i wyszukiwarka wiedzą, co jest czym. Pełny układ z rysunku w arkuszu, razem z paskiem menu i dwoma blokami obok siebie, omawia lekcja o znacznikach sekcji. Drzewo dokumentu i DOM
Dokument HTML jest drzewem: element zawarty w innym jest jego dzieckiem, element zawierający jest rodzicem, a elementy mające tego samego rodzica są rodzeństwem. W szkielecie ze sklepu korzeniem jest html, jego dwoje dzieci to head i body, a te dwa są względem siebie rodzeństwem. Dziećmi body są header, main i footer. Nagłówek h1 i akapit p też są rodzeństwem, ale ich rodzicem jest main, a nie body.
Drzewo dokumentu: element html z atrybutem lang, pod nim head z kodowaniem, tytułem i arkuszem stylów oraz body z sekcjami header, main i footer
Przeglądarka nie trzyma strony jako tekstu pliku. Po wczytaniu buduje z niej DOM (Document Object Model, obiektowy model dokumentu), czyli dokładnie to drzewo w pamięci komputera. Po nim chodzą potem dwa inne języki. CSS trafia w element przez jego miejsce w drzewie, więc selektor potomka main p opisuje akapit leżący wewnątrz main, a nie każdy akapit na stronie. JavaScript wyjmuje z drzewa pojedynczy element metodą document.getElementById("cena") i podmienia jego treść.
Dlatego poprawne zagnieżdżanie nie jest kosmetyką. Skrzyżowane albo niedomknięte znaczniki dają drzewo inne niż to, które widać w kodzie, a wtedy reguła CSS przestaje trafiać w element i skrypt zwraca coś innego, niż autor zakładał.
Na egzaminie
Pytanie pisemne najczęściej sprawdza podział na head i body. Wersja pierwsza podaje cztery znaczniki i pyta, który ma zastosowanie w sekcji body: trzy odpowiedzi są z head, jedna z body. Wersja druga odwraca polecenie i pyta, którego znacznika nie należy umieszczać w nagłówku dokumentu. Metoda jest krótka: zapamiętaj listę mieszkańców head, czyli meta, title, link, style, script i base, a wszystko poza nią jest z body.
Reszta pytań kręci się wokół czterech spraw.
1.
Deklaracja <!DOCTYPE html> znaczy „dokument w HTML5". Mylące odpowiedzi mówią o wersji 4, o obowiązkowych znacznikach zamykających albo o pisaniu znaczników wielkimi literami.
2.
Zewnętrzny arkusz stylów dołącza <link rel="stylesheet" href="styl.css">. Warianty z <style>, <meta>, <a> albo z atrybutem src zamiast href są błędne.
3.
Wewnętrzny arkusz stylów, czyli znacznik <style>, umieszcza się w części nagłówkowej strony, a nie w ciele i nie przy znaczniku, którego dotyczy.
4.
Wymaganym elementem sekcji head jest title. Komunikat walidatora o brakującym obowiązkowym dziecku elementu head dotyczy właśnie tytułu, a tekst z <title> wyświetla się na karcie przeglądarki, nie na banerze strony.
W zadaniu praktycznym szkielet z tej lekcji przepisuje się jako pierwszy, zanim powstanie jakakolwiek treść, i sprawdza po kolei cztery wymagania arkusza: <!DOCTYPE html> w pierwszym wierszu, <meta charset="UTF-8"> jako pierwsze dziecko head, lang="pl" w znaczniku <html> i tytuł strony w <title>. Wiersz z <link> do pliku styl.css dopisuje się od razu, nawet zanim ten plik powstanie, bo dołączenie zewnętrznego arkusza jest osobno punktowane.
Pułapka: sama deklaracja charset nie zmieni pliku zapisanego w innym kodowaniu. Plik index.html trzeba zapisać w edytorze jako UTF-8, inaczej polskie litery zamienią się w krzaki mimo poprawnego wpisu w head.
Ściąga
<!DOCTYPE html>
pierwszy wiersz pliku, dokument w HTML5
<html lang="pl">
element korzeniowy, język treści polski
<head>
informacje o dokumencie, niewidoczne w oknie strony
<meta charset="UTF-8">
kodowanie znaków, pierwsze dziecko head
<title>
tytuł na karcie przeglądarki, wymagany przez walidator
<meta name="viewport" content="width=device-width, initial-scale=1">
dopasowanie szerokości widoku do ekranu telefonu
<meta name="description" content="...">
streszczenie strony dla wyszukiwarki
<link rel="stylesheet" href="styl.css">
dołączenie zewnętrznego arkusza stylów
<style>
wewnętrzny arkusz stylów, umieszczany w head
<script>
skrypt, zwykle na końcu body
<body>
cała treść widoczna na stronie
<!-- notatka -->
komentarz, nie wyświetla się w oknie
Pobierz ściągę PDF