Cara membuat tombol yang menuju sebuah halaman
Tulis link biasa, <a href>, lalu beri gaya dengan CSS supaya terlihat seperti tombol. Link itu menuju halaman seperti link lainnya, dan tetap punya semua fitur link: buka di tab baru, salin alamat link, dan pratinjau URL saat kursor di atasnya.
Aturan yang mengubah link menjadi tombol:
display: inline-blockmembuat padding bisa memperbesar kotaknya dan tetap menjaganya di baris teks.text-decoration: nonemenghapus garis bawah.colordanbackgroundmenggantikan warna biru link.:focus-visiblememberi pengguna keyboard cincin fokus yang jelas.
Class yang sama juga berlaku di <button>, jadi tombol submit sebuah form dan link ke halaman lain bisa terlihat sama persis sementara masing-masing menjalankan tugasnya sendiri.
Tombol atau link: elemen mana yang dipakai
Pertanyaannya adalah apa yang terjadi saat diklik, bukan seperti apa tampilannya.
| Saat diklik | Pakai | Contoh |
|---|---|---|
| Menuju URL lain | <a href> | Daftar, Baca selengkapnya, Lihat harga, Unduh |
| Mengubah sesuatu di halaman ini | <button type="button"> | Buka menu, Putar, Tambah ke keranjang, Tampilkan password |
| Mengirim form | <button type="submit"> | Masuk, Cari, Simpan |
Link yang diumumkan sebagai "link" dan tombol yang diumumkan sebagai "button" memberi tahu pengguna screen reader apa yang akan terjadi. Perilaku keyboard-nya juga berbeda: Enter mengaktifkan keduanya, tapi Space hanya mengaktifkan tombol (di link, Space menggulir halaman). Elemen button sendiri dibahas di [button HTML](/docs/html/button).
Kenapa tidak menaruh tombol di dalam link
Inilah pola yang paling sering dicoba orang pertama kali:
<!-- Invalid: interactive content inside <a> -->
<a href="/signup"><button>Sign up</button></a>
<!-- Invalid the other way round, too -->
<button><a href="/signup">Sign up</a></button>
Standar HTML melarang keduanya: <a> dan <button> tidak boleh berisi elemen interaktif. Dalam praktiknya, keyboard mendapat dua tab stop untuk satu kontrol, screen reader bisa mengumumkan "link, button, Sign up", dan apakah klik akan mengikuti link itu tergantung browsernya. Pilih satu elemen.
Kenapa tidak onclick dengan location.href
Cara lain yang sering dipakai adalah tombol yang mengatur URL lewat JavaScript. Tampilannya sama dengan link:
(Contoh ini memakai window.open karena pratinjau tidak boleh berpindah halaman; kode yang biasa dipakai adalah location.href = '...'.) Arahkan kursor dan klik kanan keduanya: hanya link sungguhan yang menampilkan URL-nya dan menawarkan "Buka link di tab baru" dan "Salin alamat link". Tombol itu juga tidak mendapat Ctrl+klik atau klik tengah, browser tidak menandainya sebagai sudah dikunjungi, dan mesin pencari tidak mengikutinya sebagai link. Kalau tujuannya adalah URL, tulis <a href>.
Tombol form yang membuka URL
Ada satu kasus di mana <button> yang menuju halaman lain adalah pilihan yang tepat: saat tombol itu ikut mengirim data. Kotak pencarian adalah contoh klasiknya. action di form adalah URL-nya dan method="get" menaruh isi field di query string:
Tekan Search: di halaman sungguhan, browser akan menuju https://duckduckgo.com/?q=html+button+link. Pratinjau menampilkan datanya, bukan berpindah halaman. formaction mengirim form yang sama ke URL lain dari tombol kedua.
Link tombol yang nonaktif
Link tidak punya atribut disabled; <a disabled> tidak melakukan apa-apa. Untuk mematikan link tombol, hapus href-nya (<a> tanpa href bukan link dan tidak bisa diklik atau difokus), lalu tandai dengan aria-disabled="true" supaya gaya dan screen reader sama-sama tahu:
Tekan Tab di pratinjau: fokus hanya mendarat di tombol pertama. Beberapa situs tetap menyimpan href dan menambahkan pointer-events: none, tapi itu hanya memblokir mouse. Link tetap bisa dicapai dengan Tab dan Enter tetap mengikutinya.
Tombol tab baru dan unduhan
Setiap atribut link tetap berfungsi di link yang diberi gaya seperti tombol:
<a class="btn" href="/files/guide.pdf" download>Download the guide</a>
<a class="btn" href="https://github.com/" target="_blank" rel="noopener">GitHub</a>
Ini satu alasan lagi untuk memakai <a>: <button> tidak punya download atau target. Penjelasan lebih lanjut tentang target ada di membuka link di tab baru.
Kesalahan umum
- Tombol di dalam link, atau link di dalam tombol. HTML yang tidak valid dengan perilaku yang tidak bisa ditebak.
<button onclick="location.href=...">untuk navigasi biasa. Tidak ada tab baru, tidak ada salin link, tidak bisa di-crawl.role="button"di link yang berpindah halaman. Atribut itu memberi tahu pengguna screen reader bahwa ada tombol, lalu halamannya berganti. Biarkan tetap menjadi link.- Link yang diberi gaya tombol untuk aksi seperti "Delete" atau "Open menu" dengan
href="#". Kalau tidak ada yang dimuat, pakai<button type="button">. <a disabled>. Atribut itu tidak ada di link. Hapushref-nya.- Lupa menulis
display: inline-block, sehingga padding vertikal menumpuk baris di atas dan di bawahnya.
Pertanyaan yang sering diajukan
Bagaimana cara membuat tombol yang menuju halaman lain di HTML?
Pakai link dan beri gaya seperti tombol: <a href="/signup" class="btn">Sign up</a> dengan CSS untuk padding, background, border radius dan text-decoration: none. Tampilannya seperti tombol dan perilakunya seperti link, karena memang itulah dia.
Bolehkah aku menaruh button di dalam tag a?
Tidak. Standar HTML tidak mengizinkan konten interaktif seperti <button> di dalam <a>. Setiap browser menanganinya dengan cara berbeda, pengguna keyboard mendapat dua tab stop untuk satu kontrol, dan screen reader mengumumkannya dengan membingungkan. Pakai satu elemen saja.
Apakah button punya atribut href?
Tidak. <button> tidak punya href. Untuk mengarahkan browser ke sebuah URL, pakai <a href>, atau taruh tombolnya di dalam <form> dengan action (atribut formaction di tombol akan menimpanya).
Apakah buruk memakai onclick dengan location.href di tombol?
Cara itu berhasil, tapi pengguna kehilangan semua yang diberikan link: klik tengah dan Ctrl+klik untuk tab baru, salin alamat link, pratinjau URL saat kursor di atasnya, dan mesin pencari tidak mengikutinya sebagai link. Pakai <a> saat tujuannya adalah URL.
Bagaimana cara menonaktifkan link yang terlihat seperti tombol?
Link tidak punya atribut disabled. Hapus href supaya elemen itu berhenti menjadi link, tambahkan aria-disabled="true", lalu beri gaya nonaktif. Kembalikan href saat link itu harus berfungsi lagi.