Dialog Element — HTML

Pernah ke ATM? Pas mau transaksi muncul layar kedua nge-overlay di depan, layar belakang gak bisa disentuh sampai kamu selesai (atau pencet "Batal"). Itu…

<dialog> adalah kotak yang muncul di atas halaman, misalnya buat konfirmasi "Hapus akun?". Kalau dibuka sebagai modal, halaman di belakangnya gak bisa diklik sampai pengunjung menjawab, kayak layar ATM yang minta konfirmasi dulu sebelum kamu bisa lanjut. Browser sudah mengurus latar gelap, tombol Esc, dan fokusnya sendiri.

🧪 Tebakan cepat: kamu menulis <dialog> lengkap dengan isinya, lalu membuka halamannya. Dialognya kelihatan gak? Tebak dulu, jawabannya ada di bagian "Dialog, tombol pembuka, dan tombol penutup".

Dialog, tombol pembuka, dan tombol penutup

<button onclick="document.getElementById('konfirmasi').showModal()">Hapus akun</button>

<dialog id="konfirmasi">
  <h2>Hapus akun?</h2>
  <p>Semua catatanmu ikut hilang.</p>
  <form method="dialog">
    <button value="batal">Batal</button>
    <button value="hapus">Hapus</button>
  </form>
</dialog>

Bagian per bagian:

Hasilnya: klik "Hapus akun", dialog muncul di tengah layar dengan latar gelap di belakangnya. Klik Batal atau Hapus, atau pencet Esc, dialognya tertutup.

Di Lab kamu bakal lihat versi pendek konfirmasi.showModal(). Artinya sama: browser otomatis bikin nama konfirmasi dari id dialognya.

showModal() atau show()

Dialog bisa dibuka dengan dua cara:

Pengunjung harus menjawab dulu sebelum lanjut? Pakai showModal().

Menutup dialog

Ada dua cara. Pertama, tombol di dalam <form method="dialog"> kayak contoh di atas, tanpa JavaScript. Kedua, panggil .close():

<button onclick="document.getElementById('konfirmasi').close()">Tutup</button>

⚠️ Jebakan yang sering ketemu

💡 Latar gelapnya bisa diatur. Pakai CSS dialog::backdrop { background: rgb(0 0 0 / 0.5); } buat mengubah warna latar di belakang modal.

TL;DR: <dialog id="..."> membungkus isi modal dan tersembunyi sampai dibuka. Tombol pembuka di luar dialog memanggil showModal(), yang memberi latar gelap, mengunci fokus, dan bisa ditutup pakai Esc. show() cuma menampilkan dialog biasa. Tutup dialog pakai tombol di dalam <form method="dialog"> atau .close().

Yang akan kamu pelajari