Listy wypunktowane, numerowane i definicji, budowa tabeli od caption do tfoot, scalanie komórek atrybutami colspan i rowspan oraz odnośniki: do pliku, do miejsca na stronie i do adresu e-mail. Lekcja 3.5 kursu INF.03.
Lista, tabela i odnośnik to trzy elementy strony, z których arkusz CKE każe zbudować prawie każdą witrynę: menu to lista odnośników, cennik to tabela, a plik do pobrania to odnośnik. W części pisemnej wracają pytania z rysunkiem: jaki kod dał tę listę, ile komórek scala colspan, który znacznik tworzy odnośnik i czym różni się href od src. W zadaniu praktycznym polecenie brzmi zwykle „lista numerowana wypełniana przez skrypt PHP", „tabela z wierszami z bazy" i „odnośnik do pliku", więc te trzy elementy piszesz na każdym egzaminie.
Listy: wypunktowana, numerowana, definicji
Lista to zbiór punktów, w którym każdy punkt jest osobnym elementem, a przeglądarka sama dokłada przed nim punktor albo numer. Rodzaje są trzy, a różni je tylko znacznik zewnętrzny.
Lista wypunktowana (nienumerowana) to <ul> (unordered list, lista nieuporządkowana). Każdy punkt siedzi w <li> (list item, element listy). Lista numerowana to <ol> (ordered list, lista uporządkowana), z tym samym <li> w środku. Kolejność ma znaczenie tylko w <ol>: to ona decyduje o numerach.
<ul>
<li>Klawiatury</li>
<li>Myszy</li>
<li>Monitory
<ul>
<li>24 cale</li>
<li>27 cali</li>
</ul>
</li>
</ul>
Tak wygląda lista kategorii sklepu z listą zagnieżdżoną. Podlista stoi WEWNĄTRZ <li>, do którego należy, a nie między dwoma <li>. Przeglądarka wcina ją i zmienia punktor, więc pytanie „który kod dał ten wygląd" rozstrzyga się po tym, gdzie zamyka się <li> rodzica.
Pułapka: dzieckiem <ul> i <ol> może być wyłącznie <li>. Akapit <p> albo nagłówek wrzucony prosto do listy to błąd walidacji; tekst wkłada się do środka <li>.
Sposób numerowania w <ol> zmieniają atrybuty.
<ol type="A">
A, B, C (type="a" daje małe litery)
<ol type="I">
I, II, III (type="i" daje małe cyfry rzymskie)
<ol start="5">
pierwszy punkt dostaje numer 5, kolejne 6 i 7
<ol reversed>
odlicza w dół, od liczby punktów do jedynki
Trzeci rodzaj to lista definicji <dl> (description list, lista opisowa). Ma inną budowę: zamiast <li> stoją w niej pary, gdzie <dt> (definition term) to hasło, a <dd> (definition description) to jego wyjaśnienie. Jedno hasło może mieć kilka opisów.
<dl>
<dt>Klawiatura mechaniczna</dt>
<dd>Klawiatura z osobnym przełącznikiem pod każdym klawiszem.</dd>
<dt>Monitor IPS</dt>
<dd>Matryca o szerokim kącie widzenia.</dd>
</dl>
Menu strony to w HTML5 lista odnośników zamknięta w <nav>: znacznik sekcji mówi, że to nawigacja, lista daje strukturę, a CSS ustawia punkty obok siebie i chowa kropki. Znaczniki sekcji omawia lekcja o znacznikach sekcji. Tabela: od caption do tfoot
Tabela to siatka wierszy i kolumn, w której jedna komórka trzyma jedną wartość. Buduje się ją wierszami, nie kolumnami: kolumny powstają same z tego, ile komórek stoi w każdym wierszu.
<caption>
tytuł tabeli, musi stać jako pierwszy element w środku <table>
<thead>
grupa wierszy nagłówka
<tbody>
grupa wierszy z danymi
<tfoot>
grupa wierszy podsumowania
<th>
komórka nagłówkowa (table header), domyślnie pogrubiona i wyśrodkowana
<td>
komórka z danymi (table data)
Cennik sklepu wygląda w kodzie tak:
<table>
<caption>Cennik</caption>
<thead>
<tr><th>Kategoria</th><th>Produkt</th><th>Cena</th><th>Sztuk</th></tr>
</thead>
<tbody>
<tr><td rowspan="2">akcesoria</td><td>Klawiatura</td><td>120 zł</td><td>15</td></tr>
<tr><td>Mysz</td><td>45 zł</td><td>0</td></tr>
<tr><td>monitory</td><td>Monitor 24</td><td>650 zł</td><td>4</td></tr>
</tbody>
<tfoot>
<tr><td colspan="3">Razem sztuk</td><td>19</td></tr>
</tfoot>
</table>
Podział na <thead>, <tbody> i <tfoot> nie zmienia wyglądu, dopóki nie dojdzie CSS, ale porządkuje tabelę i pozwala ostylować sam nagłówek albo samo podsumowanie. <caption> to tytuł widoczny nad tabelą, a nie dymek: różni się tym od atrybutu title.
Tabela cen z podpisanymi częściami: caption nad tabelą, thead z komórkami th, tbody z komórkami td, tfoot, komórka scalona w poziomie colspan i komórka scalona w pionie rowspan
Wygląd tabeli ustawia się dziś w CSS, ale w bankach pytań siedzą jeszcze atrybuty z HTML 4: border rysował ramkę, cellpadding odsuwał treść od krawędzi komórki, cellspacing rozsuwał komórki od siebie. W HTML5 robią to właściwości border, padding i border-spacing, a osobna właściwość border-collapse skleja podwójne ramki sąsiednich komórek w jedną linię.
Tabela służy do danych, nie do układu strony. Rozkładanie banera, menu i stopki na komórkach tabeli to sposób sprzed HTML5, dziś obowiązują znaczniki sekcji i CSS, a arkusz CKE wprost każe podzielić stronę „za pomocą znaczników sekcji".
colspan i rowspan: scalanie komórek
colspan (column span, rozpiętość na kolumny) scala komórki w poziomie, rowspan (row span, rozpiętość na wiersze) w pionie. Obydwa stawia się przy komórce, która ma być większa, i podaje liczbą, ile miejsc zajmuje.
W cenniku wiersz podsumowania ma colspan="3": napis „Razem sztuk" rozciąga się na kolumny Kategoria, Produkt i Cena. Tabela ma cztery kolumny, ta jedna komórka zajmuje trzy, więc w całym wierszu stoją tylko DWA znaczniki <td>, nie cztery. To jest sedno pytań z rysunkiem: liczba komórek w wierszu nie równa się liczbie kolumn, kiedy występuje scalanie. Sprawdza się to dodawaniem: suma zajętych miejsc w wierszu musi dać tyle, ile tabela ma kolumn, czyli 3 plus 1.
rowspan="2" przy komórce „akcesoria" działa tak samo, tylko w dół: Klawiatura i Mysz należą do tej samej kategorii, więc jedna komórka opisuje dwa wiersze. Wiersz z Myszą ma przez to trzy komórki zamiast czterech, bo pierwsza jest już zajęta przez komórkę z wiersza wyżej. Licząc komórki kolejnego wiersza, zawsze najpierw odejmij te, które zjadł rowspan z góry.
Odnośniki: znacznik a i atrybut href
Odnośnik (hiperłącze) to fragment strony, który po kliknięciu przenosi w inne miejsce. Tworzy go <a> (anchor, kotwica) z atrybutem href (hypertext reference, adres celu). Klikalny jest tekst między znacznikiem otwierającym a zamykającym.
adres bezwzględny
<a href="https://cke.gov.pl">CKE</a>
adres względny
<a href="kontakt.html">Kontakt</a>
plik do pobrania
<a href="cennik.pdf" download>Cennik PDF</a>
miejsce na tej samej stronie
<a href="#cena">Przejdź do cen</a>
adres e-mail
<a href="mailto:sklep@example.com">Napisz</a>
numer telefonu
<a href="tel:+48123456789">Zadzwoń</a>
nowa karta
<a href="regulamin.html" target="_blank" rel="noopener">Regulamin</a>
Adres bezwzględny zawiera protokół i domenę, więc działa z dowolnej strony. Adres względny liczy się od położenia bieżącego pliku: kontakt.html to plik obok, pliki/cennik.pdf to plik w podkatalogu, ../index.html to plik katalog wyżej, a /regulamin.html to ścieżka od katalogu głównego witryny.
Odnośnik z siatką # prowadzi w to samo miejsce, w którym stoi element z takim samym id. Zapis href="#cena" przewija stronę do elementu id="cena", a nie otwiera nowego pliku. Atrybut download mówi przeglądarce, żeby plik pobrać zamiast wyświetlać. target="_blank" otwiera cel w nowej karcie i dopisuje się do niego rel="noopener", bo bez tego nowa karta dostaje dostęp do okna, z którego wyszła. Atrybut title daje dymek po najechaniu myszą.
Odnośnikiem może być nie tylko tekst: obraz wstawiony przez <img> wewnątrz <a> staje się klikalny w całości. Wstawianie obrazów opisuje lekcja o obrazach i multimediach. Pułapka: href mówi, DOKĄD prowadzi odnośnik, a src (source, źródło), SKĄD pobrać plik do wstawienia w stronę. Dlatego <a href="..."> i <link href="...">, ale <img src="..."> i <video src="...">.
Kolor odwiedzonego odnośnika i zmiana po najechaniu to już CSS: robią to pseudoklasy :link, :visited, :hover i :active, a nie żaden atrybut HTML.
Wszystko razem na stronie sklepu
Trzy elementy tej lekcji spotykają się na jednej stronie: menu jako lista odnośników w <nav>, cennik jako tabela w <main>, odnośnik do regulaminu w stopce.
<nav>
<ul>
<li><a href="index.html">Start</a></li>
<li><a href="#cennik">Cennik</a></li>
<li><a href="kontakt.html">Kontakt</a></li>
</ul>
</nav>
<main id="cennik">
<h2>Cennik</h2>
</main>
<footer>
<a href="regulamin.pdf" download>Regulamin sklepu (PDF)</a>
</footer>
Punkt menu „Cennik" nie prowadzi do osobnego pliku, tylko przewija stronę do bloku <main>, bo ma on id="cennik". Tabela cen z tej lekcji wchodzi do tego bloku pod nagłówek.
Na egzaminie
W części pisemnej pytania z tej lekcji mają kilka stałych kształtów. Rysunek listy plus cztery fragmenty kodu: rozstrzyga, czy punkty mają numery (<ol>) czy punktory (<ul>) oraz gdzie zamyka się <li> przy zagnieżdżeniu. Pytanie o znacznik, który tworzy odnośnik: odpowiedzią jest <a>, a nie <p>, <div> ani <img>. Pytanie o atrybut wskazujący plik graficzny: src, podczas gdy href prowadzi do celu odnośnika. Rysunek tabeli i cztery kody, w których różnią się wartości colspan i rowspan, albo pytanie wprost, który atrybut scala komórki w poziomie. Wraca też lista definicji: znacznikiem listy definicji jest <dl>, a nie <td>, <abbr> czy <label>. Osobne pytanie dotyczy target="_blank", czyli otwarcia w nowym oknie albo nowej karcie.
Pułapka: przy pytaniu z rysunkiem tabeli policz komórki wiersz po wierszu, zamiast patrzeć na całość. Komórka z colspan="3" liczy się za trzy, a rowspan z wiersza wyżej zajmuje miejsce w wierszu niższym.
W zadaniu praktycznym polecenie „lista numerowana wypełniana danymi przez skrypt PHP" znaczy tyle: w HTML piszesz <ol>, a pojedyncze <li> powstają w pętli skryptu, po jednym na rekord z bazy. Tabela „której wiersze wypełnia skrypt" działa tak samo, tylko w pętli powstaje <tr> z komórkami <td>, a wiersz nagłówka z <th> piszesz ręcznie. Trzecie stałe polecenie to odnośnik do pliku podanego w arkuszu: nazwa pliku i katalog muszą zgadzać się co do znaku, bo serwer rozróżnia wielkość liter, a odnośnik do nieistniejącego pliku kosztuje punkt w kryterium „działanie witryny".
Ściąga
Element
Znacznik i atrybut
Uwaga
lista wypunktowana
<ul> z <li>
dzieckiem może być tylko <li>
lista numerowana
<ol> z <li>
type="A", type="I", start="5", reversed
lista definicji
<dl> z <dt> i <dd>
<dt> to hasło, <dd> to opis
tabela
<table>, <tr>, <th>, <td>
liczba kolumn wynika z liczby komórek w wierszu
części tabeli
<caption>, <thead>, <tbody>, <tfoot>
<caption> stoi jako pierwszy w <table>
scalanie w poziomie
colspan="3"
komórka liczy się za trzy kolumny
scalanie w pionie
rowspan="2"
zajmuje miejsce także w wierszu niższym
odnośnik
<a href="...">tekst</a>
href to cel, src to źródło pliku
odnośnik do pliku
<a href="cennik.pdf" download>
download pobiera zamiast otwierać
odnośnik w stronie
<a href="#cena"> i id="cena"
przewija do elementu o tym id
e-mail i telefon
href="mailto:...", href="tel:..."
otwiera program pocztowy albo dzwoni
nowa karta
target="_blank" rel="noopener"
rel zabezpiecza otwierane okno
Pobierz ściągę PDF