Affordance — UI/UX

Affordance — Buat Elemen Terlihat Interaktif Affordance dalam desain UI berarti elemen yang bisa diklik/diketuk terlihat jelas bisa diklik/diketuk. Pengguna…

Affordance adalah apa yang bisa dilakukan seseorang dengan sebuah benda, dan di UI artinya: elemen yang bisa diklik harus terlihat bisa diklik, dan yang gak bisa diklik jangan terlihat seperti tombol. Bayangin pintu kaca di minimarket. Pintu dengan gagang panjang bilang "tarik", pintu dengan pelat datar bilang "dorong". Kalau pintu dorong dipasangi gagang, orang menariknya dulu, gagal, baru mendorong. Pintunya gak rusak; tandanya yang bohong.

🧪 Tebakan cepat: Di halaman pesan Bu Sri, pilihan "1 malam · 2 malam · 3 malam" ditulis sebagai teks abu-abu biasa, padahal bisa diklik. Tulisan "Check-in 12 Des" dibuat kotak hijau membulat, padahal cuma informasi. Tamu baru yang pertama kali datang akan mencoba mengetuk yang mana? Jawabannya ada di bagian "Tes: apa yang dicoba diklik pengguna baru".

Affordance dan signifier

Don Norman, di bukunya The Design of Everyday Things, membedakan dua hal:

Di layar, semua bisa diklik secara teknis, jadi yang kita desain sebenarnya signifier-nya. Dalam percakapan sehari-hari dua kata ini sering dipakai bergantian, dan "affordance yang jelas" artinya signifier-nya jelas.

Tanda yang terlihat saat diam, dan tanda yang mengonfirmasi

Ada dua jenis tanda:

HP gak punya cursor dan hover. Jadi tanda yang terlihat saat diam harus cukup sendirian; cursor dan hover cuma mengonfirmasi.

Ini tombol-tombol di halaman Bu Sri dengan kedua jenis tanda:

<div class="nights">
  <button aria-pressed="false">1 malam</button>
  <button aria-pressed="true">2 malam</button>
  <button aria-pressed="false">3 malam</button>
</div>
<p class="checkin">Check-in 12 Des</p>
<button class="book">Pesan kamar, bayar di tempat</button>

<style>
  .nights button, .book { font: inherit; border-radius: 0.375rem; cursor: pointer; }
  .nights button { padding: 0.5rem 1rem; color: #1f2937; background: #fff; border: 1px solid #475569; }
  .nights button[aria-pressed="true"] { color: white; background: #15803d; border-color: #15803d; }
  .book { padding: 0.75rem 1rem; color: white; background-color: #15803d; border: none; }
  .nights button:hover { border-color: #15803d; }
  .book:hover { background-color: #166534; }
  .nights button:focus-visible, .book:focus-visible { outline: 3px solid #1f2937; outline-offset: 2px; }
  .checkin { color: #475569; } /* informasi: tanpa kotak, tanpa warna aksen */
</style>

Di latihan nanti, tombolnya "Simpan Perubahan" dengan biru #2563EB sebagai background-color. Polanya sama: latar berwarna, teks white, border-radius: 0.375rem, dan cursor: pointer.

Elemen yang benar: button untuk aksi, a untuk pindah halaman

Pakai <button> untuk aksi (memilih malam, mengirim pesanan, menyimpan) dan <a href> untuk pindah halaman (ke "Cara ke Homestay Kabut", ke WhatsApp Bu Sri). <button> memberi banyak hal gratis: bisa dipilih dengan Tab, bisa ditekan dengan Enter dan Spasi, dan screen reader menyebutnya "tombol". Sebuah <div> atau <span> dengan event klik gak punya satu pun dari itu: harus ditambah role="button", tabindex="0", dan kode untuk tombol keyboard. Lebih mudah pakai <button> dari awal.

Tes: apa yang dicoba diklik pengguna baru

Tim Bu Sri meminta Pak Hadi (58), yang belum pernah membuka halamannya, memesan Kamar Teras untuk 2 malam, lalu cuma mengamati. Di versi pertama halaman:

Elemen Terlihat bisa diklik? Bisa diklik? Yang terjadi
Teks abu-abu "1 malam · 2 malam · 3 malam" Tidak Ya Dilewati. Pak Hadi gak tahu bisa memilih jumlah malam
Kotak hijau "Check-in 12 Des" Ya Tidak Diketuk dua kali, gak terjadi apa-apa
Tombol hijau "Pesan kamar" Ya Ya Ditekan, berhasil

Dua baris pertama adalah dua kegagalan affordance: tersembunyi (bisa diklik tapi gak kelihatan) dan palsu (kelihatan bisa diklik tapi gak bisa). Jadi jawaban tebakannya: tamu baru mencoba mengetuk kotak tanggal, dan melewati pilihan malam. Perbaikannya ada di kode di atas: pilihan malam diberi bentuk tombol, dan tanggal dikembalikan jadi teks biasa.

Kamu bisa melakukan tes ini sendiri tanpa lab: tunjukkan halamanmu ke satu orang yang belum pernah melihatnya, minta dia menunjuk semua yang menurutnya bisa diklik, lalu bandingkan dengan yang benar-benar bisa diklik.

⚠️ Jebakan yang sering ketemu

TL;DR: Affordance artinya elemen terlihat sesuai fungsinya: yang bisa diklik terlihat bisa diklik, yang gak bisa diklik gak terlihat seperti tombol. Tandanya (signifier, istilah Don Norman) ada dua jenis: yang terlihat saat diam (latar, garis tepi, sudut, warna aksen, garis bawah) dan yang mengonfirmasi (cursor: pointer, hover, :focus-visible); HP gak punya hover, jadi tanda saat diam harus cukup sendirian. Pakai <button> untuk aksi dan <a> untuk navigasi, jangan <div> atau <span>. Tes affordance dengan pengguna baru: yang bisa diklik tapi dilewati berarti affordance tersembunyi, yang diketuk tapi gak bisa berarti affordance palsu.

Yang akan kamu pelajari