- Bab 5 dari 10
- 30 menit
- 1 latihan kode
- 4 soal kuis
Pengenalan CSS dan Selector
Di bab ini (12 bagian)
Tujuan bab ini
- Memahami apa itu CSS, apa bedanya CSS3 dengan CSS2, dan tiga cara memasang CSS ke halaman.
- Menulis rule CSS dengan sintaks yang benar.
- Memilih elemen dengan selector dasar, kombinator, attribute selector, pseudo-class, dan pseudo-element.
- Menghitung specificity dan memahami cascade, supaya tahu gaya mana yang menang.
Apa itu CSS dan CSS3?
Kalau HTML adalah kerangka rumah (dinding, pintu, jendela), CSS (Cascading Style Sheets) adalah cat, lantai, dan tata ruangnya. HTML bilang "ini judul", CSS bilang "judul ini warnanya hijau, ukurannya 32px, dan ada di tengah".
CSS2 dulu ditulis sebagai satu spesifikasi besar. CSS3 berbeda: ia dipecah menjadi banyak modul yang berkembang sendiri-sendiri, misalnya Selectors, Box Model, Flexbox, Grid, Animations, dan Media Queries. Karena itu tidak ada "CSS4" sebagai satu paket. Yang ada adalah modul dengan level masing-masing, misalnya Selectors Level 4. Istilah "CSS3" sekarang dipakai untuk menyebut CSS modern secara umum.
Tiga cara memasang CSS
| Cara | Ditulis di mana | Kapan dipakai |
|---|---|---|
| Inline | atribut style pada tag | tes cepat, hampir tidak pernah untuk produksi |
| Internal | tag <style> di dalam <head> | halaman tunggal atau demo |
| External | file .css yang dihubungkan dengan <link> | hampir semua proyek nyata |
Cara external paling disarankan: satu file style.css bisa dipakai puluhan halaman, browser menyimpannya di cache, dan HTML tetap bersih. Inline paling susah dirawat karena gayanya tersebar di setiap tag, dan specificity-nya sangat tinggi (nanti kita bahas).
Sintaks rule
Satu rule terdiri dari selector dan blok deklarasi:
h1adalah selector: elemen mana yang mau diberi gaya.color: #2e7d32;adalah deklarasi: pasangan properti dan nilai, dipisah titik dua, diakhiri titik koma.- Kurung kurawal membungkus semua deklarasi.
Hasilnya: semua <h1> jadi hijau dengan ukuran 32px. Lupa titik koma di tengah? Browser membaca dua deklarasi sebagai satu nilai yang tidak valid, sehingga keduanya diabaikan. Biasakan selalu menulisnya, termasuk di baris terakhir.
Selector dasar
Class boleh dipakai berkali-kali dan satu elemen boleh punya banyak class (class="tombol besar"). Id harus unik dalam satu halaman. Aturan praktisnya: pakai class untuk gaya, simpan id untuk anchor link atau JavaScript.
Kamu juga bisa menggabungkan: p.catatan berarti <p> yang punya class catatan, dan h1, h2 (dengan koma) berarti h1 dan h2 mendapat gaya yang sama.
Kombinator
Kombinator memilih elemen berdasarkan hubungannya dengan elemen lain, seperti silsilah keluarga.
| Selector | Nama | Yang terpilih |
|---|---|---|
nav a | descendant (spasi) | kedua link, sedalam apa pun |
nav > a | child | hanya link "Login", anak langsung nav |
h2 + p | adjacent sibling | hanya "Paragraf pertama", tepat setelah h2 |
h2 ~ p | general sibling | kedua paragraf setelah h2 di level yang sama |
Perhatikan nav > a tidak memilih "Beranda" karena link itu cucu nav, bukan anak langsung.
Attribute selector
Memilih elemen berdasarkan atribut dan nilainya:
Ini praktis untuk form: kamu bisa menata semua input email tanpa menambah class satu per satu.
Pseudo-class
Pseudo-class (satu titik dua) memilih elemen berdasarkan keadaan atau posisi:
:nth-child(2n) menghitung mulai dari 1, jadi yang terpilih item ke-2, 4, 6, dan seterusnya. Pakai odd atau even kalau lebih mudah dibaca. Jangan hapus gaya :focus tanpa pengganti, karena pengguna keyboard butuh tanda elemen mana yang sedang aktif.
Pseudo-element
Pseudo-element (dua titik dua) menargetkan bagian dari elemen, atau membuat "elemen palsu" tanpa menambah HTML:
Label <label class="wajib">Email</label> akan tampil sebagai "Email *" dengan bintang merah. Tanpa properti content, ::before dan ::after tidak muncul sama sekali.
Specificity dan cascade
Bagaimana kalau dua rule menargetkan elemen yang sama dengan warna berbeda? Browser memutuskan lewat cascade: urutan pertimbangannya adalah tingkat kepentingan (!important), lalu specificity, lalu urutan (yang ditulis belakangan menang).
Specificity dihitung sebagai tiga angka (id, class, elemen):
| Selector | Hitungan | Skor |
|---|---|---|
p | 1 elemen | (0, 0, 1) |
.teks | 1 class | (0, 1, 0) |
p.teks:hover | 1 elemen, 1 class, 1 pseudo-class | (0, 2, 1) |
#utama p | 1 id, 1 elemen | (1, 0, 1) |
style="..." | inline | mengalahkan semua selector |
Class, attribute selector, dan pseudo-class masuk kolom tengah. Elemen dan pseudo-element masuk kolom kanan. Universal * dan kombinator bernilai nol. Bandingkan dari kiri: satu id selalu mengalahkan sepuluh class.
<h1 id="judul" class="besar"> akan berwarna biru, walaupun rule h1 ditulis paling akhir, karena (1,0,0) lebih tinggi dari yang lain.
!important (color: red !important;) melompati specificity. Anggap ini jalan terakhir, misalnya untuk menimpa gaya library yang tidak bisa kamu ubah. Kalau dipakai sembarangan, kamu akan terjebak perang !important yang susah dilacak.
Kesalahan umum
- Menulis titik pada HTML:
class=".tombol". Titik hanya dipakai di CSS, di HTML cukupclass="tombol". - Mengira
nav > ajuga memilih link di dalamul. Child hanya satu tingkat, pakai spasi untuk semua keturunan. - Lupa
content: ""pada::before/::after, lalu bingung kenapa tidak muncul. - Memakai id untuk gaya di mana-mana, lalu kesulitan menimpanya dengan class.
- Menambal masalah dengan
!importantalih-alih memperbaiki selector.
Rangkuman
- CSS mengatur tampilan, CSS3 adalah kumpulan modul yang berkembang terpisah.
- External stylesheet lewat
<link>adalah cara memasang CSS yang paling rapi. - Rule = selector + blok deklarasi
properti: nilai;. - Selector dasar: elemen,
.class,#id,*. Kombinator: spasi,>,+,~. - Attribute selector, pseudo-class (
:hover,:focus,:nth-child,:not), dan pseudo-element (::before,::after) membuat penargetan makin presisi. - Saat bentrok, yang menang ditentukan
!important, lalu specificity (id, class, elemen), lalu urutan penulisan.
Slide 9 sampai 11 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: Menu dengan selector yang tepat
HTML-nya sudah jadi, jangan diubah. Tulis CSS agar:
- Semua link di dalam
.menuberwarna#2e7d32dan tanpa garis bawah (text-decoration: none). - Link dengan class
aktifdi menu tebal (font-weight: bold). - Link di menu yang
href-nya diawalihttpsberwarna#c62828. Pakai attribute selector, dan pastikan specificity-nya cukup untuk mengalahkan rule warna link menu. - Item genap di
.daftardiberi background#f1f8e9dengan:nth-child. - Label
.wajibmendapat tanda*di belakangnya lewat::after.
Cek pemahaman
1Cara memasang CSS mana yang paling disarankan untuk situs dengan banyak halaman?
2Apa warna teks "Halo"?
<style> .kartu p { color: green; } p.teks { color: red; } p { color: blue; } </style> <div class="kartu"> <p class="teks">Halo</p> </div>3Selector `#utama p` punya specificity lebih tinggi daripada `.kartu .teks p`.
4Item mana saja yang berwarna merah?
<style> li:nth-child(odd):not(.lewat) { color: red; } </style> <ul> <li>A</li> <li>B</li> <li class="lewat">C</li> <li>D</li> <li>E</li> </ul>
