CSS (Cascading Style Sheets) adalah bahasa yang mengatur tampilan halaman web: warna, tipografi, layout, animasi, hingga penyesuaian terhadap berbagai perangkat. Pada Course ini, kita akan membangun pemahaman yang berlapis: dimulai dari cara kerja CSS, selector dan cascade, box model, lalu naik ke layout modern seperti flexbox dan grid, responsive design, hingga arsitektur CSS dan design system.
Setiap konsep disertai contoh kode yang dapat diunduh dan diuji. Demo yang menyertai chapter memuat penanda uji otomatis sehingga perilaku yang dijelaskan telah diverifikasi di browser. Daftar isi lengkap dan status pengerjaan dapat dipantau di BACKLOG_CSS.md.
Bab 1 Pengenalan CSS
Kenali CSS sebagai bahasa yang mengatur tampilan halaman web dan lihat perannya pada contoh nyata.
Buka → # Hubungan HTML dan CSSPahami pembagian tugas antara HTML dan CSS, tiga cara menyisipkan CSS, dan alasan halaman tetap terbaca tanpa CSS.
Buka → # Bagaimana Browser Menerapkan CSSIkuti alur browser mengubah HTML dan CSS menjadi tampilan: DOM, CSSOM, pencocokan selector, computed style, hingga paint.
Buka → # Sintaks CSSKuasai anatomi aturan CSS: selector, deklarasi, komentar, whitespace, shorthand, dan perilaku parser terhadap deklarasi tidak valid.
Buka → # CSS Specifications dan Browser SupportKenali peran CSS Working Group, status spesifikasi, cara membaca Baseline dan caniuse, serta pola @supports untuk progressive enhancement.
Buka →Bab 2 Persiapan Lingkungan
Pahami cara menghubungkan berkas CSS ke HTML melalui tag link, membedah jalur relatif dan absolut, serta memilih antara CSS eksternal, internal, dan inline.
Buka → # Browser DevToolsGunakan browser DevTools untuk membuka panel Elements dan Styles, menginspeksi elemen, menonaktifkan properti, serta mengenal device mode.
Buka → # Membaca Computed StylesBedah perbedaan declared, computed, dan used value serta cara membaca panel Computed dan urutan aturan di panel Styles.
Buka → # Debugging CSSTerapkan alur debugging CSS yang sistematis: reproduksi, isolasi, hipotesis, dan uji, disertai teknik praktis di panel Styles.
Buka → # CSS Validation dan FormattingValidasi CSS dengan W3C CSS Validator, kenali peran linter seperti stylelint, dan bangun kebiasaan formatting yang konsisten.
Buka →Bab 3 Selectors
Kenali type selector, cara paling dasar menunjuk elemen melalui nama tag HTML-nya.
Buka → # Class dan ID SelectorGunakan class untuk mengelompokkan banyak elemen dan ID untuk menunjuk satu elemen khusus, lengkap dengan panduan memilih keduanya.
Buka → # Attribute SelectorMenunjuk elemen berdasarkan atribut HTML-nya, dari pencocokan persis hingga pola awalan, akhiran, dan potongan nilai.
Buka → # CombinatorsRangkai beberapa selector untuk menunjuk elemen berdasarkan hubungannya di pohon DOM: descendant, child, dan sibling.
Buka → # Pseudo-classesTunjuk elemen berdasarkan state, posisi dalam struktur, dan kondisi form dengan pseudo-class, tanpa menambah class ke HTML.
Buka → # Pseudo-elementsHiasi elemen dengan ::before, ::after, dan pseudo-element lain untuk menggayakan bagian elemen yang tak bisa ditunjuk selector biasa.
Buka → # Selector ListsTulis beberapa selector dalam satu aturan dengan koma, pahami list yang memafkan dan yang tidak, serta kenali :is() sebagai solusinya.
Buka → # SpecificityHitung specificity tiga komponen (ID, class, type) untuk memahami aturan CSS mana yang menang saat beberapa selector menunjuk elemen yang sama.
Buka → # Selector Best PracticesSusun selector yang rendah specificity, tahan perubahan HTML, dan tetap mudah dibaca seiring proyek membesar.
Buka →Bab 4 Cascade dan Inheritance
Kenali tiga origin gaya pada CSS — user-agent, user, dan author — beserta urutan prioritas yang dipakai browser menyelesaikan konflik di antara mereka.
Buka → # Specificity dan Source OrderPelajari dua penentu berikutnya dalam cascade — specificity dan source order — yang memutuskan pemenang ketika beberapa deklarasi author menunjuk elemen yang sama.
Buka → # InheritancePahami mekanisme inheritance CSS: properti mana yang mengalir ke turunan, mana yang tidak, dan bagaimana deklarasi langsung mengalahkan nilai warisan.
Buka → # Initial, Inherit, dan UnsetGunakan kata kunci CSS initial, inherit, dan unset untuk mengontrol nilai sebuah properti secara eksplisit, termasuk perilaku shorthand all.
Buka → # Revert dan Revert-layerGunakan kata kunci revert dan revert-layer untuk mengembalikan properti ke nilai dari origin sebelumnya atau dari layer sebelumnya.
Buka → # Cascade LayersKelola prioritas stylesheet secara eksplisit dengan @layer: urutan deklarasi layer, kedudukan gaya unlayered, dan pembalikan urutan oleh !important.
Buka → # Mengatasi Conflicting StylesIkuti prosedur diagnosis konflik gaya CSS: memeriksa origin, specificity, source order, inheritance, dan cascade layers hingga konflik terselesaikan.
Buka →Bab 5 Values dan Units
Kenali berbagai notasi nilai warna CSS, dari named colors dan hex hingga rgb(), hsl(), dan oklch().
Buka → # LengthsPelajari cara menuliskan nilai panjang di CSS beserta konversi antara px, em, dan rem.
Buka → # Absolute dan Relative UnitsBandingkan kelompok satuan absolut (px, pt, cm, in) dengan satuan relatif (em, rem, ch, ex) dan ketahui kapan masing-masing tepat dipakai.
Buka → # PercentagesPahami nilai persentase di CSS beserta rujukan perhitungannya: lebar, tinggi, padding, dan font-size.
Buka → # Viewport UnitsGunakan satuan viewport (vw, vh, vmin, vmax) serta varian dinamisnya (dvh, svh, lvh) untuk mengukur elemen relatif terhadap jendela browser.
Buka → # Container Query UnitsKenali satuan container query (cqw, cqi, cqh, cqb, cqmin, cqmax) yang mengukur elemen relatif terhadap query container terdekatnya.
Buka → # FunctionsKenali function bawaan CSS — dari rgb(), hsl(), dan url() hingga calc(), min(), max(), clamp(), dan var() — serta cara menggabungkannya.
Buka → # Custom PropertiesDefinisikan variabel CSS sendiri dengan custom properties, lengkap dengan nilai cadangan, pewarisan, dan perilaku saat nilai tidak valid.
Buka → # calc(), min(), max(), dan clamp()Hitung nilai CSS secara langsung dengan calc(), dan kendalikan batas atas-bawahnya menggunakan min(), max(), serta clamp().
Buka → # Logical PropertiesGunakan logical properties seperti margin-inline-start, padding-block, dan inline-size untuk menata elemen berdasarkan alur teks, bukan sisi fisik.
Buka →Bab 6 Box Model
Bedah anatomi kotak CSS — content, padding, border, dan margin — beserta cara menghitung ukuran total elemen di layar.
Buka → # Box SizingPahami perbedaan box-sizing content-box dan border-box serta alasan reset universal border-box menjadi praktik umum.
Buka → # Margin CollapsePahami kapan margin atas dan bawah bergabung menjadi satu jarak, tiga kasus margin collapse, dan kondisi yang menghentikannya.
Buka → # Width dan HeightAtur ukuran elemen dengan width dan height, pahami perilaku nilai auto, serta kapan deklarasi ukuran diabaikan.
Buka → # min-width, max-width, min-height, dan max-heightBatasi ukuran elemen dengan min-width, max-width, min-height, dan max-height beserta urutan penerapannya terhadap width dan height.
Buka → # OverflowAtur nasib konten yang meluber dari kotaknya dengan nilai visible, hidden, scroll, auto, dan clip beserta pengaturan per sumbu.
Buka → # Box Model DebuggingGunakan DevTools — panel Computed dan diagram box model — serta teknik outline sementara untuk mendiagnosis kotak yang berperilaku tidak sesuai harapan.
Buka →Bab 7 Typography
Pilih keluarga huruf untuk halaman web dengan font-family, kenali generic families, dan bangun fallback stack yang aman.
Buka → # Font Size dan Font WeightAtur ukuran huruf dengan px, rem, em, dan keyword, lalu kontrol ketebalan melalui skala font-weight 100 hingga 900.
Buka → # Line HeightAtur jarak antar baris teks dengan line-height, pahami tiga bentuk nilainya, dan pahami mengapa nilai unitless paling disarankan.
Buka → # Text AlignmentSejajarkan teks secara horizontal dengan text-align, pelajari nilai start dan end, serta text-align-last untuk baris terakhir.
Buka → # Text DecorationTambahkan dan hias garis pada teks dengan text-decoration: line, color, style, dan thickness.
Buka → # Letter Spacing dan Word SpacingAtur jarak antarhuruf dengan letter-spacing dan jarak antarkata dengan word-spacing, termasuk perilaku satuan em-nya.
Buka → # Web FontsBawa font pilihan sendiri ke halaman web dengan @font-face, kenali font-display, dan pelajari strategi pemuatannya.
Buka → # Variable FontsKenali variable fonts yang menyimpan banyak bobot dalam satu file, dan kendalikan sumbunya lewat font-weight, font-stretch, serta font-variation-settings.
Buka → # Text WrappingKendalikan bagaimana teks melipat dengan white-space, overflow-wrap, word-break, hyphens, dan text-wrap: balance.
Buka → # Responsive TypographySusun tipografi yang menyesuaikan ukuran layar dengan clamp(), skala tipografi berbasis rem, dan penghormatan atas preferensi pengguna.
Buka →Bab 8 Colors dan Backgrounds
Kenali berbagai cara menulis nilai warna di CSS: named colors, hex, rgb(), hsl(), hingga oklch().
Buka → # Background ColorBerikan warna latar pada elemen dan atur luas area catnya dengan background-clip.
Buka → # Background ImagesTempelkan gambar pada latar elemen, lalu atur ukuran, pengulangan, dan posisinya.
Buka → # GradientsBuat latar bertingkat dengan linear-gradient, radial-gradient, dan conic-gradient.
Buka → # Multiple BackgroundsTumpuk beberapa latar pada satu elemen, pahami urutan layer, dan kendalikan shorthand background.
Buka → # OpacityAtur transparansi seluruh elemen dengan opacity dan bedakan dengan kanal alpha pada warna.
Buka → # BlendingCampur warna elemen dengan latarnya menggunakan mix-blend-mode dan background-blend-mode.
Buka → # Color ContrastJaga keterbacaan teks dengan menghitung dan menguji rasio kontras WCAG.
Buka →Bab 9 Borders dan Effects
Gambar garis tepi pada elemen dengan border: lebar, gaya, warna, shorthand, dan pengaturan per sisi.
Buka → # Border RadiusMelengkungkan sudut elemen dengan border-radius: satu nilai, per sudut, lingkaran, pil, hingga elips.
Buka → # OutlinesMenggambar garis di luar tepi elemen dengan outline untuk penanda fokus yang ramah aksesibilitas.
Buka → # Box ShadowMemberi kedalaman pada elemen dengan box-shadow: offset, blur, spread, bayangan inset, dan bayangan bertingkat.
Buka → # Text ShadowMenambahkan bayangan pada teks dengan text-shadow untuk keterbacaan di latar ramai dan untuk efek gaya.
Buka → # FiltersMenerapkan efek grafis seperti blur, brightness, dan drop-shadow pada elemen dengan properti filter.
Buka → # Visual Effects Best PracticesMenakar penggunaan efek visual: batas wajar, performa animasi, token konsisten, dan aksesibilitas.
Buka →Bab 10 Display dan Flow
Pahami normal flow, alur tata letak bawaan browser tempat elemen block bertumpuk vertikal dan teks inline mengalir horizontal.
Buka → # Block dan InlineBandingkan perilaku elemen block dan inline terkait lebar, tinggi, margin, serta cara keduanya menempati baris.
Buka → # Inline-blockKenali inline-block, tipe kotak hibrida yang mengikuti aliran teks namun menerima width, height, margin, dan padding secara penuh.
Buka → # Display NoneGunakan display: none untuk menyingkirkan elemen sepenuhnya dari render tree, tanpa jejak ruang, dan pahami dampaknya pada aksesibilitas.
Buka → # VisibilityGunakan visibility: hidden untuk menyembunyikan elemen tanpa menggeser layout, pulihkan anak dengan visible, dan bandingkan tiga cara menyembunyikan.
Buka → # Replaced ElementsKenali replaced elements seperti img dan input yang isinya berasal dari luar dokumen, lengkap dengan ukuran intrinsik dan rasio aspeknya.
Buka → # Formatting ContextsPahami block formatting context, cara membentuknya dengan flow-root, serta kegunaannya menghentikan margin collapse dan menampung float.
Buka →Bab 11 Positioning
Kenali dua nilai position paling dasar, static dan relative, beserta cara properti offset menggeser elemen dari posisi normalnya.
Buka → # Absolute PositioningPahami cara position absolute mengeluarkan elemen dari alur dokumen dan menempatkannya berpatokan pada ancestor positioned terdekat.
Buka → # Fixed PositioningPelajari position fixed yang berpatokan pada viewport, tidak ikut bergulir, beserta jebakan transform pada ancestor.
Buka → # Sticky PositioningGunakan position sticky untuk header yang menempel saat digulir dan pahami syarat inset serta batas parent yang mengikatnya.
Buka → # Inset PropertiesKuasai properti offset top, right, bottom, left, shorthand inset, serta inset logis untuk penempatan elemen positioned.
Buka → # Stacking ContextPahami stacking context: lingkup urutan menggambar elemen, daftar properti pembentuknya, dan cara men-debug urutan lapisan.
Buka → # Z-indexAtur urutan tumpukan elemen dengan z-index: syarat berlakunya, perilaku nilai negatif, dan praktik penataan yang sehat.
Buka → # Positioning PatternsKumpulkan resep positioning yang siap pakai: badge, tooltip, overlay modal, header sticky, dan skip link.
Buka →Bab 12 Flexbox
Kenali dua peran utama flexbox: flex container yang mengatur tata letak dan flex items yang tersusun di dalamnya.
Buka → # Main Axis dan Cross AxisPahami dua sumbu flexbox — main axis dan cross axis — beserta arah keduanya pada baris dan kolom.
Buka → # Flex DirectionAtur arah penyusunan flex items dengan flex-direction: row, row-reverse, column, dan column-reverse.
Buka → # Justify ContentDistribusikan ruang kosong pada main axis dengan justify-content, dari flex-start hingga space-evenly.
Buka → # Align Items dan Align SelfSejajarkan flex items pada cross axis dengan align-items dan timpa satu item dengan align-self.
Buka → # Flex WrapIzinkan flex items pindah baris dengan flex-wrap dan pahami perilaku default nowrap yang menyusutkan items.
Buka → # Flex Grow, Flex Shrink, dan Flex BasisKuasai flex-grow, flex-shrink, dan flex-basis untuk mengatur bagaimana flex items mengambil dan melepas ruang di main axis.
Buka → # GapBerikan jarak antar flex items dengan row-gap, column-gap, dan shorthand gap — tanpa margin tambahan.
Buka → # Flexbox Layout PatternsTerapkan pola layout flexbox yang lazim: navbar, perfect centering, media object, kartu dengan footer terdorong, dan sticky footer.
Buka →Bab 13 Grid
Kenali dua peran utama dalam CSS Grid: container yang membentuk kisi dan item yang mengisinya, termasuk baris implicit yang terbentuk otomatis.
Buka → # Grid Template Columns dan RowsTentukan struktur kisi secara eksplisit dengan grid-template-columns dan grid-template-rows, serta pahami batas antara track eksplisit dan implicit.
Buka → # Fr UnitGunakan satuan fr untuk mendistribusikan ruang bebas grid secara proporsional dan pahami urutan perhitungannya.
Buka → # Repeat dan MinmaxReringkas daftar track dengan repeat() dan kendalikan batas ukuran track dengan minmax(), termasuk pola auto-fill yang responsif.
Buka → # Grid Lines dan Grid AreasTempatkan item secara presisi menggunakan nomor grid line, nama garis, serta grid-template-areas dengan grid-area.
Buka → # Auto PlacementPahami algoritma penempatan otomatis grid: urutan pengisian sel, grid-auto-flow, serta perbedaan mode sparse dan dense.
Buka → # Auto-fit dan Auto-fillBandingkan kata kunci auto-fill dan auto-fit pada repeat() dan pelajari kapan track kosong dipertahankan atau di-collapse.
Buka → # Alignment dan GapAtur perataan item dan track pada dua sumbu dengan justify-items, align-items, justify-content, dan align-content, serta beri jarak lewat gap.
Buka → # SubgridWarisi track grid induk ke dalam grid anak dengan subgrid agar baris antar kartu sejajar sempurna.
Buka → # Grid Layout PatternsTerapkan resep grid yang teruji: holy grail dua belas kolom, galeri kartu responsif, dan dashboard dengan area bernama.
Buka →Bab 14 Responsive Design
Pahami tiga bahan dasar responsive design — fluid grid, flexible images, dan media queries — serta peran meta viewport.
Buka → # Mobile FirstRancang gaya dasar untuk ponsel terlebih dahulu, lalu tambahkan enhancement dengan min-width untuk layar yang lebih besar.
Buka → # Media QueriesKuasai sintaks @media: media type, media feature, serta penggabungan kondisi dengan and, not, dan koma.
Buka → # BreakpointsPilih titik perubahan layout berdasarkan kebutuhan konten, kenali skala umum, dan hindari media query yang berlebihan.
Buka → # Responsive ImagesJaga gambar tetap dalam bingkai dengan max-width dan height auto, lalu kenali srcset, sizes, dan picture untuk kasus lanjutan.
Buka → # Responsive TypographyAtur ukuran teks yang menyesuaikan viewport dengan clamp(), jaga skala rem, dan sesuaikan line-height antar ukuran layar.
Buka → # Responsive NavigationUbah navbar desktop menjadi menu ponsel dengan checkbox hack atau scroll horizontal, lengkap dengan trade-off dan catatan aksesibilitasnya.
Buka → # Responsive LayoutsSusun layout halaman utuh yang responsif: sidebar grid yang berpindah kolom dan card grid auto-fit yang mengatur dirinya sendiri.
Buka → # Testing Berbagai ViewportUji halaman responsif secara sistematis: device mode DevTools, mode responsif Firefox, alat online, dan checklist uji manual.
Buka →Bab 15 Container Queries
Kenali properti container-type dengan nilai inline-size dan size beserta implikasi containment-nya, plus container-name untuk menandai container tertentu.
Buka → # Container Size QueriesGunakan aturan @container dengan kondisi ukuran untuk mengubah gaya komponen berdasarkan lebar wadahnya, bukan lebar viewport.
Buka → # Container Style Queries OverviewPelajari style query @container style() yang menyesuaikan komponen berdasarkan nilai custom property pada wadahnya, lengkap dengan pola progressive enhancement.
Buka → # Container Query UnitsGunakan enam satuan container query (cqw, cqi, cqh, cqb, cqmin, cqmax) agar ukuran elemen mengikuti container terdekatnya, dengan pemahaman atas fallback viewport-nya.
Buka → # Component-based Responsive DesignBangun komponen yang responsif terhadap ruangnya sendiri dengan membandingkan pendekatan media query dan container query, lalu praktikkan pola kartu portabel.
Buka →Bab 16 Tables dan Forms
Rapikan tabel data dengan border-collapse, zebra rows berbasis nth-child, caption, dan header sticky saat tabel digulir.
Buka → # Styling InputsAtur tampilan input, select, dan textarea dengan padding, border, dan font: inherit agar kontrol form konsisten dengan desain halaman.
Buka → # Styling ButtonsRestyle elemen button dengan font: inherit, varian warna lewat class, ukuran tap minimal 44px, dan umpan balik hover yang halus.
Buka → # Focus StatesRancang indikator fokus yang terlihat jelas bagi pengguna keyboard dengan :focus, :focus-visible, dan :focus-within beserta outline kustom.
Buka → # Validation StatesTampilkan status validasi form dengan :valid, :invalid, :required, dan :disabled, serta kenali :user-valid/:user-invalid yang lebih ramah pengguna.
Buka → # Accent ColorWarnai kontrol form native seperti checkbox, radio, range, dan progress dengan satu properti accent-color.
Buka → # AppearanceHapus gaya native kontrol form dengan appearance: none, lalu bangun tampilan kustom untuk select dan checkbox tanpa mengabaikan semantik HTML.
Buka → # Accessible Form DesignSusun form yang accessible dengan label eksplisit, fieldset/legend, aria-describedby untuk hint dan galat, serta target sentuh minimal 44px.
Buka →Bab 17 Pseudo-classes dan Interaksi
Berikan umpan balik visual saat kursor melayang di atas elemen dan saat elemen ditekan dengan pseudo-class :hover dan :active.
Buka → # Focus dan Focus-visibleBedakan :focus dan :focus-visible agar indikator fokus muncul tepat bagi pengguna keyboard tanpa mengganggu pengguna mouse.
Buka → # Focus-withinSorot kartu atau panel form secara otomatis ketika salah satu isian di dalamnya menerima fokus dengan :focus-within.
Buka → # Checked dan DisabledGaya kontrol form berdasarkan keadaannya: kotak terpilih dengan :checked serta isian terkunci dan aktif dengan :disabled dan :enabled.
Buka → # Required dan InvalidTandai isian wajib dan bermasalah dengan :required, :valid, dan :invalid, lalu perbaiki pengalamannya dengan :user-valid dan :user-invalid.
Buka → # :targetSorot bagian halaman yang dituju fragment URL dengan pseudo-class :target, lengkap dengan pola buka dan tutup.
Buka → # :has()Pilih elemen berdasarkan isi atau saudaranya dengan selector relasional :has(), dari kartu bergambar hingga form dengan isian bermasalah.
Buka → # prefers-reduced-motionHormati preferensi gerakan pengguna dengan media query prefers-reduced-motion melalui dua pola pembungkusan animasi.
Buka →Bab 18 Transitions dan Animations
Pelajari empat properti penyusun transisi CSS beserta shorthand transition dan daftar properti yang dapat dianimasikan.
Buka → # Transition TimingKenali kurva timing function bawaan, cubic-bezier(), dan steps() untuk mengatur ritme transisi sesuai konteks.
Buka → # TransformGeser, putar, perbesar, dan miringkan elemen dengan transform, pahami hasil matrix computed, dan urutan fungsi yang menentukan hasil.
Buka → # Keyframe AnimationsGambarkan perjalanan animasi bertahap dengan @keyframes, mulai dari from/to hingga pemberhentian persen yang lebih kaya.
Buka → # Animation PropertiesKuasai delapan properti longhand animation beserta urutan nilai shorthand dan cara menghentikan serta mengisi animasi.
Buka → # Animation PerformancePahami alur render browser, pilih properti murah seperti transform dan opacity, dan gunakan will-change secara hemat.
Buka → # Motion AccessibilityHormati preferensi gerak pengguna dengan prefers-reduced-motion dan kenali @starting-style untuk kemunculan halus.
Buka → # Interaction FeedbackTerapkan pola umpan balik interaksi: tombol hover-active-focus, skeleton loading, toast dengan @starting-style, dan form.
Buka →Bab 19 Transforms dan 3D
Kuasai tiga fungsi transform yang paling sering dipakai: menggeser, memutar, dan menskalakan elemen tanpa mengganggu layout.
Buka → # Transform OriginAtur titik poros transform dengan transform-origin dan pahami mengapa rotasi yang sama dapat menghasilkan posisi akhir yang berbeda.
Buka → # Transform FunctionsJelajahi keluarga fungsi transform 2D, pelajari cara browser menyerialisasikannya menjadi matrix(), dan buktikan bahwa urutan fungsi mengubah hasil.
Buka → # PerspectiveBeri kedalaman pada transform 3D dengan properti perspective dan fungsi perspective(), lalu pilih nilai yang pas untuk efek yang diinginkan.
Buka → # 3D TransformsPutar elemen pada sumbu X, Y, dan Z dengan rotateX, rotateY, translateZ, transform-style: preserve-3d, serta backface-visibility untuk kartu flip.
Buka → # Transform Use CasesTerapkan transform pada pola antarmuka yang lazim: kartu lift, badge miring, pemusatan absolut, kartu flip, dan lapisan parallax.
Buka →Bab 20 Modern CSS
Tulis selector anak dan varian di dalam aturan induknya dengan nesting bawaan CSS, lengkap dengan tanda & untuk konteks eksplisit.
Buka → # Custom Properties dan ThemingBangun tema terang dan gelap dengan custom properties pada :root, lalu tukar seluruh palet lewat satu atribut data-tema.
Buka → # Cascade LayersOrganisasi stylesheet proyek nyata dengan @layer — reset, base, components di dalam layer, utilities unlayered sebagai lapisan penimpa.
Buka → # :is(), :where(), dan :has()Gabungkan :is() untuk pengelompokan ringkas, :where() untuk gaya nol specificity, dan :has() untuk memilih elemen berdasarkan isinya.
Buka → # Aspect RatioKunci rasio lebar-terhadap-tinggi sebuah kotak dengan properti aspect-ratio sehingga tata letak stabil sebelum konten maupun gambar selesai dimuat.
Buka → # Object Fit dan Object PositionKendalikan cara gambar mengisi kotaknya dengan object-fit — fill, cover, contain, none — dan arahkan fokusnya dengan object-position.
Buka → # Scroll SnapKunci posisi gulir ke titik-titik tertentu dengan scroll-snap-type pada container dan scroll-snap-align pada item, tanpa JavaScript.
Buka → # Scroll-driven AnimationsJalankan animasi yang digerakkan posisi gulir dengan animation-timeline: scroll() dan view(), tanpa event scroll dan tanpa JavaScript.
Buka → # Anchor PositioningTempatkan tooltip dan popover pada elemen pemicunya dengan anchor positioning — anchor-name, position-anchor, dan position-area.
Buka → # Progressive EnhancementSusun stylesheet berlapis dengan pendekatan progressive enhancement — gaya dasar yang selalu aktif, lalu peningkatan di dalam @supports.
Buka →Bab 21 Layout Patterns
Bangun wadah konten terpusat dengan max-width, margin auto, dan padding-inline yang tetap aman di semua ukuran layar.
Buka → # Two-column LayoutSusun dua area berdampingan dengan proporsi fr pada grid, lengkap dengan perilaku collapse ke satu kolom di layar sempit.
Buka → # Three-column LayoutBagi halaman menjadi tiga kolom sama lebar dengan repeat(3, 1fr) dan kenali variasi holy grail yang mengapit konten dengan dua aside.
Buka → # Card GridBangun galeri kartu responsif dengan repeat(auto-fit, minmax(220px, 1fr)) yang menyesuaikan jumlah kolom tanpa media query.
Buka → # Sidebar LayoutBangun layout dokumentasi dengan sidebar navigasi tetap lebar 260px dan panel yang menempel (sticky) saat halaman digulir.
Buka → # Sticky HeaderBuat header navigasi yang tetap terlihat saat halaman digulir dengan position: sticky dan efek kaca berlapis backdrop-filter.
Buka → # Footer LayoutDorong footer selalu menempel di dasar viewport dengan flexbox, min-height 100dvh, dan flex: 1 pada area konten utama.
Buka → # Dashboard LayoutRakit kerangka dashboard dengan grid areas bernama: header penuh, sidebar 240px, dan area konten yang menggulir sendiri.
Buka → # Page Layout CompositionGabungkan seluruh resep section ini menjadi satu halaman utuh: header sticky, wadah terpusat, dua kolom, dan footer di dasar viewport.
Buka →Bab 22 CSS Architecture
Susun stylesheet proyek ke dalam folder per concern, atur urutan import, dan terapkan konvensi nama file yang konsisten.
Buka → # Naming ConventionsBeri nama class secara bermakna, konsisten, dan mudah dicari dengan pola kebab-case serta prefiks peran yang jelas.
Buka → # Component-based CSSSusun CSS sebagai kumpulan komponen mandiri yang kohesif, bervariasi lewat modifier, dan dapat dikomposisi ulang.
Buka → # BEMTerapkan konvensi BEM (Block, Element, Modifier) untuk menamai komponen dengan flat selectors yang bebas konflik.
Buka → # Utility ClassesKenali utility classes — satu class untuk satu tugas — beserta trade-off-nya dan situasi ketika pendekatan ini paling cocok.
Buka → # Design TokensSimpan keputusan desain sebagai design tokens berupa custom properties bernama semantik dan dokumentasinya sebagai kontrak tim.
Buka → # CSS Custom PropertiesAtur custom properties sebagai arsitektur berlapis: token global, variabel lokal komponen dengan fallback, dan pendaftaran tipe via @property.
Buka → # Avoiding Specificity ConflictsCegah konflik specificity dengan selector satu class, pemisahan prioritas lewat @layer, dan disiplin menghindari !important.
Buka → # Maintainable CSSRangkum kebiasaan perawatan CSS: checklist kualitas, komentar seksi, review, refactor bertahap, dan penerapan DRY dengan batas yang sehat.
Buka →Bab 23 Themes dan Design Systems
Susun design tokens menjadi sistem tiga tier yang terarah: nilai primitive, alias semantik, dan konsumsi di tingkat komponen.
Buka → # Color PalettesBangun palet warna berupa ramp 50-900 untuk warna netral dan aksen, lalu turunkan variasinya dengan color-mix().
Buka → # Typography ScaleSusun skala tipografi berbasis rasio 1.25 sebagai custom properties agar hierarki teks konsisten di seluruh sistem desain.
Buka → # Spacing ScaleTerapkan skala spasi berbasis kelipatan 4px sebagai custom properties untuk padding, margin, dan gap yang konsisten.
Buka → # Component StatesRancang hover, focus, active, dan disabled sebagai kontrak visual per state yang konsisten untuk setiap komponen.
Buka → # Dark ModeBangun dark mode dengan token semantik, media query prefers-color-scheme, dan fungsi light-dark().
Buka → # Prefers-color-schemeKenali media query prefers-color-scheme, perilaku default headless, emulasi DevTools, dan kombinasinya dengan override data-tema.
Buka → # Theme Switching OverviewRangkai pola theme switching lengkap: atribut data-tema, penimpaan token, transisi halus, dan penyimpanan preferensi dengan localStorage.
Buka → # Reusable Design SystemTutup section dengan prinsip sistem desain yang dapat dipakai ulang: tokens, komponen inti, dokumentasi, versioning, dan checklist adopsinya.
Buka →Bab 24 Accessibility
Kenali ambang kontras WCAG untuk tiap jenis konten — teks normal, teks besar, dan elemen non-teks — serta biasakan memeriksa pasangan warna sejak desain.
Buka → # Visible FocusRancang indikator fokus yang tetap terlihat dan berkontras bagi pengguna keyboard, mulai dari outline bawaan hingga cincin kustom.
Buka → # Text ResizingPastikan teks tetap terbaca saat pengguna memperbesar: gunakan rem, jaga layout tetap utuh, dan uji zoom 200% sesuai WCAG 1.4.4.
Buka → # Reduced MotionPahami dampak gerak antarmuka bagi pengguna dengan gangguan vestibular, kaitkan dengan WCAG 2.3.3, dan pastikan animasi dapat dihentikan.
Buka → # Forced ColorsHormati mode kontras tinggi sistem operasi dengan media query forced-colors, system colors, dan forced-color-adjust.
Buka → # Target SizeUkur area sasaran tombol dan kontrol dengan benar: ambang WCAG 2.5.8 sebesar 24×24px, praktik baik 44×44px, dan peran spacing antartarget.
Buka → # Accessibility TestingSusun alur pemeriksaan aksesibilitas halaman: uji keyboard, zoom 200%, emulasi reduced motion dan forced colors di DevTools, serta checklist rutin.
Buka →Bab 25 Performance dan Optimization
Ikuti perjalanan CSS dari teks yang diunduh hingga menjadi piksel: parsing, CSSOM, style, layout, paint, dan composite.
Buka → # Reducing Unused CSSKenali dampak CSS yang tidak terpakai dan terapkan strategi audit, pembersihan, serta pengurangan varian gaya.
Buka → # Stylesheet LoadingAtur kapan dan bagaimana file CSS dimuat: link render-blocking, media query pada link, dan preload.
Buka → # Font LoadingKelola pemuatan web font dengan font-display, preload, dan penyesuaian ukuran agar teks tampil cepat tanpa lompatan.
Buka → # Animation PerformanceUkur animasi yang berat lalu kendalikan dengan contain, content-visibility, dan will-change secara hemat.
Buka → # Avoiding Layout ThrashingKenali pola baca-tulis bergantian yang memaksa layout dihitung berulang dan perbaiki dengan pengelompokan lewat rAF.
Buka → # Measuring CSS PerformanceBaca metrik render halaman dengan panel Performance DevTools dan PerformanceObserver untuk menemukan biaya CSS.
Buka →Bab 26 Debugging dan Quality
Kuasai panel Styles DevTools: membaca urutan aturan, coretan deklarasi, filter, emulator :hover, dan editor class.
Buka → # Computed StylesGunakan panel Computed sebagai alat kerja debugging: membaca nilai akhir, menyaring daftar properti, dan menelusuri sumber nilai.
Buka → # Layout InspectionPeriksa tata letak secara visual dengan overlay grid, flexbox, box model, dan scroll-snap di DevTools.
Buka → # Specificity DebuggingBaca angka specificity di DevTools, buktikan aturan mana yang menang, dan terapkan strategi perbaikan tanpa !important.
Buka → # Invalid CSSKenali bagaimana browser menandai dan melewati CSS yang tidak valid, serta kesalahan umum yang membuat gaya tidak berlaku.
Buka → # CSS ValidationGunakan W3C CSS Validator dan stylelint untuk memeriksa stylesheet secara menyeluruh, serta pahami batas pemeriksaannya.
Buka → # Cross-browser TestingSusun strategi pengujian lintas browser: menentukan target, memeriksa dukungan fitur, dan menyusun pola fallback dengan @supports.
Buka →Bab 27 Proyek
Bangun halaman profil pribadi dengan typography dan warna yang konsisten, box model yang rapi, serta layout responsif.
Lihat proyek → # Proyek: Website PortofolioBangun website portofolio dengan design tokens, navigasi dan hero, grid proyek, serta desain responsif.
Lihat proyek → # Proyek: Landing Page ResponsifBangun landing page responsif dengan fondasi visual, flexbox dan grid, navigasi responsif, serta animasi dan polish.
Lihat proyek → # Proyek: Dashboard AdminBangun dashboard admin dengan layout dashboard, sidebar dan navigasi, kartu data dan tabel, serta dashboard responsif.
Lihat proyek → # Proyek: Component LibraryBangun component library dengan design tokens, buttons dan inputs, cards dan navigation, serta themes dan documentation.
Lihat proyek →Bab 28 Sumber Belajar
Menjelajahi dokumentasi CSS resmi di MDN Web Docs sebagai rujukan utama.
Buka → # CSS SpecificationsMembaca spesifikasi CSS resmi dari CSS Working Group.
Buka → # Browser CompatibilityMemeriksa dukungan browser melalui caniuse dan data kompatibilitas MDN.
Buka → # CSS ValidationMemvalidasi CSS dengan W3C CSS Validator dan alat bantu lainnya.
Buka → # Accessibility GuidelinesMenerapkan WCAG dan pedoman aksesibilitas pada styling.
Buka →