CSS Typography Variables Pseudo Classes Pseudo Elements
Selesai membaca dokumentasi ini?
Kembali ke rujukan utama CSS untuk melanjutkan topik lainnya.
Kembali ke rujukan utama CSS untuk melanjutkan topik lainnya.
Topik ini membahas tiga lapis styling yang sering dipakai bareng di CSS:
Kalau dipakai dengan benar, tiga hal ini membantu CSS jadi lebih konsisten, lebih mudah dirawat, dan lebih gampang diubah tanpa bongkar banyak file.
Banyak UI yang terlihat “rapi” di awal, tapi mulai berantakan saat isi bertambah, komponen dipakai ulang, atau tema berubah. Biasanya masalahnya bukan pada satu properti CSS saja, melainkan pada fondasi styling yang belum dipisah dengan jelas.
Contoh gejala yang sering muncul:
Dokumen ini membahas kapan pakai font sizing, line-height, spacing, custom properties, dan pseudo-selector supaya styling tidak bergantung pada tebakan.
Typography di CSS bukan cuma soal memilih font-family. Yang lebih penting adalah bagaimana teks dibaca di layout nyata.
Komponen utama yang biasanya diatur:
font-sizeline-heightletter-spacingfont-weightmax-width atau ukuran container teksGunakan font-size untuk menentukan hierarki visual dan skala bacaan.
Pakai ukuran font ketika:
Contoh prinsipnya:
h1 {
font-size: 2rem;
}
h2 {
font-size: 1.5rem;
}
body {
font-size: 1rem;
}
small,
.helper-text {
font-size: 0.875rem;
}Gunakan line-height untuk mengatur jarak vertikal antar baris teks.
Pakai line-height saat:
Patokan umum yang sehat:
h1,
h2 {
line-height: 1.1;
}
p {
line-height: 1.6;
}
.helper-text {
line-height: 1.4;
}Spacing di sini mencakup jarak antar elemen teks, bukan sekadar margin acak. Tujuannya untuk menjaga ritme baca.
Gunakan spacing ketika:
Prinsip yang aman:
.article h2 {
margin-top: 2rem;
margin-bottom: 0.75rem;
}
.article p {
margin-bottom: 1rem;
}font-size dipakai untuk hierarki dan skala.line-height dipakai untuk keterbacaan.max-width sering sama pentingnya dengan ukuran font, karena baris yang terlalu panjang bikin teks capek dibaca.CSS custom properties atau --variables dipakai untuk menyimpan nilai yang ingin dipakai ulang.
Contoh sederhana:
:root {
--font-size-body: 1rem;
--line-height-body: 1.6;
--spacing-2: 0.5rem;
--spacing-4: 1rem;
--color-text: #1f2937;
}Lalu dipakai seperti ini:
body {
font-size: var(--font-size-body);
line-height: var(--line-height-body);
color: var(--color-text);
}
.card {
padding: var(--spacing-4);
}Pakai custom properties saat:
Kalau nilainya cuma dipakai sekali dan tidak akan berubah, custom property tidak selalu wajib. Tapi kalau nilainya menyangkut token inti, custom property biasanya lebih sehat.
Di proyek yang rapi, custom properties biasanya dibangun sebagai dependency token. Artinya, token dasar dipakai untuk membentuk token semantik.
Contoh alurnya:
Penjelasan alurnya:
8px, 16px, atau warna dasar.--color-text-primary.Pola ini lebih enak dirawat daripada menanam nilai langsung di banyak selector.
:root {
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--text-xs: 0.75rem;
--text-sm:
Pseudo-class dipakai untuk memberi style berdasarkan keadaan elemen atau posisi elemen di dalam struktur dokumen.
Contoh umum:
:hover:focus:focus-visible:active:disabled:checked:first-child:last-child:nth-child()Pseudo-class penting untuk state styling, bukan dekorasi semata.
Pakai pseudo-class saat:
Contoh:
.button:hover {
background: #111827;
}
.button:focus-visible {
outline: 2px solid #2563eb;
outline-offset: 2px;
}
input:disabled {
opacity: 0.5
Gunakan pseudo-class ketika state itu memang bagian dari perilaku elemen.
Contoh kasus:
Pseudo-class jangan dipakai untuk mengganti logika yang seharusnya dikelola oleh class yang eksplisit. Kalau state-nya berasal dari aplikasi, kadang class .is-active atau .is-open lebih jelas daripada bergantung pada struktur DOM semata.
Pseudo-element dipakai untuk men-styling bagian tertentu dari elemen, atau menambahkan layer visual yang tidak benar-benar ada di markup.
Contoh umum:
::before::after::first-letter::first-line::selection::placeholderPseudo-element cocok untuk:
Contoh:
.card-title::before {
content: "";
display: inline-block;
width: 0.5rem;
height: 0.5rem;
margin-right: 0.5rem;
border-radius: 999px
Gunakan pseudo-element saat kamu butuh lapisan visual tambahan, tetapi tidak ingin menambah elemen HTML hanya untuk dekorasi.
Contoh yang masuk akal:
Jangan pakai pseudo-element untuk konten yang penting secara semantik. Kalau informasinya harus dibaca screen reader atau diproses sebagai isi utama, taruh di HTML, bukan di content.
Urutan berpikir yang lebih aman biasanya begini:
font-size, line-height, dan spacing.:root {
--font-body: 1rem;
--font-title: 1.5rem;
--leading-body: 1.6;
--leading-title: 1.2;
line-height sering lebih penting daripada font size kalau teks terasa sempit atau padat.font-size besar tapi line-height terlalu rapat::before atau ::after untuk konten penting:hover untuk semua interaksi, padahal keyboard user juga perlu fokus yang terlihat--nama-variabel.