Jak zrobić tabelę w HTML
Tabela to element <table> złożony z wierszy (<tr>), a każdy wiersz składa się z komórek: <th> dla komórek nagłówka i <td> dla komórek danych.
Tabela nie ma własnego obramowania; dodaje je jedyna reguła CSS, żeby było widać komórki. Kolumny wynikają z komórek: pierwsza komórka każdego wiersza to kolumna pierwsza, druga to kolumna druga i tak dalej. Każdy wiersz powinien mieć tyle samo komórek. Usuń <td>, a ten wiersz skończy się wcześniej i zostawi lukę.
Komórki <th> są domyślnie pogrubione i wyśrodkowane. To tylko wygląd; ważne jest to, że są etykietami, o czym mówi następna sekcja.
Elementy tabeli
| Element | Czym jest |
|---|---|
<table> | Tabela |
<caption> | Tytuł tabeli, pierwsze dziecko <table> |
<thead> | Grupa wierszy nagłówka |
<tbody> | Grupa wierszy treści (tabela może mieć ich kilka) |
<tfoot> | Grupa wierszy stopki, na przykład z sumami |
<tr> | Wiersz |
<th> | Komórka nagłówka |
<td> | Komórka danych |
<colgroup>, <col> | Kolumny, do stylowania całej kolumny (szerokości, tło) |
Obramowanie opisuje strona obramowanie tabeli w HTML, a komórki zajmujące kilka kolumn lub wierszy strona colspan i rowspan.
Komórki nagłówka, scope i caption
Tabela z nagłówkami u góry i z boku musi mówić, w którą stronę wskazuje każdy nagłówek. scope="col" opisuje kolumnę poniżej, scope="row" opisuje wiersz obok. <caption> nadaje tabeli widoczny tytuł:
Z takim kodem czytnik ekranu na komórce 14:00 może ogłosić "Saturday, Closes, 14:00", więc liczba nigdy nie jest czytana w oderwaniu. W prostej tabeli z jednym wierszem nagłówka przeglądarki zwykle same ustalają nagłówki bez scope, ale jego dopisanie nic nie kosztuje i eliminuje zgadywanie.
Podpis to też to, co czytnik ekranu ogłasza, gdy dojdzie do tabeli. Wybieraj go zamiast nagłówka umieszczonego nad tabelą, który nie jest z nią połączony.
thead, tbody i tfoot
Te trzy grupy dzielą wiersze na nagłówek, treść i stopkę. Stopka to miejsce na sumy:
Dwa szczegóły poprawiają czytelność liczb: text-align: end wyrównuje przecinki dziesiętne (każda cena ma dwa miejsca po przecinku), a font-variant-numeric: tabular-nums nadaje każdej cyfrze tę samą szerokość.
Jeśli napiszesz <tr> bezpośrednio w <table>, jak w pierwszym przykładzie, przeglądarka i tak doda <tbody> wokół wierszy. Dlatego selektor CSS taki jak table > tr nigdy niczego nie znajduje: na stronie wiersze są w tbody. Użyj table tr albo sam napisz <tbody>.
Stylowanie tabeli: paski, hover i szerokość
:nth-child nadaje paski co drugiemu wierszowi, :hover wyróżnia wiersz pod kursorem, a width: 100% rozciąga tabelę na szerokość kontenera:
text-align: start wyrównuje tekst nagłówka z danymi pod nim; w przeciwnym razie th jest wyśrodkowane. start zamiast left utrzymuje poprawne wyrównanie w językach pisanych od prawej do lewej.
Responsywne tabele z przewijaniem
Tabela nie może być węższa niż jej treść. Na telefonie szeroka tabela wypycha całą stronę na boki. Obejmij ją kontenerem, który się przewija:
Kontener ma tu limit 300 pikseli, żeby udawać ekran telefonu; przewiń go na boki. tabindex="0" pozwala użytkownikom klawiatury ustawić fokus na kontenerze i przewijać go strzałkami, a role="region" z aria-label nadaje temu przystankowi nazwę.
Tabele są do danych
Używaj tabeli, gdy treść naprawdę ma wiersze i kolumny: ceny, harmonogramy, porównania, wyniki. Nie używaj jej do ustawiania rzeczy obok siebie na stronie. Tabele do układu mylą czytniki ekranu, które ogłaszają wiersze i kolumny bez żadnego znaczenia, i nie dopasowują się do małych ekranów. Układem zajmują się flexbox i grid w CSS.
Częste błędy
- Wiersze z różną liczbą komórek. Krótsze wiersze kończą się wcześniej, a kolumny przestają się wyrównywać.
<td>z pogrubionym tekstem jako nagłówki. Użyj<th>, żeby nagłówki były prawdziwymi etykietami.- Przestarzałe atrybuty
border,cellpadding,cellspacing,bgcolorialign. Użyj CSS. - Treść bezpośrednio w
<tr>lub<table>, poza jakąkolwiek komórką. Przeglądarki przenoszą ją poza tabelę, zwykle nad nią. - Nagłówek nad tabelą zamiast
<caption>. table > trw CSS. Przeglądarka wstawiła<tbody>; pisztable tralbotbody tr.
Najczęściej zadawane pytania
Jak utworzyć tabelę w HTML?
Obejmij ją znacznikiem <table>, napisz jeden <tr> na każdy wiersz, a w środku umieść komórki: <th> dla komórek nagłówka i <td> dla komórek danych. Każdy wiersz powinien mieć tyle samo komórek, chyba że niektóre komórki zajmują kilka kolumn.
Czym różni się th od td?
<th> to komórka nagłówka, która opisuje kolumnę lub wiersz, a <td> to komórka danych. Przeglądarki pokazują <th> pogrubione i wyśrodkowane, a czytniki ekranu czytają pasujący nagłówek przed każdą komórką danych, żeby liczby miały sens.
Co robią thead, tbody i tfoot?
Grupują wiersze w nagłówek, treść i stopkę (sumy) tabeli. Czynią strukturę jasną dla technologii wspomagających, dają CSS punkt zaczepienia, a przy drukowaniu długiej tabeli przeglądarki mogą powtarzać <thead> na każdej stronie.
Dlaczego moja tabela HTML nie ma obramowania?
Tabele domyślnie nie mają obramowania. Dodaj je w CSS: table { border-collapse: collapse; } th, td { border: 1px solid #ccc; }. Stary atrybut border="1" jest przestarzały.
Jak zrobić responsywną tabelę HTML?
Umieść tabelę w kontenerze z overflow-x: auto. Na wąskim ekranie tabela przewija się na boki wewnątrz kontenera, zamiast poszerzać całą stronę.