Langsung ke konten

A11y (Accessibility) di HTML: Membuat Website untuk Semua Orang

Pelajari accessibility (a11y) di HTML. Pahami ARIA attributes, keyboard navigation, color contrast, dan screen reader friendly di website.

Belajar HTML untuk Pemula
Belajar HTML untuk Pemula
Advertisement

Artikel ini merupakan bagian dari seri Belajar HTML untuk Pemula di hanifmu.com. Setelah memahami Clean Code HTML, kita bahas topik terakhir: Accessibility atau A11y. Membuat website yang bisa diakses oleh semua orang, termasuk penggunaan assistive technology.

Apa itu Accessibility (A11y)?

Accessibility (A11y) adalah praktik membuat website yang bisa diakses oleh semua orang, termasuk pengguna dengan disabilitas. A11y adalah singkatan dari “accessibility” dengan 11 huruf di antara a dan y.

Mengapa Accessibility Penting?

  • Inklusif — Semua orang bisa mengakses informasi
  • Legal — Beberapa negara mewajibkan aksesibilitas
  • SEO — Website accessible biasanya lebih SEO-friendly
  • Pengalaman lebih baik — Semua pengguna mendapat pengalaman yang lebih baik

Jenis Disabilitas

Penggunaan Screen Reader

Pengguna tunanetra atau low vision menggunakan screen reader untuk membaca konten:

<!-- ❌ Screen reader tidak bisa membaca -->
<div onclick="submitForm()">Kirim</div>

<!-- ✅ Screen reader bisa membaca -->
<button type="submit">Kirim</button>

Penggunaan Keyboard

Pengguna yang tidak bisa menggunakan mouse navigasi dengan keyboard:

<!-- ❌ Tidak bisa diakses dengan keyboard -->
<div class="button" onclick="action()">Klik</div>

<!-- ✅ Bisa diakses dengan keyboard -->
<button type="button" onclick="action()">Klik</button>

Penggunaan Zoom

Pengguna low vision memperbesar layar:

<!-- ❌ Tidak responsif -->
<div style="width: 500px;">Konten</div>

<!-- ✅ Responsif -->
<div style="max-width: 100%;">Konten</div>

Semantic HTML untuk Aksesibilitas

Gunakan Tag yang Tepat

<!-- ❌ Non-semantic -->
<div class="button">Klik</div>
<div class="link">Baca selengkapnya</div>

<!-- ✅ Semantic -->
<button type="button">Klik</button>
<a href="/artikel">Baca selengkapnya</a>

Gunakan Heading secara Hierarkis

<!-- ❌ Loncat level -->
<h1>Judul</h1>
<h3>Sub-judul</h3>

<!-- ✅ Hierarkis -->
<h1>Judul</h1>
<h2>Sub-judul</h2>

ARIA Attributes

ARIA (Accessible Rich Internet Applications) attributes membantu screen reader memahami elemen interaktif.

role

Memberi tahu screen reader fungsi elemen:

<div role="button" tabindex="0" onclick="action()">Klik</div>
<div role="navigation">
  <a href="/">Beranda</a>
</div>
<div role="alert">Error terjadi!</div>

aria-label

Memberi label yang dibaca screen reader:

<button aria-label="Tutup">×</button>
<input type="text" aria-label="Cari artikel" />
<nav aria-label="Navigasi utama">
  <a href="/">Beranda</a>
</nav>

aria-describedby

Menjelaskan elemen lebih lanjut:

<input
  type="text"
  aria-describedby="name-help"
/>
<span id="name-help">Masukkan nama lengkap Anda</span>

aria-hidden

Menyembunyikan elemen dari screen reader:

<div aria-hidden="true">Konten dekoratif</div>
<span aria-hidden="true"></span> Rating: 5/5

aria-expanded

Menandakan elemen bisa diperluas/diperkecil:

<button aria-expanded="false" aria-controls="menu">
  Menu
</button>
<div id="menu" hidden>
  <a href="/">Beranda</a>
  <a href="/tentang">Tentang</a>
</div>

Keyboard Navigation

Tab Order

Pastikan elemen bisa diakses dengan Tab:

<!-- Urutan tab mengikuti urutan kode -->
<input type="text" /> <!-- Tab pertama -->
<input type="email" /> <!-- Tab kedua -->
<button type="submit">Kirim</button> <!-- Tab ketiga -->

tabindex

Mengontrol urutan tab:

<!-- tabindex="0" — Mengikuti urutan DOM -->
<div tabindex="0">Bisa difokuskan</div>

<!-- tabindex="-1" — Bisa difokuskan dengan JS tapi tidak dengan Tab -->
<div tabindex="-1">Fokus via JS</div>

