CODEPLAY 32 SMPN 32 DEPOK
Masuk
CSS Β· CHEATSHEET 02

CSS: Desain, Layout & Interaksi

Peta visual untuk memahami cascade, box model, Flexbox, Grid, responsivitas, state, motion yang aman, dan cara men-debug tampilan.

17 topik utamaΒ± 38 menit bacaMobile-first
01

Cara CSS memberi instruksi

CSS memilih bagian HTML melalui selector, lalu memberi pasangan property dan value di dalam kurung kurawal.

Bayangkan: Seperti instruksi untuk satu kelas: selector menyebut siapa yang dituju, property menyebut hal yang diubah, dan value menentukan hasilnya.
Anatomi aturan

Selector, property, dan value

Satu ruleset dapat berisi beberapa declaration. Titik dua memisahkan property dan value; titik koma memisahkan declaration.

CONTOH Β· PAHAMI POLANYA
h2 {
  color: navy;
  font-size: 1.5rem;
}

Ingat: Baca sebagai: pilih semua h2, lalu ubah warna dan ukurannya.

Hubungan dokumen

HTML tetap membawa makna

CSS hanya mengatur tampilan. Gunakan class untuk pola visual yang dipakai berulang tanpa mengganti arti elemen HTML.

CONTOH Β· PAHAMI POLANYA
<article class="kartu">...</article>

.kartu {
  border: 1px solid silver;
}

Ingat: Nama class sebaiknya menjelaskan komponen, bukan sekadar warnanya.

02

Selector, cascade, dan specificity

Beberapa aturan dapat mengenai elemen yang sama. Browser memilih hasil berdasarkan asal aturan, tingkat penting, specificity, lalu urutan penulisan.

Bayangkan: Seperti aturan sekolah: instruksi yang lebih khusus untuk satu kelompok mengalahkan pengumuman umum; jika sama khususnya, pengumuman terbaru berlaku.
Selector dasar

Elemen, class, dan ID

Selector elemen berlaku luas, class dapat digunakan berulang, sedangkan ID harus unik pada satu halaman.

