Dane w wierszach i kolumnach: plan lekcji, cennik, tabela ocen
Kiedy tabela, a kiedy nie?
Budowa: table, tr, th, td, caption
Części tabeli, scope i łączenie komórek
Ćwiczenie: plan lekcji i tabela ocen
Rozgrzewka · 3 minuty
Trzy pytania z poprzedniej lekcji
Który atrybut znacznika <img> mówi przeglądarce, skąd wziąć plik z obrazem?
Po co jest atrybut alt i kto z niego korzysta?
Czy <img> ma znacznik zamykający?
Rozkład: Obrazy w HTML → Tabele w HTML
Tabele · kiedy?
Tabela jest do danych, nie do układu strony
Tabela: tak
Tabela: nie
plan lekcji, cennik, wyniki meczów, oceny
ustawianie menu z lewej, a treści z prawej
każdy wiersz to jedna rzecz, każda kolumna to jedna cecha
„bo tak łatwiej coś wyrównać”
Dlaczego nie do układu? Czytnik ekranu (program czytający stronę na głos osobom niewidomym) gubi się w takiej tabeli, kod jest gęsty i trudny do poprawiania, a tabela sama nie zwęża się do ekranu telefonu. Do układu strony służy CSS, o tym później.
MDN: HTML table basics · developer.mozilla.org/…/Structuring_content/HTML_table_basics
Tabele · budowa
Cztery znaczniki: table, tr, th, td
table to pudełko na całość, tr to jeden wiersz (table row), a w wierszu leżą komórki.
th to komórka nagłówka (table header), td to komórka z danymi (table data). Przeglądarka sama pogrubia th.
Kolumn nie piszecie osobno: powstają same z komórek stojących pod sobą.
MDN: HTML table basics · developer.mozilla.org/…/Structuring_content/HTML_table_basics
Wy widzicie, że „8:00” opisuje cały wiersz, a „Poniedziałek” całą kolumnę. Czytnik ekranu tego nie widzi, trzeba mu powiedzieć:
scope="col": nagłówek kolumny (opisuje komórki pod sobą),
scope="row": nagłówek wiersza (opisuje komórki obok).
Efekt: czytnik przeczyta „Poniedziałek, 8:00: Sieci komputerowe” zamiast samego „Sieci komputerowe”.
MDN: HTML table accessibility · developer.mozilla.org/…/Structuring_content/Table_accessibility
Tabele · łączenie komórek
Łączenie komórek: colspan i rowspan
<tdcolspan="2">Pracownia aplikacji</td><!-- liczba = ile kolumn zajmuje --><tdrowspan="2">Pracownia aplikacji</td><!-- liczba = ile wierszy zajmuje -->
Ciekawostka z MDN: colspan i rowspan mają domyślną wartość 1, więc zwykła komórka td bez tych atrybutów i tak zajmuje jedną kolumnę i jeden wiersz. Specyfikacja ogranicza też górną granicę: colspan może mieć najwyżej 1000, a rowspan najwyżej 65534.
MDN: HTML table basics · developer.mozilla.org/…/Structuring_content/HTML_table_basics · ciekawostka: developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/td
Tabele · egzamin
Tak pytają na egzaminie
1. Ile maksymalnie należy użyć znaczników <td> w tabeli o trzech kolumnach i trzech wierszach niezawierającej złączeń komórek i wiersza nagłówkowego?
3
6
9
12
2. W języku HTML, aby scalić w pionie dwie sąsiednie komórki w kolumnie tabeli, należy zastosować atrybut
Nowy plik tables.html w Twoim folderze. W body dwie tabele:
Plan lekcji na trzy dni: caption „Mój plan lekcji”; thead: Godzina, Poniedziałek, Wtorek, Środa (th scope="col"); tbody: godziny 1–4, numer godziny jako th scope="row"; jeden blok dwugodzinny jako jedna komórka rowspan="2"; po godzinie 2 wiersz przerwy: th „Przerwa” i jedna komórka colspan="3".
Tabela ocen: caption „Moje oceny”; thead: Przedmiot, Ocena 1, Ocena 2, Ocena 3; tbody: trzy przedmioty; tfoot: wiersz „Średnia” ze średnią każdej kolumny.
Zapisz, sprawdź w przeglądarce.
Ma się pojawić: dwie tabele z podpisami, blok dwugodzinny wysoki na dwa wiersze, przerwa szeroka na trzy dni, wiersz ze średnią. Żadna komórka nie jest przesunięta.
Cały plik
<table><caption>Mój plan lekcji</caption><thead><tr><thscope="col">Godzina</th><thscope="col">Poniedziałek</th><thscope="col">Wtorek</th><thscope="col">Środa</th></tr></thead><tbody><tr><thscope="row">1</th><tdrowspan="2">Pracownia aplikacji</td><td>Matematyka</td><td>Polski</td></tr><tr><thscope="row">2</th><td>Angielski</td><td>Sieci</td></tr><tr><thscope="row">Przerwa</th><tdcolspan="3">Przerwa obiadowa</td></tr><!-- godziny 3 i 4 jak godzina 1, ale bez rowspan: th i trzy td --></tbody></table>
Ćwiczenie 2 · na kartce · 4 minuty
Ćwiczenie 2: z rysunku do kodu
Tabela ma 3 kolumny i 3 wiersze. Napisz jej kod: wszystkie tr i td z literami w środku.
Które komórki dostają colspan, a które rowspan i z jaką liczbą?
Ile td jest w każdym wierszu?
Pytania kontrolne
Trzy pytania na koniec
Chcecie ustawić menu z lewej strony, a artykuł z prawej. Tabela czy nie? Dlaczego?
Czym różni się th od td i po co przy th jest scope?
Komórka ma zająć trzy kolumny obok siebie. Jaki atrybut i z jaką liczbą?
treść: MDN, HTML table basics i HTML table accessibility
Z realnych wdrożeń
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
Tabela do danych
Tak samo: cenniki, listy zamówień, raporty, panele administracyjne.
nadal w użyciu
Tabela do układu strony
Zastąpiona przez CSS (grid, flexbox). MDN: myli czytniki ekranu, nie dopasowuje się do ekranu. Została w starych stronach i mailach HTML.
przestarzałe
th ze scope, caption
Sprawdzane w audytach dostępności. MDN podaje za WHO ok. 253 mln osób z wadą wzroku.
nadal w użyciu
Szeroka tabela
Na telefonie nie zwęża się sama (MDN). Owija się ją w div z overflow-x: auto, żeby przewijała się w poziomie.
nadal w użyciu
border="1", cellpadding ze starych arkuszy
Atrybuty wycofane z HTML; ramki i odstępy robi CSS (border, padding). Na egzaminie mogą się jeszcze pojawić.
przestarzałe
MDN: HTML table basics · HTML table accessibility · element table (developer.mozilla.org)