- Bab 10 dari 10
- 35 menit
- 1 latihan kode
- 4 soal kuis
Responsive, Variabel CSS, dan Praktik Terbaik
Di bab ini (10 bagian)
Tujuan bab ini
- Membangun halaman responsif dengan pendekatan mobile-first, meta viewport, dan media query
min-width. - Memakai CSS custom properties (
--nama,var()) untuk tema, termasuk tema gelap. - Menghitung ukuran dinamis dengan
calc(),clamp(),min(),max(), dan mengenalfilter,mix-blend-mode, sertaclip-path. - Menerapkan praktik terbaik HTML5 dan CSS3: semantik, kontras, penamaan BEM, dan menghindari
!important.
Responsive design dan mobile-first
Lebih dari separuh kunjungan web di Indonesia datang dari HP. Responsive design artinya satu halaman yang sama menyesuaikan diri dengan lebar layar apa pun, tanpa membuat versi terpisah untuk HP dan laptop.
Mobile-first artinya kamu menulis gaya untuk layar kecil lebih dulu sebagai gaya dasar, lalu menambah aturan untuk layar yang lebih besar. Alasannya praktis: tampilan HP biasanya lebih sederhana (satu kolom), jadi lebih mudah dikembangkan ke tiga kolom daripada memangkas tiga kolom jadi satu. HP juga tidak perlu memproses aturan desktop yang lalu dibatalkan.
Meta viewport dulu
Sebelum media query bekerja dengan benar di HP, pasang tag ini di <head>:
Tanpa tag ini, browser HP berpura-pura layarnya selebar sekitar 980px lalu mengecilkan seluruh halaman. Hasilnya tulisan mungil dan media query untuk HP tidak pernah aktif. width=device-width menyuruh browser memakai lebar asli perangkat.
Media queries dengan min-width
Baca dari atas: semua layar mendapat lebar 100%. Kalau lebar viewport minimal 768px, aturan kedua ikut berlaku dan menimpa. Kalau minimal 1024px, aturan ketiga menimpa lagi. Karena min-width, urutan di file harus dari kecil ke besar.
| Rentang | Kategori kasar |
|---|---|
| di bawah 768px | HP |
| 768px sampai 1023px | tablet |
| 1024px ke atas | laptop dan desktop |
Breakpoint ini hanya patokan. Breakpoint terbaik dipilih saat konten mulai terlihat jelek, bukan berdasarkan merek perangkat. Ingat juga: gambar perlu max-width: 100%; height: auto; agar tidak meluber dari layar kecil.
CSS custom properties
Custom property (sering disebut CSS variable) adalah nilai bernama yang kamu definisikan sekali lalu pakai di banyak tempat.
Namanya wajib diawali dua tanda hubung dan peka huruf besar kecil. :root adalah elemen html, jadi variabel di sana bisa dipakai seluruh halaman. var() juga menerima nilai cadangan: var(--bayangan, none) dipakai bila --bayangan tidak didefinisikan.
Bedanya dengan variabel Sass: custom property hidup di browser dan ikut cascade. Artinya kamu bisa menimpanya di elemen tertentu, dan semua yang memakai variabel itu ikut berubah secara real-time. Inilah dasar tema gelap:
Tambahkan class gelap ke <html> lewat JavaScript, atau biarkan media query prefers-color-scheme mengikuti setelan sistem. Kamu tidak perlu menulis ulang aturan body, cukup ganti nilai variabelnya.
calc, clamp, min, max
calc()mencampur satuan berbeda. Contoh di atas: lebar penuh induk dikurangi 40px. Operator+dan-wajib diapit spasi,calc(100%-40px)tidak valid.clamp(min, ideal, max)memakai nilai ideal, tapi tidak pernah di bawah min atau di atas max. Judul di atas ikut membesar dengan lebar layar, tapi tetap antara 24px dan 48px. Satu baris ini menggantikan beberapa media query.min()mengambil nilai terkecil.min(90%, 600px)berarti "90% dari induk, tapi maksimal 600px".max()mengambil nilai terbesar.max(200px, 20vh)berarti "minimal 200px".
Semua fungsi ini bisa bersarang dan menerima custom property, misalnya calc(var(--jarak) * 2).
filter, mix-blend-mode, clip-path
Tiga properti ini untuk efek visual tanpa perlu edit gambar di aplikasi lain:
filtermenerapkan efek ke elemen:blur(),grayscale(),brightness(),contrast(),saturate(),drop-shadow(). Saudaranya,backdrop-filter, memburamkan area di belakang elemen untuk efek kaca.mix-blend-modemencampur warna elemen dengan lapisan di belakangnya, seperti mode layer di aplikasi edit foto:multiplymenggelapkan,screenmencerahkan.clip-pathmemotong elemen menjadi bentuk tertentu. Bagian di luar bentuk tidak terlihat dan tidak bisa diklik.
Praktik terbaik
- Semantik dulu. Pakai
<header>,<nav>,<main>,<article>,<button>sesuai maknanya. Pembaca layar dan mesin pencari memahami halamanmu dari tag ini. - Kontras cukup. Teks normal butuh rasio kontras minimal 4.5:1 terhadap latarnya (standar WCAG AA). Abu-abu muda di atas putih sering gagal.
- Penamaan BEM ringkas. Block, Element, Modifier:
.kartu,.kartu__judul,.kartu--sorot. Class jadi jelas asal-usulnya dan specificity tetap rendah karena semua cukup satu class. - Hindari
!important. Ia mengalahkan specificity normal, sehingga aturan berikutnya juga butuh!important, dan perang dimulai. Kalau gaya tidak berlaku, cek dulu specificity dan urutan aturan di DevTools. - Satuan konsisten, rem untuk teks dan jarak, variabel untuk warna dan spasi, serta animasi yang ringan.
Kesalahan umum
- Lupa meta viewport, sehingga media query untuk HP tidak pernah aktif di perangkat asli.
- Menulis media query
min-widthdari besar ke kecil, sehingga aturan kecil menimpa aturan besar. - Menulis
calc(100%-40px)tanpa spasi di sekitar tanda minus. - Menulis
var(warna-utama)tanpa dua tanda hubung. - Menambal masalah specificity dengan
!importantdi mana-mana.
Rangkuman
- Mobile-first: gaya dasar untuk HP, lalu tambah lewat
@media (min-width: ...)dari kecil ke besar. - Meta viewport wajib agar HP memakai lebar aslinya.
- Custom property
--namadibaca denganvar(), ikut cascade, dan memudahkan tema gelap. calc,clamp,min,maxmembuat ukuran fluid dengan lebih sedikit breakpoint.filter,mix-blend-mode, danclip-pathmemberi efek visual langsung di CSS.- HTML5 memberi struktur dan makna, CSS3 memberi tampilan, layout, gerakan, dan adaptasi. Keduanya paling kuat bila semantik, kontras, penamaan rapi, dan specificity rendah dijaga sejak awal.
Slide 23 sampai 30 dari deck HTML5 dan CSS3. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: Tema dengan variabel dan ukuran fluid
Rapikan gaya halaman dengan custom property dan fungsi CSS:
- Di
:rootbuat--warna-utama: #1572b6,--jarak: 16px,--bg: #ffffff, dan--teks: #1a1a1a. .kartu:color: var(--warna-utama)danpadding: var(--jarak)..panel:background: var(--bg)dancolor: var(--teks)..tema-gelapcukup menimpa variabel:--bg: #121212dan--teks: #f0f0f0..konten:width: calc(100% - 40px)(wadahnya 400px)..judul:font-size: clamp(1.5rem, 4vw, 3rem).
Cek pemahaman
1Berapa lebar `.isi` hasil hitung browser?
<style> .wadah { width: 500px; } .isi { width: min(80%, 300px); } </style> <div class="wadah"> <div class="isi"></div> </div>2Tanpa meta viewport, browser HP biasanya merender halaman seolah lebarnya sekitar 980px lalu mengecilkannya.
3Dengan pendekatan mobile-first, media query sebaiknya ditulis seperti apa?
4Apa warna teks `p` hasil hitung browser?
<style> :root { --warna: red; } .kotak { --warna: green; } p { color: var(--warna, blue); } </style> <div class="kotak"> <p>Halo</p> </div>
