edubun
Bahasa Indonesia

Selektor dan cascade

Jika dua aturan memberi elemen yang sama warna berbeda, CSS tidak menebak. CSS membandingkan selektornya, dan satu id mengalahkan berapa pun banyaknya class.

Memilih elemen

Selektor adalah pola yang mencocokkan elemen di halaman. Yang paling sederhana mencocokkan berdasarkan nama elemen, class, atau id. p adalah selektor tipe dan cocok dengan setiap paragraf. .note adalah selektor class dan cocok dengan setiap elemen yang punya class="note"; satu elemen bisa punya beberapa class yang dipisahkan spasi, dan satu class bisa dipakai di banyak elemen. #intro adalah selektor id dan cocok dengan satu-satunya elemen yang punya id="intro". *, selektor universal, cocok dengan semuanya.

p { line-height: 1.5; }            /* every p */
.note { background: #fff4d6; }     /* class="note" */
#intro { font-size: 20px; }        /* id="intro" */
h1, h2 { font-weight: 600; }       /* group: h1 and h2 */
nav a { text-decoration: none; }   /* a anywhere inside nav */
ul > li { margin: 4px 0; }         /* li that is a direct child of ul */
a:hover { text-decoration: underline; }
input[type="email"] { width: 20em; }
Selektor sederhana, berkelompok, gabungan, pseudo-class, dan atribut.

Menggabungkan selektor

Koma mengelompokkan selektor yang memakai deklarasi yang sama, jadi h1, h2 menata keduanya. Spasi adalah kombinator turunan: nav a cocok dengan tautan di mana saja di dalam nav, sedalam apa pun. > lebih ketat dan hanya cocok dengan anak langsung. Menulis dua selektor sederhana berdempetan tanpa spasi, seperti a.active, berarti satu elemen harus cocok dengan keduanya: tautan yang juga punya class active. Selektor atribut dalam kurung siku mencocokkan berdasarkan atribut, misalnya input[type="email"].

Pseudo-class, yang ditulis dengan satu titik dua, memilih elemen dalam keadaan atau posisi tertentu: :hover saat penunjuk berada di atasnya, :focus-visible saat elemen mendapat fokus keyboard, :first-child saat elemen menjadi anak pertama induknya. Pseudo-element, yang ditulis dengan dua titik dua, menata sebagian elemen, misalnya ::first-line atau ::placeholder.

Saat aturan bertentangan

Sering kali beberapa aturan mengatur properti yang sama pada elemen yang sama. Cascade, huruf C dalam CSS, menentukan mana yang menang. Selain gaya bawaan browser dan !important, dua pertanyaan menyelesaikan hampir semua kasus. Pertama, selektor mana yang lebih spesifik? Spesifisitas dihitung sebagai tiga angka: id, lalu class (termasuk selektor atribut dan pseudo-class), lalu nama elemen. #menu a bernilai 1-0-1, .active bernilai 0-1-0, dan nav a bernilai 0-0-2. Angka-angka itu dibandingkan dari kiri, jadi satu id mengalahkan berapa pun banyaknya class. Kedua, jika spesifisitasnya sama, aturan yang muncul belakangan di stylesheet yang menang.

Atribut style inline mengalahkan selektor apa pun, dan deklarasi bertanda !important mengalahkan deklarasi biasa. Keduanya menggoda sebagai perbaikan cepat, tetapi membuat perubahan berikutnya lebih sulit, karena satu-satunya cara menimpanya adalah dengan lebih banyak hal yang sama. Kebanyakan tim menjaga spesifisitas tetap rendah dan setara, sebagian besar menata dengan class, sehingga urutan di file sudah cukup untuk memperkirakan hasilnya.

Pewarisan

Sebagian properti diturunkan dari induk ke anak secara otomatis. Atur color atau font-family pada body, maka setiap paragraf, daftar, dan sel tabel di dalamnya ikut memakainya, kecuali ada aturan yang mengatur nilainya sendiri. Properti yang berkaitan dengan teks umumnya diwariskan; properti yang berkaitan dengan kotak seperti width, padding, border, dan margin tidak, itulah sebabnya border pada section tidak muncul di sekeliling setiap paragraf di dalamnya. Kata kunci inherit memaksa properti menyalin nilai induknya.

Beri nama class berdasarkan apa sesuatu itu, bukan bagaimana tampilannya. .warning tetap masuk akal saat desainer mengganti warnanya dari merah ke oranye; .red-text tidak. Id itu unik, jadi sebaiknya disimpan untuk target tautan dan label formulir, bukan untuk menata gaya, sehingga spesifisitas tetap rendah.

selektor tipep, h1, a: setiap elemen dengan nama itu
selektor class.nama: setiap elemen dengan class itu
selektor id#nama: satu-satunya elemen dengan id itu
kombinator turunanSpasi: nav a = a di mana saja di dalam nav
pseudo-class:hover, :focus-visible: keadaan atau posisi
spesifisitasid-class-tipe, dibandingkan dari kiri
cascadeAturan yang menentukan deklarasi mana yang menang
pewarisanProperti teks diturunkan dari induk ke anak
  1. Selektor mana yang cocok dengan <p class="note">?
    • .note
    • #note
    • note
  2. Apa yang dicocokkan nav a?
    • Tautan di mana saja di dalam nav
    • Elemen nav dan semua tautan
    • Hanya tautan yang menjadi anak langsung nav
  3. Apa fungsi h1, h2?
    • Menerapkan aturan pada h1 dan h2 sekaligus
    • Mencocokkan h2 di dalam h1
    • Tidak mencocokkan apa pun
  4. Berapa spesifisitas #menu .item a?
    • 1-1-1
    • 0-2-1
    • 1-0-2
  5. .a.b.c (0-3-0) dan #x (1-0-0) memberi warna berbeda pada satu elemen. Mana yang menang?
    • #x
    • .a.b.c
    • The one written later
  6. Dua aturan punya spesifisitas sama. Mana yang menang?
    • Yang muncul belakangan di stylesheet
    • Yang muncul lebih dulu
    • Tidak ada yang berlaku
  7. Properti mana yang diwariskan secara bawaan?
    • color
    • border
    • padding
  8. Pseudo-class mana yang menata elemen yang mendapat fokus keyboard?
    • :focus-visible
    • :hover
    • :first-child
  9. Apa yang dicocokkan a.active?
    • Tautan yang punya class active
    • Elemen apa pun dengan class active di dalam tautan
    • Semua tautan dan semua elemen .active
  10. Mengapa !important dihindari untuk perbaikan sehari-hari?
    • Ia hanya bisa ditimpa dengan !important lagi, jadi perubahan berikutnya makin sulit
    • Itu bukan CSS yang sah
    • Itu memperlambat browser
Poin penting
  • p, .class, #id; koma mengelompokkan; spasi berarti turunan; > berarti anak.
  • Spesifisitas id-class-tipe yang menentukan; seri dimenangkan aturan yang belakangan.
  • Properti teks diwariskan; properti kotak tidak.
Sumber kursus ini (6)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
  • every code exercise checked with a Playwright probe against a reference solution.

Diperiksa: 2026-10-17