Generator Tab CSS

Berikutnya

Tab tersebar di mana-mana: panel pengaturan, situs dokumentasi, hingga galeri produk. HTML bawaan tidak menyediakan elemen tab khusus, sehingga para pengembang membuatnya sendiri. Generator ini membuat bilah tab sederhana dalam HTML + CSS: warna aksen untuk tab aktif, radius sudut untuk tombol, dan keadaan hover. Tempel markupnya ke proyek Anda dan sambungkan perpindahan tab ke JavaScript buatan sendiri.

Cara membuat tab

  1. 1

    Pilih warna aksen

    Warna latar dan teks tab aktif. Pilih warna yang sesuai merek Anda.

  2. 2

    Atur radius sudut

    Membulatkan sudut atas tombol tab. Nilai yang lebih besar memberi kesan lebih lembut.

  3. 3

    Edit label

    Hasilnya berisi tiga tombol, "Overview", "Details", dan "Settings": ganti namanya agar sesuai konten Anda.

  4. 4

    Salin kodenya

    Markup tab disertai blok <style> sendiri. Tempel keduanya ke halaman Anda.

  5. 5

    Tambahkan perpindahan tab

    Generator hanya membuat bagian visualnya. Sambungkan tombol ke JavaScript atau pustaka UI buatan sendiri untuk menampilkan dan menyembunyikan panel.

Markup yang benar dan dapat diakses

<div class="tabs">
  <div role="tablist" aria-label="Product info">
    <button role="tab" id="tab-1" aria-selected="true"  aria-controls="panel-1" tabindex="0">Overview</button>
    <button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">Specs</button>
    <button role="tab" id="tab-3" aria-selected="false" aria-controls="panel-3" tabindex="-1">Reviews</button>
  </div>
  <section role="tabpanel" id="panel-1" aria-labelledby="tab-1">...</section>
  <section role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>...</section>
  <section role="tabpanel" id="panel-3" aria-labelledby="tab-3" hidden>...</section>
</div>

Atribut penting:

  • role="tablist" membungkus tombol-tombol tersebut.
  • role="tab" pada setiap tombol, bersama aria-selected dan aria-controls.
  • tabindex menggunakan pola roving tabindex: hanya tab yang aktif yang bernilai 0, sedangkan tab lainnya -1. Tombol panah memindahkan fokus di antara tab-tab tersebut.
  • role="tabpanel" pada setiap panel, dengan aria-labelledby yang menunjuk ke tabnya.
  • hidden pada panel yang tidak aktif (bukan hanya display: none; atribut inilah yang dipakai teknologi bantu).

Aturan keyboard

Tombol Aksi
Tab Masuk / keluar dari daftar tab
ArrowLeft Tab sebelumnya (berputar ke tab terakhir)
ArrowRight Tab berikutnya (berputar ke tab pertama)
Home Tab pertama
End Tab terakhir
Enter / Space Aktifkan tab yang sedang difokuskan (jika diaktifkan secara manual)

Aktivasi otomatis (tab berganti saat fokus bergerak) versus aktivasi manual (tab aktif saat fokus bergerak dan tombol Enter ditekan) – WAI-ARIA mendukung keduanya. Aktivasi otomatis lebih mudah digunakan oleh pengguna yang memiliki penglihatan normal; sedangkan aktivasi manual lebih tepat ketika konten tab memerlukan proses rendering yang kompleks.

Gaya garis bawah

[role="tablist"] {
  display: flex;
  border-bottom: 1px solid #e5e7eb;
}
[role="tab"] {
  padding: 0.75rem 1rem;
  background: transparent;
  border: 0;
  color: #6b7280;
  position: relative;
  cursor: pointer;
}
[role="tab"][aria-selected="true"] {
  color: #111827;
}
[role="tab"][aria-selected="true"]::after {
  content: "";
  position: absolute;
  left: 1rem; right: 1rem; bottom: -1px;
  height: 2px;
  background: #2563eb;
}

Gaya pil

[role="tab"] {
  padding: 0.5rem 0.9rem;
  border-radius: 9999px;
  border: 0;
  background: transparent;
}
[role="tab"][aria-selected="true"] {
  background: #2563eb;
  color: #fff;
}

Fokus yang terlihat

Selalu gambarkan cincin fokus ketika fokus datang melalui keyboard:

[role="tab"]:focus-visible {
  outline: 2px solid #60a5fa;
  outline-offset: 2px;
}

JavaScript

Secara kasar:

const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach(tab => {
  tab.addEventListener('click', () => activate(tab));
  tab.addEventListener('keydown', e => {
    const i = [...tabs].indexOf(tab);
    if (e.key === 'ArrowRight') tabs[(i + 1) % tabs.length].focus();
    if (e.key === 'ArrowLeft')  tabs[(i - 1 + tabs.length) % tabs.length].focus();
    if (e.key === 'Home') tabs[0].focus();
    if (e.key === 'End')  tabs[tabs.length - 1].focus();
  });
});

function activate(tab) {
  tabs.forEach(t => {
    const panel = document.getElementById(t.getAttribute('aria-controls'));
    const active = t === tab;
    t.setAttribute('aria-selected', active);
    t.setAttribute('tabindex', active ? '0' : '-1');
    panel.hidden = !active;
  });
  tab.focus();
}

Total tiga puluh baris, tanpa ketergantungan sama sekali.

Tab vs. Akordeon

Pada layar sempit, baris tab menjadi sempit. Pola umumnya sama: tampilan tab pada desktop, sedangkan tampilan akordion pada perangkat seluler. Gunakan kueri kontainer atau kueri media untuk mengubah tampilan visual tanpa mengubah peran ARIA.

Pertanyaan yang Sering Diajukan

Untuk tab yang mudah diakses, ya. Tanpa role="tablist" dan role="tab", pembaca layar akan memperlakukan tombol-tombol tersebut sebagai tombol biasa, sehingga pengguna kehilangan konvensi navigasi yang berlaku. Alternatifnya adalah tata letak akordeon sederhana menggunakan kode <details>/<summary> yang telah memiliki makna bawaan.

Pilihan otomatis (tab aktif saat fokus bergerak) cocok digunakan ketika konten setiap tab mudah dirender. Sementara itu, pilihan manual (fokus bergerak dan tombol Enter yang mengaktifkan tab) lebih baik jika pergantian tab memerlukan proses yang kompleks, seperti pengambilan data atau rendering formulir besar.

Untuk tab yang berisi konten (seperti dokumen atau tab produk), ya, gunalah hash (#specs) atau parameter kueri agar tautan dapat mengarah ke tab tertentu secara langsung, dan tab aktif tetap terjaga meskipun aplikasi dimuat ulang. Untuk tab antarmuka pengguna (panel pengaturan), URL bersifat opsional.

Hanya dengan menggunakan solusi sementara berupa kotak centang atau radio, yang tidak memiliki fitur navigasi menggunakan tombol panah maupun atribut ARIA. Namun, untuk implementasi yang benar-benar aksesibel, fragmen kode JS yang singkat ini sangat sepadan. Jika Anda memerlukan opsi cadangan yang ditampilkan oleh server, hubungkan setiap tab dengan URL unik dan tampilkan panel terkait secara langsung di sisi server.

Alat Terkait

Alat ini tersedia dalam bahasa lain