Menu

Tabel HTML: Baris, Kolom, Sel Header dan Caption

Cara membuat tabel di HTML: baris dengan <tr>, sel dengan <td>, sel header dengan <th> dan scope, caption, thead, tbody dan tfoot, baris belang-belang, dan tabel yang bisa digulir di layar kecil.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Cara membuat tabel di HTML

Tabel adalah elemen <table> yang terdiri dari baris (<tr>), dan setiap baris terdiri dari sel: <th> untuk sel header dan <td> untuk sel data.

Tabel ini tidak punya border sendiri; satu aturan CSS itu menambahkannya supaya kamu bisa melihat sel-selnya. Kolom terbentuk dari sel: sel pertama di setiap baris adalah kolom satu, sel kedua kolom dua, dan seterusnya. Setiap baris sebaiknya punya jumlah sel yang sama. Hapus satu <td> dan baris itu berakhir lebih awal, meninggalkan celah.

Sel <th> tebal dan rata tengah secara default. Itu hanya tampilannya; yang penting adalah sel-sel itu label, yang dibahas di bagian berikutnya.

Elemen-elemen tabel

ElemenFungsinya
<table>Tabelnya
<caption>Judul tabel, anak pertama dari <table>
<thead>Kelompok baris header
<tbody>Kelompok baris body (satu tabel boleh punya beberapa)
<tfoot>Kelompok baris footer, seperti total
<tr>Sebuah baris
<th>Sebuah sel header
<td>Sebuah sel data
<colgroup>, <col>Kolom, untuk mengatur gaya satu kolom penuh (lebar, background)

Border dibahas di border tabel HTML, dan sel yang merentang beberapa kolom atau baris di colspan dan rowspan.

Sel header, scope dan caption

Tabel dengan header di bagian atas dan di sisi samping perlu menyatakan ke arah mana setiap header menunjuk. scope="col" memberi label pada kolom di bawahnya, scope="row" memberi label pada baris di sampingnya. <caption> memberi tabel judul yang terlihat:

Dengan markup ini, screen reader yang berpindah ke sel 14:00 bisa mengumumkan "Saturday, Closes, 14:00", jadi angkanya tidak pernah dibacakan sendirian. Untuk tabel sederhana dengan satu baris header, browser biasanya bisa menebak header-nya tanpa scope, tapi menulisnya tidak ada ruginya dan menghilangkan tebak-tebakan.

Caption juga yang diumumkan screen reader saat sampai di tabel. Utamakan caption daripada heading yang diletakkan di atas tabel, yang tidak terhubung dengan tabelnya.

thead, tbody dan tfoot

Ketiga kelompok itu membagi baris menjadi header, body dan footer. Footer adalah tempat untuk total:

Dua detail membuat angkanya mudah dibaca: text-align: end menyejajarkan titik desimal (setiap harga punya dua desimal), dan font-variant-numeric: tabular-nums memberi setiap digit lebar yang sama.

Kalau kamu menulis <tr> langsung di dalam <table>, seperti di contoh pertama, browser tetap menambahkan <tbody> di sekeliling baris-barisnya. Karena itulah selector CSS seperti table > tr tidak pernah cocok dengan apa pun: di halaman, baris-barisnya ada di dalam tbody. Pakai table tr, atau tulis <tbody> sendiri.

Styling tabel: belang-belang, hover dan lebar

:nth-child membuat baris berselang-seling warnanya, :hover menyorot baris di bawah pointer, dan width: 100% merentangkan tabel selebar container-nya:

text-align: start menyejajarkan teks header dengan data di bawahnya; tanpa itu, th rata tengah. start, bukan left, menjaga perataannya tetap benar di bahasa yang ditulis dari kanan ke kiri.

Tabel responsif yang bisa digulir

Tabel tidak bisa mengecil sampai lebih sempit dari isinya. Di ponsel, tabel yang lebar mendorong seluruh halaman ke samping. Sebagai gantinya, bungkus dengan container yang bisa digulir:

Di sini lebar container dibatasi 300 piksel supaya berperilaku seperti layar ponsel; gulirkan ke samping. tabindex="0" membuat pengguna keyboard bisa memfokuskan container dan menggulirnya dengan tombol panah, dan role="region" dengan aria-label memberi nama pada perhentian itu.

Tabel untuk data

Pakai tabel kalau kontennya memang punya baris dan kolom: harga, jadwal, perbandingan, hasil. Jangan memakainya untuk menempatkan sesuatu bersebelahan di halaman. Tabel untuk layout membingungkan screen reader, yang mengumumkan baris dan kolom yang tidak berarti apa-apa, dan tidak bisa menyesuaikan diri dengan layar kecil. Untuk layout, pakai flexbox dan grid di CSS.

Kesalahan umum

  • Baris dengan jumlah sel berbeda. Baris yang pendek berakhir lebih awal dan kolom-kolomnya tidak lagi sejajar.
  • Memakai <td> dengan teks tebal untuk header. Pakai <th> supaya header-nya menjadi label sungguhan.
  • Atribut usang border, cellpadding, cellspacing, bgcolor dan align. Pakai CSS.
  • Meletakkan konten langsung di <tr> atau <table>, di luar sel mana pun. Browser memindahkannya keluar dari tabel, biasanya ke atasnya.
  • Heading di atas tabel, bukan <caption>.
  • table > tr di CSS. Browser sudah menyisipkan <tbody>; tulis table tr atau tbody tr.

Pertanyaan yang sering diajukan

Bagaimana cara membuat tabel di HTML?

Bungkus dengan <table>, tulis satu <tr> untuk setiap baris, lalu letakkan sel-selnya di dalamnya: <th> untuk sel header dan <td> untuk sel data. Setiap baris sebaiknya punya jumlah sel yang sama, kecuali ada sel yang merentang beberapa kolom.

Apa perbedaan th dan td?

<th> adalah sel header yang memberi label pada kolom atau baris, dan <td> adalah sel data. Browser menampilkan <th> tebal dan rata tengah, dan screen reader membacakan header yang sesuai sebelum setiap sel data supaya angkanya masuk akal.

Apa fungsi thead, tbody dan tfoot?

Ketiganya mengelompokkan baris menjadi header, body dan footer (total) tabel. Ketiganya membuat struktur jelas bagi teknologi bantu, memberi CSS sesuatu untuk ditargetkan, dan saat tabel panjang dicetak, browser bisa mengulang <thead> di setiap halaman.

Kenapa tabel HTML-ku tidak punya border?

Secara default tabel tidak punya border. Tambahkan dengan CSS: table { border-collapse: collapse; } th, td { border: 1px solid #ccc; }. Atribut lama border="1" sudah usang.

Bagaimana cara membuat tabel HTML yang responsif?

Letakkan tabel di dalam container dengan overflow-x: auto. Di layar sempit, tabel itu bergulir ke samping di dalam container, bukan membuat seluruh halaman lebih lebar.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai