- Memperkenalkan cara-cara terbaru di web untuk mengganti fitur yang bergantung pada JS dengan HTML/CSS
- Menggunakan elemen standar seperti
details·summary, datalist, dan popover untuk membangun accordion, autocomplete, modal, dan navigasi off-screen
- Pendekatan ini mengurangi unduhan, evaluasi, dan penggunaan memori sehingga meningkatkan performa dan pengalaman pengguna
- Untuk tiap fitur, tersedia contoh CodePen, dokumentasi MDN, dan informasi kompatibilitas browser
- JS sebaiknya hanya digunakan di area yang benar-benar perlu, dan fitur HTML/CSS yang telah berkembang perlu dimanfaatkan secara aktif
Mengganti Fungsi JS dengan HTML dan CSS
- Selama bertahun-tahun, JavaScript menangani fungsi-fungsi yang tidak bisa diwujudkan dengan HTML dan CSS
- Namun seiring meluasnya kemampuan HTML dan CSS, sebagian fungsi JS kini bisa digantikan dengan teknologi web native
- Karena JS perlu diunduh, didekompresi, dievaluasi, dan dipertahankan di memori, memindahkan fungsi yang memungkinkan ke HTML/CSS adalah pilihan yang efisien
- Arah yang disarankan adalah membiarkan JS fokus pada logika kompleks, sementara kontrol UI sederhana didelegasikan ke HTML/CSS
Accordion / Panel Konten yang Dapat Diperluas
- Elemen
details dan summary memungkinkan pembuatan accordion tanpa JS
- Konten bisa dibuka dan ditutup lewat klik, dan status default dapat ditentukan dengan atribut
open
- Jika menggunakan atribut
name yang sama, hanya satu panel yang akan terbuka
- Bisa juga diberi styling dengan CSS atau dikontrol buka/tutupnya dengan JS
- Materi terkait: dokumentasi MDN
details, contoh CodePen, tabel kompatibilitas browser
Kolom Input dengan Saran Autocomplete
- Kombinasi
input dan datalist memungkinkan dropdown dengan pemfilteran otomatis
- Saat mengetik, daftar saran akan difilter secara otomatis
- Mendukung berbagai tipe input selain teks, seperti
number, time, dan lainnya
- Firefox saat ini hanya mendukung input berbasis teks, dan ada keterbatasan aksesibilitas di perangkat seluler
- Materi terkait: dokumentasi MDN
datalist, tutorial SitePoint, tabel kompatibilitas browser
Modal / Popover
- Atribut
popover dan popovertarget memungkinkan pembuatan modal dan popover tanpa JS
- Tersedia tiga mode:
auto, hint, dan manual
auto menutup saat klik di luar atau menekan ESC, sedangkan manual hanya bisa ditutup secara manual
- Firefox dan iOS belum mendukung mode
hint
- Materi terkait: dokumentasi MDN
popover, blog Chrome, contoh CodePen, video terkait aksesibilitas
Navigasi / Konten Off-screen
- Fitur
popover juga bisa digunakan untuk membuat menu navigasi off-screen
- Menggunakan elemen
nav untuk memberi makna semantik, dan CSS translate untuk memindahkannya masuk dan keluar layar
- Akan tertutup saat klik di luar, dan
popover="manual" dapat dipakai untuk pengaturan tutup manual
- Elemen pseudo
::backdrop dapat digunakan untuk membuat latar belakang semi-transparan
- Materi terkait: MDN Popover API, blog Chrome, contoh CodePen
Kesimpulan
- Kekuatan JS tetap diakui, tetapi sebaiknya digunakan hanya di tempat yang benar-benar perlu
- Perkembangan HTML/CSS belakangan ini menghadirkan banyak alternatif tanpa JS
- Lebih banyak contoh bisa dilihat di tulisan blog penulis “Replace JS with No-JS or Lo-JS Options”
- Menekankan peningkatan pengalaman pengguna melalui minimalisasi JS dan optimasi performa
5 komentar
Upaya seperti ini kadang bisa membuat saya merenung apakah saya sedang melakukan overengineering, tetapi dari sudut pandang kerja praktis dengan kebutuhan yang kaya, ini lebih mirip atraksi akrobat.
> Implementasi accordion tanpa JS dimungkinkan dengan elemen ** dan **
Sepertinya ada bagian konten yang terpotong.
Sudah saya perbaiki~!
Jelas ada batasannya, dan saat AI sudah aktif.. apakah refaktorisasi seperti ini masih perlu dilakukan? Apakah hal seperti pemblokiran konten JS juga sudah dipertimbangkan?
Komentar Hacker News
Jika contoh pengganti HTML dimasukkan langsung ke halaman alih-alih hanya memberi tautan CodePen, rasanya akan jauh lebih meyakinkan
<details>/<summary>benar-benar luar biasaHampir semuanya bisa dilakukan dengannya, tetapi kebanyakan pustaka komponen justru mengabaikannya
Tidak perlu atribut aria dan aksesibilitasnya juga sudah tersedia secara bawaan
<details>juga berfungsi di situs berbasis Markdown seperti GitHub. Log yang panjang bisa dilipat agar tetap rapi saat diunggahSaat menulis buku “You Don’t Need JavaScript”, yang kurasakan adalah JS sering kali melengkapi kemampuan platform yang sudah ada, alih-alih menambahkan kemampuan yang benar-benar baru
<input>dan<datalist>masih kurang untuk penggunaan nyataPengguna mengharapkan toleransi typo, teks bantuan, UX mobile, dan lain-lain, tetapi datalist tidak mampu memenuhinya
Penggunaan HTML yang semantik atau aksesibilitas hampir tidak diperhatikan
Ini tulisan tentang “mari membangunnya hanya dengan HTML”, jadi terasa kontradiktif karena bergantung pada layanan eksternal
Sudah ada di WHATWG stage 3, dan tampaknya bisa menggantikan implementasi dropdown berbasis JS yang seperti mimpi buruk
Lihat artikel blog Chrome
Aku juga sudah mencoba alternatif seperti HTMX atau Phoenix LiveView, tetapi itu pun bukan solusi penuh
Pada akhirnya terasa lebih realistis untuk menerima JS modern
<marquee>dulu cocok untuk membuat scroll horizontal ala situs belanja, tetapi sekarang dipaksakan dengan JS. Aku berharap HTML mendukung lebih banyak pola UI secara bawaanUntuk web app yang kompleks, JS memang wajib, tetapi masih banyak area yang sebenarnya bisa ditangani hanya dengan HTML
Tetapi sekarang JS sudah menjadi alat inti untuk pengumpulan data dan pelacakan iklan
Aku penasaran apakah tanpa JS, big tech masih bisa menerapkan pengawasan dan layanan iklan pada tingkat yang sama
Pada akhirnya, penolakan terhadap JS bukan sekadar persoalan teknis, melainkan berasal dari ketidakpercayaan terhadap ekosistem iklan