<!-- tabindex="5" — Urutan tab tinggi (hindari penggunaan ini) -->
<div tabindex="5">Tab terakhir</div>

Skip Navigation

Tautan untuk melewati navigasi:

<body>
  <a href="#main-content" class="skip-link">Langsung ke konten</a>

  <header>
    <nav>
      <a href="/">Beranda</a>
      <a href="/tentang">Tentang</a>
    </nav>
  </header>

  <main id="main-content">
    <article>
      <h1>Judul Artikel</h1>
      <p>Isi artikel...</p>
    </article>
  </main>
</body>
.skip-link {
  position: absolute;
  top: -40px;
  left: 0;
  background: #000;
  color: white;
  padding: 8px;
  z-index: 100;
}

.skip-link:focus {
  top: 0;
}

Form Accessibility

Label yang Terhubung

<!-- ✅ Menggunakan for dan id -->
<label for="email">Email:</label>
<input type="email" id="email" name="email" />

<!-- ✅ Membungkus input -->
<label>
  Email:
  <input type="email" name="email" />
</label>

Pesan Error

<label for="email">Email:</label>
<input
  type="email"
  id="email"
  aria-describedby="email-error"
  aria-invalid="true"
/>
<span id="email-error" role="alert">
  Email tidak valid
</span>

Fieldset dan Legend

<fieldset>
  <legend>Jenis Kelamin</legend>

  <input type="radio" name="jk" value="laki-laki" id="lk" />
  <label for="lk">Laki-laki</label>

  <input type="radio" name="jk" value="perempuan" id="pr" />
  <label for="pr">Perempuan</label>
</fieldset>

Color Contrast

Pastikan kontras warna cukup untuk dibaca:

Standar WCAG

  • Level AA — Kontras minimal 4.5:1 untuk teks normal
  • Level AAA — Kontras minimal 7:1 untuk teks normal

Tools untuk Mengecek Kontras

Contoh Kontras yang Baik

/* ✅ Kontras baik */
body {
  color: #333; /* Gelap */
  background-color: #fff; /* Terang */
}

/* ❌ Kontras buruk */
body {
  color: #999; /* Abu-abu terang */
  background-color: #fff; /* Terang */
}

Image Accessibility

Alt Text

<!-- ✅ Deskriptif -->
<img src="chart.png" alt="Grafik penjualan Q1 2026 naik 20%" />

<!-- ✅ Gambar dekoratif -->
<img src="dekorasi.png" alt="" role="presentation" />

Caption

<figure>
  <img src="diagram.png" alt="Diagram arsitektur sistem" />
  <figcaption>Gambar 1: Arsitektur sistem monolitik</figcaption>
</figure>

Multimedia Accessibility

Video dengan Subtitle

<video controls>
  <source src="video.mp4" type="video/mp4" />
  <track src="subtitle.vtt" kind="captions" label="Indonesia" />
</video>

Audio dengan Transkrip

<audio controls>
  <source src="podcast.mp3" type="audio/mpeg" />
</audio>
<p>
  <a href="transkrip.txt">Download transkrip</a>
</p>

Checklist Aksesibilitas

  • Semua gambar punya alt text
  • Form punya label yang terhubung
  • Heading hierarkis (h1 → h2 → h3)
  • Link teks deskriptif (hindari “klik di sini”)
  • Cukup kontras warna (minimal 4.5:1)
  • Semua fungsionalitas bisa diakses keyboard
  • Skip navigation tersedia
  • ARIA labels untuk elemen interaktif
  • Video/audio punya subtitle/transkrip
  • Tidak ada konten yang berkedip (bisa menyebabkan kejang)

Tools untuk Mengecek Aksesibilitas

  • Lighthouse — Audit aksesibilitas di Chrome DevTools
  • axe DevTools — Extension untuk mengecek aksesibilitas
  • WAVE — Web Accessibility Evaluation Tool
  • Screen reader — NVDA (Windows), VoiceOver (Mac)

Ringkasan

  • Accessibility membuat website inklusif untuk semua orang
  • Gunakan semantic HTML untuk struktur yang jelas
  • ARIA attributes membantu screen reader
  • Pastikan semua elemen bisa diakses keyboard
  • Kontras warna minimal 4.5:1
  • Alt text untuk semua gambar
  • Form punya label yang terhubung
  • Video/audio punya subtitle/transkrip

Penutup

Selamat! Kamu sudah menyelesaikan seri Belajar HTML untuk Pemula. Dari pengenalan HTML hingga accessibility, kamu sudah punya bekal yang cukup untuk membuat website yang baik, benar, dan bisa diakses oleh semua orang.

Selanjutnya, kamu bisa belajar CSS untuk styling dan JavaScript untuk interaktivitas. Terima kasih sudah belajar di hanifmu.com!