14 poin oleh GN⁺ 2025-08-30 | Belum ada komentar. | Bagikan ke WhatsApp
  • Penyebab utama penurunan performa situs web belakangan ini adalah penggunaan JavaScript yang berlebihan dan skrip pelacakan, padahal dalam banyak kasus hal itu bisa cukup digantikan dengan HTML/CSS saja
  • Fitur-fitur yang baru ditambahkan seperti CSS nesting, relative colors, unit viewport baru (lvh, svh, dvh) memungkinkan penyelesaian sederhana untuk hal-hal yang dulu bergantung pada JS atau preprocessor
  • CSS bukan sekadar alat styling, melainkan bahasa yang kuat yang mampu mewujudkan animasi, validasi input, tema dark mode, hingga menu accordion
  • Dari sisi performa, CSS berjalan dengan akselerasi GPU dan di thread terpisah sehingga lebih mulus dan efisien daripada JS untuk animasi dan efek transisi
  • Penulis menekankan CSS bukan hanya alat praktis, tetapi juga sarana ekspresi dan seni, serta mendorong para web developer untuk lebih memanfaatkan potensi CSS modern

Pendahuluan: Kompleksitas web, dan upaya baru

  • Banyak situs web mengalami penurunan performa dan kompleksitas akibat penggunaan framework JavaScript yang berlebihan
    • Aplikasi React membutuhkan beberapa detik untuk memuat, dan NextJS memunculkan hydration error
    • Folder node_modules dapat memakan ukuran hingga beberapa gigabita
  • Bahkan tanpa JavaScript, HTML dan CSS saja sudah bisa mewujudkan fitur yang kuat
    • Selain keranjang belanja e-commerce yang kompleks atau dashboard, JavaScript mungkin tidak selalu wajib
  • Tulisan ini memperkenalkan fitur-fitur terbaru CSS dan mendorong developer mengeksplorasi berbagai kemungkinan tanpa hanya bergantung pada JavaScript

Kesalahpahaman dan persepsi tentang CSS

Apakah CSS benar-benar sulit dan tidak nyaman digunakan?

  • Persepsi negatif terhadap CSS berasal dari kurangnya pembelajaran dasar
    • Banyak developer melewati dasar-dasar CSS dan fokus pada JavaScript atau TypeScript
    • CSS bukan sekadar alat styling, melainkan bahasa khusus domain yang menyediakan kemampuan kuat
  • CSS memungkinkan pembuatan layout kompleks dengan mudah lewat alat seperti flexbox
    • Contoh: memusatkan div cukup mudah dengan display: flex dan justify-content: center
    • Developer tools di browser menyediakan widget untuk menyesuaikan properti flexbox secara visual
  • Jika hanya mendalami satu sisi saja (misalnya JS) dan mengabaikan CSS, wajar bila CSS terasa berat

