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.
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.
1
2
3
4
5
6
7
8
9
10
<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.
Zapis
Numeracja
<ol>
1, 2, 3
<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.
1
2
3
4
5
6
<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.
Znacznik
Znaczy
<table>
cała tabela
<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
<tr>
wiersz (table row)
<th>
komórka nagłówkowa (table header), domyślnie pogrubiona i wyśrodkowana
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 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.
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