- Bab 8 dari 10
- 30 menit
- 1 latihan kode
- 4 soal kuis
Tipografi, Warna, dan Dekorasi
Di bab ini (12 bagian)
Tujuan bab ini
- Memilih font dengan
font-familybeserta fallback, lalu memuat web font lewat@font-faceatau Google Fonts. - Mengatur ukuran dan keterbacaan teks dengan
font-size(px, rem, em),line-height, danfont-weight. - Menulis warna dalam format hex,
rgb()/rgba(), danhsl(), serta paham bedaopacitydengan alpha. - Menghias elemen dengan gradient,
background-size: cover,border-radius,box-shadow, dantext-shadow.
Tipografi itu separuh desain
Coba buka dua website dengan isi yang sama persis, tapi satu pakai font default Times New Roman ukuran kecil dan rapat, satunya pakai font sans-serif yang lega. Yang kedua pasti terasa lebih "niat". Itu kerja tipografi. Sebagian besar isi web adalah teks, jadi cara teks itu tampil menentukan apakah orang betah membaca atau langsung kabur.
font-family dan fallback
font-family menerima daftar font, bukan satu nama saja. Browser mencoba dari kiri ke kanan dan memakai font pertama yang tersedia di perangkat pengguna.
Kalau Poppins belum termuat atau tidak ada, browser coba Segoe UI (umum di Windows), lalu Arial, dan terakhir sans-serif. Kata terakhir itu disebut generic family: bukan nama font, tapi kategori. Browser pasti punya minimal satu font untuk tiap kategori, jadi teks kamu tidak akan pernah tampil tanpa font. Generic family yang sering dipakai: serif, sans-serif, monospace, dan system-ui.
Aturan kecil: nama font yang mengandung spasi ditulis dalam tanda kutip, misalnya "Segoe UI". Generic family justru tidak boleh dikutip, karena "sans-serif" dengan kutip dianggap nama font biasa yang tidak ada.
Web font: @font-face dan Google Fonts
Font sistem terbatas. Supaya semua pengunjung melihat font yang sama, kamu bisa menyertakan file font sendiri dengan @font-face:
@font-face itu seperti mendaftarkan font baru dengan nama pilihanmu. Setelah terdaftar, nama itu bisa dipakai di font-family mana pun. Format woff2 adalah format paling ringkas dan didukung semua browser modern. font-display: swap artinya: tampilkan dulu teks dengan font fallback, lalu tukar ke Poppins begitu filenya selesai diunduh. Tanpa ini, sebagian browser menyembunyikan teks beberapa saat, dan halaman terasa kosong.
Cara yang lebih cepat untuk pemula adalah Google Fonts. Pilih font di fonts.google.com, lalu salin tag <link> ke <head>:
File CSS dari Google itu sebenarnya berisi aturan @font-face yang sudah disiapkan. Ambil hanya ketebalan yang kamu pakai (di contoh: 400 dan 700), karena setiap ketebalan adalah file tambahan yang harus diunduh.
font-size: px, rem, atau em?
| Satuan | Relatif terhadap | Contoh hasil (root 16px) |
|---|---|---|
px | tidak relatif, ukuran tetap | 20px = 20px |
rem | font-size elemen root (html) | 1.5rem = 24px |
em | font-size elemen induk (untuk font-size) | 1.5em di induk 20px = 30px |
Default font-size html di hampir semua browser adalah 16px. Kenapa rem disukai? Karena pengguna yang mengatur ukuran font browser lebih besar (misalnya karena mata minus) akan ikut mendapat teks lebih besar. Dengan px, preferensi itu diabaikan.
em berguna tapi punya jebakan: nilainya berlipat saat bersarang. Kalau ul punya font-size: 1.2em dan di dalamnya ada ul lagi, ukuran list dalam jadi 1.2 × 1.2 dari induk paling luar. Pakai em dengan sengaja, misalnya untuk padding tombol yang ikut membesar mengikuti teksnya.
line-height dan font-weight
line-height mengatur tinggi tiap baris. Untuk paragraf, nilai 1.5 sampai 1.7 nyaman dibaca. Tulis tanpa satuan:
Angka tanpa satuan dikalikan dengan font-size elemen itu sendiri, dan anak-anaknya mewarisi faktor 1.6, bukan hasil px-nya. Jadi judul besar di dalamnya tetap proporsional.
font-weight mengatur ketebalan dari 100 sampai 900. normal sama dengan 400 dan bold sama dengan 700. Kalau font yang dimuat tidak punya ketebalan 600, browser akan memakai ketebalan terdekat atau memalsukan tebalnya, dan hasilnya sering kurang rapi.
Warna: hex, rgb, hsl
Satu warna biru bisa ditulis dengan empat cara:
- Hex
#rrggbb: tiga pasang angka heksadesimal 00 sampai ff untuk merah, hijau, biru. Bentuk pendek#fffsama dengan#ffffff. - rgb(): tiga angka 0 sampai 255. rgba() menambah alpha 0 sampai 1 untuk transparansi.
- hsl(): hue (sudut 0 sampai 360 di roda warna), saturation, lightness. Enaknya, kamu bisa membuat varian lebih terang cukup dengan menaikkan lightness.
Saat kamu cek di DevTools atau getComputedStyle, browser menampilkan warna sebagai rgb(...) apa pun format yang kamu tulis.
opacity vs alpha
Ini sering tertukar. opacity: 0.5 membuat seluruh elemen setengah transparan: background, border, teks, bahkan semua anaknya. Sedangkan alpha di rgba() hanya memengaruhi satu properti tempat warna itu dipakai.
Hasilnya: .kartu-a terlihat pudar termasuk tulisannya, sedangkan .kartu-b punya background tembus pandang tapi teksnya tetap tajam. Untuk overlay di atas foto, hampir selalu kamu butuh yang kedua.
Background: gradient dan cover
Gradient di CSS dihitung sebagai gambar, jadi dipasang di background atau background-image, bukan background-color.
linear-gradient membuat transisi warna lurus. 135deg artinya arah ke kanan bawah. radial-gradient memancar dari tengah keluar, cocok untuk efek sorotan.
Untuk foto latar, pasangan wajibnya:
cover memperbesar gambar sampai menutupi seluruh kotak tanpa gepeng, walau sebagian tepinya terpotong. contain kebalikannya: gambar utuh terlihat, tapi bisa menyisakan ruang kosong.
border-radius, box-shadow, text-shadow
border-radiusmembulatkan sudut. Satu nilai untuk semua sudut, empat nilai untuk kiri atas, kanan atas, kanan bawah, kiri bawah.50%pada kotak persegi menghasilkan lingkaran.box-shadowurutannya: geser x, geser y, blur, spread (opsional), warna. Tambahkaninsetuntuk bayangan ke dalam, dan pisahkan dengan koma untuk menumpuk beberapa bayangan.text-shadowmirip, tapi tanpa spread dan inset. Pakai tipis-tipis saja, bayangan tebal membuat teks susah dibaca.
Kesalahan umum
- Lupa generic family di akhir
font-family, sehingga saat web font gagal dimuat, teks jatuh ke font default yang tidak cocok. - Memakai
opacityuntuk membuat background transparan, lalu bingung kenapa teksnya ikut pudar. - Menulis gradient di
background-color. Gradient adalah gambar, jadi tidak berlaku di properti itu. line-height: 24pxdi body, lalu judul 40px di dalamnya bertumpuk karena tinggi barisnya tetap 24px.- Memuat sembilan ketebalan dari Google Fonts padahal hanya dua yang dipakai, sehingga halaman lambat.
Rangkuman
font-familyadalah daftar dengan fallback, selalu akhiri dengan generic family.- Web font dimuat lewat
@font-faceatau tag<link>Google Fonts, pakaifont-display: swap. remmengikuti root dan menghormati setelan pengguna,emmengikuti induk dan bisa berlipat.line-heighttanpa satuan, 1.5 sampai 1.7 untuk paragraf.- Warna bisa hex, rgb/rgba, atau hsl. Alpha hanya memengaruhi satu properti,
opacityseluruh elemen. - Gradient adalah background image,
covermenutupi kotak tanpa gepeng. border-radius,box-shadow, dantext-shadowmemberi kesan modern bila dipakai secukupnya.
Slide 18 sampai 20 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: Kartu profil bergaya
Percantik kartu profil dengan tipografi, warna, dan dekorasi:
.kartu:font-familyberisi"Poppins",Arial, dan diakhirisans-serif..kartu__nama:font-size: 2remdanfont-weight: 700..kartu__bio:line-height: 1.6tanpa satuan..kartu: backgroundlinear-gradient(135deg, #e34f26, #1572b6)..kartu:border-radius: 16pxdanbox-shadow: 0 8px 20px rgba(0, 0, 0, 0.25)..kartu__label: backgroundrgba(21, 114, 182, 0.5), tanpa mengubahopacity.
Cek pemahaman
1Root `html` memakai ukuran default 16px. Berapa font-size `h2` hasil hitung browser?
<style> section { font-size: 20px; } h2 { font-size: 1.5rem; } </style> <section> <h2>Judul</h2> </section>2`opacity: 0.5` pada sebuah kartu juga membuat teks di dalam kartu ikut setengah transparan.
3Nilai mana yang paling tepat diletakkan di akhir daftar `font-family` sebagai cadangan terakhir?
4Apa efek `background-size: cover` pada gambar latar?
