Fieldset & Legend — HTML

Pernah ngisi formulir kertas yang dibagi-bagi sectionnya pake garis kotak besar? Tiap kotak ada judul di pojok atas: "BAGIAN A: DATA PRIBADI", "BAGIAN B…

Pernah ngisi formulir kertas yang dibagi-bagi sectionnya pake garis kotak besar? Tiap kotak ada judul di pojok atas: "BAGIAN A: DATA PRIBADI", "BAGIAN B: ALAMAT", "BAGIAN C: KONTAK DARURAT". Sekali liat, kamu langsung paham konteks tiap field. <fieldset> + <legend> ngasih efek visual + accessibility yang sama di form HTML — pengelompokan yang dilihat user normal + dibacakan screen reader saat fokus pindah ke section baru.

💡 Wajib untuk radio group. Tanpa <fieldset> + <legend>, screen reader tidak punya cara untuk kasih tau user pertanyaan apa yang sedang dijawab. Dia cuma denger "radio, S, tidak terpilih" — tapi bingung "S itu apa?". Legend kasih konteks: "Ukuran Kaos: radio, S, tidak terpilih".

Sintaks <fieldset> + <legend>

<form>
  <fieldset>
    <legend>Data Diri</legend>
    <label>Nama: <input type="text" name="nama"></label>
    <label>Email: <input type="email" name="email"></label>
  </fieldset>

  <fieldset>
    <legend>Alamat</legend>
    <label>Jalan: <input type="text" name="jalan"></label>
    <label>Kota: <input type="text" name="kota"></label>
  </fieldset>
</form>

Kenapa Bukan Sekadar <div>?

Use Case Paling Kuat: Radio Group

<fieldset>
  <legend>Ukuran Kaos</legend>
  <label><input type="radio" name="size" value="s"> S</label>
  <label><input type="radio" name="size" value="m"> M</label>
  <label><input type="radio" name="size" value="l"> L</label>
</fieldset>

💡 Ini adalah pola wajib untuk radio button — tanpa fieldset + legend, screen reader tidak punya cara untuk memberitahu user pertanyaan apa yang sedang dijawab.

🎭 Analogi sehari-hari

Pernah ngisi formulir kertas yang dibagi-bagi sectionnya pake garis kotak besar? Tiap kotak ada judul di pojok atas: "BAGIAN A: DATA PRIBADI", "BAGIAN B: ALAMAT", "BAGIAN C: KONTAK DARURAT". Sekali liat, kamu langsung paham konteks tiap field di dalamnya. <fieldset> + <legend> ngasih efek visual + accessibility yang sama di form HTML. User normal liat pengelompokan jelas. User tunanetra dengar legend dibacain pas fokus pindah ke section baru — gak nyasar tau-tau ngisi PIN tanpa konteks.

⚠️ Jebakan yang sering ditemui

TL;DR: <fieldset> + <legend> = grouping field di form panjang. <legend> HARUS anak pertama fieldset. Screen reader bacain legend pas user fokus ke field di dalam — user tau konteks "sekarang isi bagian Alamat". WAJIB buat radio group — tanpa ini, screen reader gak tau pertanyaannya apa. Bonus: <fieldset disabled> disable semua input di dalam sekaligus. Default styling jelek — reset CSS-nya. Legend singkat saja (dibacakan tiap focus pindah).

Yang akan kamu pelajari