CONTOH Β· PAHAMI POLANYA
p { color: #475569; }
.catatan { color: #0369a1; }
#penting { color: #b91c1c; }

Ingat: Utamakan class untuk komponen yang dapat dipakai kembali.

Konteks

Combinator dan grouping

Spasi memilih keturunan, tanda > memilih child langsung, dan koma menerapkan declaration yang sama pada beberapa selector.

CONTOH Β· PAHAMI POLANYA
.kartu h3 { margin-bottom: 0.5rem; }
nav > a { text-decoration: none; }
h1, h2 { line-height: 1.2; }

Ingat: Jaga selector tetap pendek agar mudah dirawat dan tidak terlalu spesifik.

03

Warna yang punya tugas

Warna membantu membangun hierarki, tetapi informasi tidak boleh bergantung pada warna saja. Pastikan teks tetap kontras dengan latarnya.

Bayangkan: Seperti stabilo di buku: jika semua kalimat diberi warna kuat, tidak ada lagi bagian yang terasa penting.
Palet

Latar, teks, dan aksen

Pisahkan warna permukaan, teks utama, teks pendukung, dan aksen aksi agar desain lebih konsisten.

CONTOH Β· PAHAMI POLANYA
:root {
  --latar: #f8fafc;
  --teks: #0f172a;
  --aksen: #0369a1;
}
body {
  background-color: var(--latar);
  color: var(--teks);
}

Ingat: Uji keterbacaan pada layar redup, terang, dan ukuran teks yang berbeda.

04

Tipografi untuk membaca

Jenis huruf, ukuran, jarak baris, dan panjang baris bekerja bersama agar pengguna tidak cepat lelah.

Bayangkan: Teks seperti orang berbaris: terlalu rapat membuat sesak, terlalu jauh membuat hubungan antarkalimat hilang.
Ritme baca

Ukuran relatif dan line-height

Gunakan ukuran relatif agar tulisan mengikuti preferensi pengguna, lalu beri line-height yang cukup.

CONTOH Β· PAHAMI POLANYA
body {
  font-family: system-ui, sans-serif;
  font-size: 1rem;
  line-height: 1.6;
}
h1 { font-size: 2rem; }

Ingat: Paragraf panjang biasanya lebih nyaman pada line-height sekitar 1.5–1.7.

05

Setiap elemen adalah kotak

Kotak CSS terdiri dari content, padding, border, dan margin. Memahami lapisan ini mencegah ukuran komponen terasa misterius.

Bayangkan: Bayangkan barang dalam kardus: barang adalah content, pelindung busa adalah padding, kardus adalah border, dan jarak antarkardus adalah margin.
Ukuran stabil

Border-box dan spacing

Border-box membuat width mencakup content, padding, dan border sehingga perhitungan ukuran lebih mudah.

CONTOH Β· PAHAMI POLANYA
* { box-sizing: border-box; }
.panel {
  width: 100%;
  max-width: 36rem;
  padding: 1.25rem;
  border: 1px solid #cbd5e1;
  margin-inline: auto;
}

Ingat: Gunakan padding untuk ruang di dalam komponen dan margin untuk hubungan dengan komponen lain.

06

Ukuran yang dapat menyesuaikan

px berguna untuk detail kecil, sedangkan rem, %, dan viewport unit membantu ukuran mengikuti konteks serta preferensi pengguna.

Bayangkan: Ukuran absolut seperti seragam satu ukuran; ukuran relatif seperti tali yang dapat menyesuaikan pemakainya.
Batas lentur

Gabungkan width dan max-width

Width 100% membolehkan elemen mengecil, sementara max-width mencegahnya terlalu lebar pada monitor besar.

CONTOH Β· PAHAMI POLANYA
.konten {
  width: min(100% - 2rem, 68rem);
  margin-inline: auto;
}
img {
  max-width: 100%;
  height: auto;
}

Ingat: Hindari lebar tetap besar yang memaksa pengguna ponsel menggulir ke samping.

07

Flexbox untuk susunan satu arah

Flexbox mengatur child langsung di sepanjang main axis dan cross axis. Ia cocok untuk navigasi, toolbar, dan deretan kartu.

Bayangkan: Seperti menyusun buku pada rak: arah rak adalah main axis, sedangkan posisi buku dari atas ke bawah adalah cross axis.
Container

Arah, jarak, dan wrapping

Display flex mengaktifkan konteks Flexbox. Gap memberi jarak konsisten dan wrap memberi item izin pindah baris.

CONTOH Β· PAHAMI POLANYA
.daftar-kartu {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}
.daftar-kartu > article {
  flex: 1 1 15rem;
}

Ingat: Flexbox hanya mengatur child langsung dari flex container.

Alignment

Main axis dan cross axis

Justify-content bekerja pada main axis; align-items bekerja pada cross axis.

CONTOH Β· PAHAMI POLANYA
.toolbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 0.75rem;
}

Ingat: Periksa flex-direction sebelum menebak arah justify-content.

08

Responsif dengan perubahan yang bermakna

Mulai dari layar kecil, lalu gunakan media query ketika isi benar-benar membutuhkan ruang tambahanβ€”bukan berdasarkan merek perangkat.

Bayangkan: Seperti mengatur meja belajar: barang penting tetap terjangkau di meja kecil, lalu ruang tambahan dipakai saat meja lebih besar.
Mobile-first

Style dasar lalu enhancement

Style di luar media query berlaku untuk ponsel. Pada viewport lebih lebar, susunan dapat ditingkatkan tanpa merusak isi.

CONTOH Β· PAHAMI POLANYA
.menu {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
@media (min-width: 48rem) {
  .menu { flex-direction: row; }
}

Ingat: Ubah layout saat konten mulai sesak, bukan karena mengejar satu ukuran ponsel tertentu.

Akses keyboard

Focus yang tetap terlihat

Interaksi hover tidak cukup untuk pengguna keyboard. Sediakan focus-visible yang jelas dan jangan menghapus outline tanpa pengganti.

CONTOH Β· PAHAMI POLANYA
a:hover { color: #075985; }
a:focus-visible {
  outline: 3px solid #f59e0b;
  outline-offset: 3px;
}

Ingat: Coba tekan Tab untuk memastikan posisi fokus selalu terlihat.

09

Positioning dan lapisan

Position menentukan cara sebuah kotak ditempatkan. Relative membuat titik acuan; absolute dapat menempel pada acuan terdekat; z-index mengatur urutan lapisan.

Bayangkan: Bayangkan stiker pada sampul buku. Sampul menjadi titik acuan, jarak top dan right menentukan sudut tempelnya, dan z-index menentukan stiker mana yang berada paling atas.
Titik acuan

Relative membatasi absolute

Elemen absolute mencari ancestor terdekat yang memiliki position selain static. Karena itu, beri position relative pada komponen yang menjadi batasnya.

CONTOH Β· PAHAMI POLANYA
.kartu { position: relative; }
.label {
  position: absolute;
  top: 0.75rem;
  right: 0.75rem;
}

Ingat: Tanpa titik acuan, label dapat menempel pada area halaman yang tidak kamu harapkan.

Lapisan

z-index bukan sekadar angka besar

Gunakan z-index kecil dan terencana pada elemen yang memang bertumpuk. Nilainya bekerja pada konteks lapisan yang sesuai.

CONTOH Β· PAHAMI POLANYA
.label {
  z-index: 2;
  background-color: #0f766e;
  color: white;
}

Ingat: Mulai dari 1 atau 2; angka sangat besar biasanya menutupi masalah struktur lapisan.

Tetap terlihat

Sticky mengikuti area gulir

Position sticky membuat elemen mengikuti guliran setelah mencapai offset seperti top. Ia tetap dibatasi oleh kontainer induknya.

CONTOH Β· PAHAMI POLANYA
.ringkasan {
  position: sticky;
  top: 1rem;
}

Ingat: Sticky adalah eksplorasi lanjutan pada unit ini dan tidak wajib untuk menuntaskan stage.

10

Selector berdasarkan pola

Pseudo-class seperti :nth-child() memilih elemen berdasarkan urutannya di dalam parent, sehingga pola dapat dibuat tanpa class tambahan.

Bayangkan: Seperti membagi nomor absen ganjil dan genap: aturan melihat posisi siswa pada daftar, bukan menempelkan label baru pada setiap nama.
Ganjil dan genap

odd dan even

Gunakan odd untuk child urutan ganjil dan even untuk child urutan genap.

CONTOH Β· PAHAMI POLANYA
.jadwal li:nth-child(odd) { background: #f8fafc; }
.jadwal li:nth-child(even) { background: #e0f2fe; }

Ingat: Urutan dihitung di dalam parent dan dimulai dari 1, bukan 0.

Pola terukur

Rumus an+b

Pola 3n memilih setiap urutan ketiga; 3n+1 memulai dari item pertama lalu melompat tiga posisi.

CONTOH Β· PAHAMI POLANYA
.galeri article:nth-child(3n) {
  border-color: #f59e0b;
}

Ingat: Mulai dari odd/even. Gunakan rumus hanya ketika pola tampilan memang membutuhkannya.

11

Kotak virtual before dan after

::before dan ::after membuat kotak virtual di awal atau akhir isi elemen. Keduanya cocok untuk dekorasi yang tidak membawa informasi penting.

Bayangkan: Seperti ornamen pada bingkai pengumuman: memperjelas suasana, tetapi isi pengumuman tetap lengkap walau ornamen dilepas.
Syarat utama

content membuat pseudo-element muncul

Pseudo-element biasanya membutuhkan property content, termasuk content kosong jika bentuknya dibuat melalui border atau background.

CONTOH Β· PAHAMI POLANYA
.kutipan::before {
  content: "β€œ";
  color: #0f766e;
  font-size: 3rem;
}

Ingat: Jangan memindahkan pesan utama ke content karena pembaca layar dapat memperlakukannya secara berbeda.

Pelengkap

Dekorasi mengikuti komponen

Penanda kecil dapat ditempatkan setelah teks tanpa menambah span kosong pada HTML.

CONTOH Β· PAHAMI POLANYA
.tautan::after {
  content: " β†’";
  margin-left: 0.25rem;
}

Ingat: Pastikan tautan tetap dapat dipahami walau tanda panah tidak terlihat.

12

CSS Grid untuk dua dimensi

Grid membagi ruang menjadi baris dan kolom. Ia cocok ketika posisi horizontal dan vertikal perlu dikendalikan bersama.

Bayangkan: Seperti rak kelas dengan petak bernomor: setiap barang dapat mengambil satu atau beberapa petak tanpa menghitung posisi manual.
Track responsif

repeat, auto-fit, dan minmax

Browser dapat membuat jumlah kolom berdasarkan ruang yang tersedia, sementara minmax menjaga kartu tidak terlalu kecil.

CONTOH Β· PAHAMI POLANYA
.galeri {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  gap: 1rem;
}

Ingat: Grid mengatur child langsung dari grid container.

Area halaman

Nama area membuat denah terbaca

Grid-template-areas menggambarkan denah halaman, kemudian setiap komponen ditempatkan menggunakan grid-area.

CONTOH Β· PAHAMI POLANYA
.layout {
  display: grid;
  grid-template-areas: "header header" "aside main";
}
header { grid-area: header; }
aside { grid-area: aside; }
main { grid-area: main; }

Ingat: Setiap baris area harus memiliki jumlah kolom yang sama.

13

Layout dan tipografi fluid

Fungsi min(), max(), dan clamp() membuat ukuran mengikuti viewport sambil tetap memiliki batas aman.

Bayangkan: Seperti volume speaker otomatis: dapat berubah mengikuti suasana, tetapi tidak pernah di bawah batas terdengar atau di atas batas aman.
Batas tiga arah

clamp untuk ukuran terkendali

clamp menerima nilai minimum, nilai pilihan yang fluid, dan nilai maksimum.

CONTOH Β· PAHAMI POLANYA
h1 { font-size: clamp(2rem, 6vw, 4rem); }
.container { width: min(100% - 2rem, 70rem); }

Ingat: Nilai fluid tetap perlu batas minimum dan maksimum yang masuk akal.

14

State memberi tanda interaksi

Hover, focus-visible, dan active memberi feedback berbeda. Jangan hanya mengandalkan hover karena layar sentuh dan keyboard bekerja berbeda.

Bayangkan: Seperti tombol lift: ada keadaan siap, disorot ketika dipilih, dan terasa ditekan saat diaktifkan.
Tiga state

Hover, focus, dan active

Hover merespons pointer, focus-visible membantu keyboard, dan active berlangsung ketika kontrol sedang ditekan.

CONTOH Β· PAHAMI POLANYA
.aksi:hover { background: #075985; }
.aksi:focus-visible { outline: 3px solid #f59e0b; }
.aksi:active { transform: translateY(1px); }

Ingat: Focus harus terlihat jelas, bukan sekadar perubahan warna yang sangat tipis.

15

Motion yang membantu, bukan mengganggu

Transisi menjelaskan perubahan state; keyframes cocok untuk rangkaian gerak. Selalu sediakan pilihan reduced motion.

Bayangkan: Animasi seperti gestur guru: gerakan kecil dapat mengarahkan perhatian, tetapi gerakan terus-menerus justru mengganggu belajar.
Transisi

Animasikan property yang ringan

Transform dan opacity biasanya lebih mulus. Batasi durasi dan jangan menganimasikan semuanya.

CONTOH Β· PAHAMI POLANYA
.kartu { transition: transform 180ms ease; }
.kartu:hover { transform: translateY(-0.25rem); }

Ingat: Hindari transition: all karena perubahan yang tidak dimaksud dapat ikut dianimasikan.

Preferensi pengguna

Hormati reduced motion

Media query ini mematikan atau menyederhanakan gerakan bagi pengguna yang meminta lebih sedikit animasi.

CONTOH Β· PAHAMI POLANYA
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms;
    transition-duration: 0.01ms;
  }
}

Ingat: Reduced motion adalah kebutuhan aksesibilitas, bukan pilihan kosmetik.

16

Tema dan aksesibilitas visual

Custom property memudahkan pergantian tema. Prefers-color-scheme dapat mengikuti perangkat, tetapi kontras dan focus tetap harus diperiksa.

Bayangkan: Seperti mengganti lampu ruang kelas: seluruh ruangan berubah suasana melalui satu sakelar, tetapi tulisan di papan tetap harus terbaca.
Tema perangkat

Variabel untuk light dan dark

Deklarasikan token dasar, lalu ganti nilainya pada preferensi gelap tanpa mengulang semua selector komponen.

CONTOH Β· PAHAMI POLANYA
:root { --surface: #fff; --text: #0f172a; }
@media (prefers-color-scheme: dark) {
  :root { --surface: #0f172a; --text: #f8fafc; }
}

Ingat: Periksa kontras kedua tema dan jangan menyampaikan status lewat warna saja.

17

Debugging dan audit CSS

Perbaikan dimulai dari bukti: cari elemen yang meluber, selector yang kalah, ukuran tetap, dan state keyboard yang hilang.

Bayangkan: Seperti mencari kebocoran pipa: telusuri sumbernya satu per satu, bukan mengecat seluruh lantai agar air tidak terlihat.
Overflow

Temukan sumber lebar berlebih

Gambar, teks panjang, dan width tetap sering menjadi sumber overflow. Perbaiki sumbernya, jangan menyembunyikan seluruh overflow halaman.

CONTOH Β· PAHAMI POLANYA
* { box-sizing: border-box; }
img { max-width: 100%; height: auto; }
.kartu { overflow-wrap: anywhere; }

Ingat: overflow-x: hidden pada body dapat menutupi masalah tanpa menyelesaikannya.

Cascade

Periksa aturan yang benar-benar menang

Naikkan specificity hanya ketika konteks membutuhkannya. Hindari !important sebagai jalan pintas.

CONTOH Β· PAHAMI POLANYA
.kartu p { color: #334155; }
.kartu .status { color: #047857; }

Ingat: Gunakan DevTools computed styles untuk melihat sumber declaration yang aktif.

SUMBER BELAJAR LANJUTAN

Periksa dokumentasi resminya

Materi ditulis ulang secara orisinal untuk siswa SMP dengan mengacu pada prinsip CSS modern, layout responsif, dan aksesibilitas.