Susahnya menulis CSS, dan perubahannya

  • Dulu CSS memang tidak terlalu nyaman, sehingga lahirlah alat seperti Sass dan Tailwind
    • Contoh: harus mengelola rantai selector panjang seperti .post > .buttons .like:hover
  • Belakangan ini ditambahkan fitur peningkatan kualitas (seperti nesting), sehingga pengembangan dengan CSS murni menjadi jauh lebih nyaman
    • CSS nesting mengumpulkan style yang saling terkait di satu tempat sehingga keterbacaan meningkat
      • Contoh: .post { & > .buttons { .like { &:hover { ... } } } }
      • Hubungan parent-child jadi lebih jelas, sehingga nama class bisa dibuat lebih pendek dan sederhana
  • Relative colors memudahkan penyesuaian warna
    • Kecerahan dapat diatur dengan hsl(from #123456 h s calc(l + 10))
    • Menghasilkan warna dinamis dengan mencampur dua warna lewat color-mix()
  • Sintaks rentang media query memungkinkan penetapan kondisi yang intuitif seperti (width <= 768px)
  • Unit lh mendukung styling yang menyesuaikan tinggi baris
  • Properti scrollbar-gutter menyelesaikan masalah pergeseran layout akibat scrollbar
  • Baseline menjamin kompatibilitas fitur di browser utama
    • newly available berarti berfungsi di browser modern
    • widely available berarti didukung hingga browser dari 2,5 tahun lalu
    • Contoh: CSS nesting didukung di semua browser sejak Desember 2023

Mengapa membangun hanya dengan CSS/HTML?

  • Sebagian pengguna menonaktifkan JavaScript secara default karena alasan keamanan, privasi, dan sebagainya
  • Jika situs disajikan hanya dengan CSS/HTML murni, kemungkinan besar pengguna seperti ini tetap bisa memakainya
  • Dari sudut pandang developer maupun pengguna, penggunaan CSS/HTML saja memberi keuntungan besar dalam hal kecepatan, aksesibilitas, serta penggunaan CPU/baterai
    • Animasi CSS berjalan di compositor thread, sehingga mengurangi beban CPU
    • JavaScript berjalan melalui event loop dan dapat menimbulkan sedikit latensi
  • Aksesibilitas dan kemudahan penggunaan juga meningkat
    • Efek hover pada tombol, animasi toast, dan validasi input bisa dibuat dengan mudah memakai CSS

Contoh nyata dan fitur-fitur utama CSS

Membuat animasi awal yang natural dengan @starting-style

  • Dulu animasi kemunculan elemen memerlukan struktur rumit seperti keyframes dan trigger JS
  • Dengan hadirnya @starting-style, penentuan state awal menjadi sederhana. Animasi state awal elemen (misalnya fade-in) bisa dibuat dengan mudah
    • Diatur dengan transition: opacity 1s; @starting-style { opacity: 0; }
    • Berfungsi tanpa @keyframes atau JavaScript tambahan
  • Cukup nyatakan state awal bersama transition agar animasi diterapkan secara natural
    • Contoh: menangani perubahan opacity dan posisi pesan toast dengan mulus

Pengaturan tema dark/light mode yang mudah

  • color-scheme: light dark mengalihkan tema secara otomatis sesuai preferensi pengguna
  • Fungsi light-dark(#000, #FFF) menentukan warna yang sesuai untuk mode terang/gelap
  • Pemilihan tema oleh pengguna bisa didukung lewat radio button dan selector :has
    • Pergantian tema bisa dilakukan hanya dengan CSS tanpa JavaScript
    • Penyimpanan/pemuatan tema dengan JavaScript dapat ditambahkan secara opsional

Membuat UI kustom dengan radio/checkbox dan :has, :checked, dll.

  • Interaksi kompleks seperti tab, accordion, dan toggle juga bisa dibuat tanpa JavaScript
  • Radio button dapat diberi styling kustom dengan :checked dan :has
    • Contoh: menetapkan style tombol yang dipilih dengan label:has(input:checked)
    • Elemen input disembunyikan dengan opacity: 0, tetapi aksesibilitas screen reader tetap terjaga
  • Elemen details cocok untuk membuat menu accordion seperti FAQ
    • Status buka tunggal dapat dikendalikan dengan atribut name
    • Animasi dapat ditambahkan berdasarkan state [open]

Validasi input dan refleksi state

  • Dengan menggabungkan atribut HTML seperti pattern dan required serta pseudo-class CSS (:valid, :invalid, :user-valid, dll.), kita bisa memberi validasi real-time dan umpan balik visual
  • Pengalaman pengguna meningkat lewat perubahan style seperti outline/border pada field input
  • Atribut pattern di HTML memvalidasi isian field input
    • Contoh: \w{3,16} mengizinkan 3–16 huruf, angka, atau underscore
  • :valid dan :invalid di CSS memberi styling sesuai validitas
    • :user-valid dan :user-invalid hanya menerapkan style setelah pengguna melakukan input
  • Selector :has memungkinkan styling elemen lain berdasarkan state input
  • Dalam beberapa kasus (misalnya syarat input yang kompleks), JS memang dibutuhkan, tetapi untuk kebanyakan hal CSS/HTML sudah cukup

Cara yang benar menggunakan unit viewport

  • Unit vw/vh memiliki masalah akurasi di mobile karena address bar (navigation bar) dapat muncul dan menghilang
  • Disarankan memakai unit viewport baru seperti lvh/svh/dvh (largest/smallest/dynamic viewport height)
    • lvh: untuk layar penuh (misalnya background penuh)
    • svh: untuk tombol, tautan, dan elemen lain yang harus selalu terlihat di layar
    • dvh: untuk mengalokasikan ukuran secara dinamis sesuai perubahan seperti scroll
  • Overlay keyboard ditangani dengan properti interactive-widget atau VirtualKeyboard API
    • &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, interactive-widget=resizes-content&quot;&gt;
    • Di browser berbasis Chromium, gunakan navigator.virtualKeyboard.overlaysContent = true

Wishlist CSS (fitur yang masih kurang atau diharapkan)

  • Blok yang dapat digunakan ulang: menerapkan class lain di dalam class (misalnya @apply border)
  • Selector media query gabungan: menggabungkan @media dengan selector class
  • Variabel nth-child: styling dinamis dengan span { --nth: nth-child(); }
  • Selector nth-letter: styling huruf tertentu (misalnya p::nth-letter(2))
  • Menghapus unit: membuat nilai tanpa unit dengan calc(100vw / 1px)
  • Fungsi image(): mendukung warna fallback dan potongan gambar
  • Tag style di dalam body: dukungan standar resmi untuk mengurangi masalah FOUC

Penutup: CSS, dan sisi artistik web

  • CSS bukan sekadar alat, melainkan sarana ekspresi kreatif
  • Alat AI atau build chain (linter, alat minifikasi) dapat membatasi kreativitas
  • CSS memenuhi performa, aksesibilitas, dan ekspresi artistik sekaligus
  • Tulisan ini dibuat dengan HTML/CSS tanpa JavaScript berukuran sekitar 49kB
    • Semua widget interaktif dan elemen visual dibuat secara manual
    • Contoh: CSS click game membuktikan kemungkinan CSS sebagai bahasa pemrograman

Belum ada komentar.

Belum ada komentar.