Web Accessibility (a11y) — Web Fundamentals

Web Accessibility (a11y) memastikan website bisa digunakan oleh semua orang, termasuk penyandang disabilitas. Ini bukan fitur tambahan — ini adalah tanggung…

Web Accessibility (a11y) memastikan website bisa digunakan oleh semua orang, termasuk penyandang disabilitas. Ini bukan fitur tambahan — ini adalah tanggung jawab setiap developer.

Siapa yang terbantu:

Semantic HTML — fondasi a11y:

<!-- ❌ Buruk -->
<div class="nav">
  <div class="btn" onclick="go()">Menu</div>
</div>

<!-- ✅ Baik -->
<nav aria-label="Main navigation">
  <button onclick="go()">Menu</button>
</nav>

Gunakan elemen HTML yang tepat: <button> untuk aksi, <a> untuk navigasi, <h1>-<h6> untuk heading hierarchy, <main>, <nav>, <aside> untuk landmarks.

ARIA (Accessible Rich Internet Applications): ARIA menambahkan informasi aksesibilitas ke elemen HTML saat semantic HTML tidak cukup:

<!-- Roles -->
<div role="alert">Data berhasil disimpan!</div>
<div role="dialog" aria-labelledby="title">...</div>

<!-- States -->
<button aria-expanded="false" aria-controls="menu">Toggle Menu</button>
<div id="menu" aria-hidden="true">...</div>

<!-- Properties -->
<input aria-label="Cari pelajaran" type="search">
<div aria-live="polite">Loading...</div>

Aturan ARIA:

  1. Jangan pakai ARIA jika HTML biasa sudah cukup
  2. Jangan ubah semantik native (<button role="heading"> ← salah!)
  3. Semua elemen interaktif harus bisa dioperasikan keyboard

Keyboard navigation:

// Custom keyboard handler:
element.addEventListener("keydown", (e) => {
  if (e.key === "Escape") closeModal();
  if (e.key === "ArrowDown") focusNextItem();
  if (e.key === "ArrowUp") focusPrevItem();
});

Kontras warna: WCAG 2.1 mensyaratkan rasio kontras minimum:

Checklist a11y:

Tools pengujian: axe DevTools, Lighthouse Accessibility audit, screen reader testing.