Media Queries — CSS

Bayangin kamu nulis website yang cuma kelihatan bagus di laptop. User buka di HP — semua kepencet, kekecilan, scroll horizontal kemana-mana. Tahun 2010-an ke…

Media query bikin CSS berubah mengikuti lebar layar. Halaman yang sama bisa tampil tiga kolom di laptop dan numpuk jadi satu kolom di HP. Kalau @container menanyakan lebar pembungkus, @media menanyakan lebar viewport, yaitu lebar layar atau jendela browser.

🧪 Tebakan cepat: layar selebar 800px kena aturan di dalam @media (max-width: 768px) atau gak? Tebak dulu, jawabannya ada di bagian "Ubah tata letak di layar sempit".

Ubah tata letak di layar sempit

<div class="container">
  <div class="box">A</div>
  <div class="box">B</div>
  <div class="box">C</div>
</div>

<style>
.container {
  display: flex;
  gap: 16px;
}

@media (max-width: 768px) {
  .container {
    flex-direction: column;
  }
}
</style>

Hasilnya, di layar lebih lebar dari 768px, kotak A, B, dan C berjajar ke samping. Di 768px atau kurang, ketiganya numpuk ke bawah. Jawaban tebakan: gak kena, karena 800px lebih lebar dari 768px.

Aturan di luar query tetap dipakai di layar sempit. Query cuma menimpa properti yang ditulis di dalamnya, jadi display: flex dan gap tetap ada, yang berubah cuma arahnya.

Cara menulis syaratnya

Angka batas kayak 768px disebut breakpoint. Yang sering dipakai: 480px buat HP kecil, 768px buat tablet, 1024px buat laptop.

Mobile-first: mulai dari layar kecil

Cara yang disarankan: tulis CSS buat HP dulu, lalu tambahkan @media (min-width: ...) buat layar yang lebih lebar.

.container {
  display: flex;
  flex-direction: column;
}

@media (min-width: 769px) {
  .container {
    flex-direction: row;
  }
}

Hasilnya sama dengan contoh pertama, tapi arahnya dibalik: dasarnya satu kolom, lalu berjajar mulai 769px. Jadi mobile-first biasanya memakai min-width, sedangkan desktop-first (mulai dari layar besar) memakai max-width.

⚠️ Jebakan yang sering ketemu

TL;DR: @media (max-width: 768px) { .container { ... } } berlaku di layar 768px atau kurang. Tulis selector lagi di dalam query, dan biarkan aturan dasarnya di luar. Angka syaratnya pakai satuan. Mobile-first: gaya dasar buat HP, lalu @media (min-width: ...) buat layar yang lebih lebar.

Yang akan kamu pelajari