← Lekcje
HTML · lekcja 06

Tabele w HTML

Dane w wierszach i kolumnach: plan lekcji, cennik, tabela ocen

  1. Kiedy tabela, a kiedy nie?
  2. Budowa: table, tr, th, td, caption
  3. Części tabeli, scope i łączenie komórek
  4. Ćwiczenie: plan lekcji i tabela ocen
Rozgrzewka · 3 minuty

Trzy pytania z poprzedniej lekcji

  1. Który atrybut znacznika <img> mówi przeglądarce, skąd wziąć plik z obrazem?
  2. Po co jest atrybut alt i kto z niego korzysta?
  3. 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: takTabela: nie
plan lekcji, cennik, wyniki meczów, ocenyustawianie 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> = cała tabela Godzina Poniedziałek Wtorek 8:00 Sieci Strony 8:50 Matematyka Angielski <tr> wiersz 1 <tr> wiersz 2 <tr> wiersz 3 <th> nagłówek <td> komórka
MDN: HTML table basics · developer.mozilla.org/…/Structuring_content/HTML_table_basics
Tabele · budowa

Ten sam plan lekcji w kodzie

<table>
  <tr>
    <th>Godzina</th><th>Poniedziałek</th><th>Wtorek</th>
  </tr>
  <tr>
    <td>8:00</td><td>Sieci</td><td>Strony</td>
  </tr>
  <tr>
    <td>8:50</td><td>Matematyka</td><td>Angielski</td>
  </tr>
</table>

Kolejność zawsze taka sama:

  1. otwieracie table,
  2. dla każdego wiersza tr,
  3. w środku wiersza komórki th lub td,
  4. zamykacie wiersz, na końcu tabelę.

W każdym wierszu ma być tyle samo komórek. 3 kolumny × 3 wiersze = 9 komórek.

MDN: HTML table basics · developer.mozilla.org/…/Structuring_content/HTML_table_basics
Tabele · części

Podpis i trzy części: caption, thead, tbody, tfoot

<table> Oceny z informatyki <caption> podpis Uczeń Sprawdzian Projekt <thead> nagłówki Ala 5 4 Bartek 3 5 Celina 4 4 <tbody> dane Średnia 4,0 4,3 <tfoot> podsumowanie
  • caption: podpis tabeli, pierwszy znacznik po <table>. Mówi, o czym jest tabela.
  • thead: wiersz z nagłówkami kolumn.
  • tbody: właściwe dane.
  • tfoot: wiersz z podsumowaniem, np. suma albo średnia.

Same nic nie zmieniają w wyglądzie. Porządkują kod i pozwalają później ostylować każdą część osobno w CSS.

MDN: HTML table accessibility · developer.mozilla.org/…/Structuring_content/Table_accessibility
Tabele · dostępność

scope: dla kogo ten nagłówek?

<thead>
  <tr>
    <th scope="col">Godzina</th>
    <th scope="col">Poniedziałek</th>
  </tr>
</thead>
<tbody>
  <tr>
    <th scope="row">8:00</th>
    <td>Sieci komputerowe</td>
  </tr>
</tbody>

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

colspan="2": komórka zajmuje 2 kolumny → 1 komórka, 2 kolumny td td td td td td td w wierszu 1 piszecie tylko 2 komórki zamiast 3 rowspan="2": komórka zajmuje 2 wiersze ↓ 1 komórka, 2 wiersze td td td td td td td w wierszu 2 piszecie tylko 2 komórki: pierwszą zajął rowspan
<td colspan="2">Pracownia aplikacji</td>      <!-- liczba = ile kolumn zajmuje -->
<td rowspan="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?

  1. 3
  2. 6
  3. 9
  4. 12

2. W języku HTML, aby scalić w pionie dwie sąsiednie komórki w kolumnie tabeli, należy zastosować atrybut

  1. colspan
  2. rowspan
  3. cellpadding
  4. cellspacing
CKE, EE.09 styczeń 2021, zad. 26 · CKE, E.14 czerwiec 2019, zad. 7
Ćwiczenie 1 · przy komputerze · 15 minut

Ćwiczenie 1: plan lekcji i tabela ocen

Nowy plik tables.html w Twoim folderze. W body dwie tabele:

  1. 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".
  2. Tabela ocen: caption „Moje oceny”; thead: Przedmiot, Ocena 1, Ocena 2, Ocena 3; tbody: trzy przedmioty; tfoot: wiersz „Średnia” ze średnią każdej kolumny.
  3. 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>
      <th scope="col">Godzina</th><th scope="col">Poniedziałek</th>
      <th scope="col">Wtorek</th><th scope="col">Środa</th>
    </tr>
  </thead>
  <tbody>
    <tr><th scope="row">1</th><td rowspan="2">Pracownia aplikacji</td><td>Matematyka</td><td>Polski</td></tr>
    <tr><th scope="row">2</th><td>Angielski</td><td>Sieci</td></tr>
    <tr><th scope="row">Przerwa</th><td colspan="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

A B C D E F kolumna 1 kolumna 2 kolumna 3 wiersz 1 wiersz 2 wiersz 3

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

  1. Chcecie ustawić menu z lewej strony, a artykuł z prawej. Tabela czy nie? Dlaczego?
  2. Czym różni się th od td i po co przy th jest scope?
  3. 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 lekcjiW produkcjiStatus
Tabela do danychTak samo: cenniki, listy zamówień, raporty, panele administracyjne.nadal w użyciu
Tabela do układu stronyZastą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, captionSprawdzane w audytach dostępności. MDN podaje za WHO ok. 253 mln osób z wadą wzroku.nadal w użyciu
Szeroka tabelaNa 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 arkuszyAtrybuty 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)
← → slajdy · F pełny ekran · S spis