edubun
Nederlands

Selectors en de cascade

Als twee regels hetzelfde element verschillende kleuren geven, gokt CSS niet. Het vergelijkt de selectors en een id wint van elk aantal classes.

Elementen kiezen

Een selector is een patroon dat overeenkomt met elementen op de pagina. De eenvoudigste selecteren op elementnaam, class of id. p is een typeselector en selecteert elke alinea. .note is een classselector en selecteert elk element met class="note"; één element kan meerdere classes hebben, gescheiden door spaties, en één class kan op veel elementen worden gebruikt. #intro is een id-selector en selecteert het ene element met id="intro". *, de universele selector, selecteert alles.

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; }
Eenvoudige, gegroepeerde en gecombineerde selectors, pseudoklassen en attribuutselectors.

Selectors combineren

Een komma groepeert selectors met dezelfde declaraties, dus h1, h2 geeft beide opmaak. Een spatie is de afstammelingencombinator: nav a selecteert links overal binnen een nav, hoe diep ook. > is strenger en selecteert alleen directe kinderen. Als je twee eenvoudige selectors zonder spatie tegen elkaar schrijft, zoals a.active, moet één element met beide overeenkomen: een link die ook de class active heeft. Attribuutselectors tussen vierkante haken selecteren op attribuut, zoals input[type="email"].

Pseudoklassen, geschreven met één dubbele punt, selecteren elementen in een bepaalde toestand of positie: :hover wanneer de aanwijzer erboven staat, :focus-visible wanneer het toetsenbordfocus heeft, :first-child wanneer het het eerste kind van zijn ouder is. Pseudo-elementen, geschreven met twee dubbele punten, geven een deel van een element opmaak, zoals ::first-line of ::placeholder.

Als regels elkaar tegenspreken

Vaak stellen meerdere regels dezelfde eigenschap op hetzelfde element in. De cascade, de C van CSS, bepaalt welke wint. Als je de eigen browserstijlen en !important buiten beschouwing laat, beslissen twee vragen bijna elk geval. Ten eerste: welke selector is specifieker? Specificiteit wordt geteld als drie getallen: ids, dan classes (inclusief attribuutselectors en pseudoklassen), dan elementnamen. #menu a scoort 1-0-1, .active scoort 0-1-0 en nav a scoort 0-0-2. Je vergelijkt de getallen vanaf links, dus één id wint van elk aantal classes. Ten tweede: bij gelijke specificiteit wint de regel die later in de stylesheet staat.

Inline style-attributen winnen van elke selector en een declaratie met !important wint van normale declaraties. Beide zijn verleidelijke snelle oplossingen, maar maken de volgende wijziging moeilijker, omdat je ze alleen met meer van hetzelfde kunt overschrijven. De meeste teams houden specificiteit laag en gelijkmatig en geven vooral met classes opmaak, zodat de volgorde in het bestand genoeg is om het resultaat te voorspellen.

Overerving

Sommige eigenschappen gaan automatisch van ouder naar kind. Stel color of font-family in op body en elke alinea, lijst en tabelcel erin neemt die over, tenzij een regel een eigen waarde instelt. Teksteigenschappen erven doorgaans over; blokeigenschappen zoals width, padding, border en margin niet. Daarom verschijnt een rand rond een sectie niet rond elke alinea erin. Het sleutelwoord inherit dwingt een eigenschap de waarde van haar ouder over te nemen.

Geef classes een naam naar wat iets is, niet naar hoe het eruitziet. .warning blijft logisch als de ontwerper de kleur van rood in oranje verandert; .red-text niet. Ids zijn uniek, dus bewaar ze liever voor linkdoelen en formulierlabels dan voor opmaak, om de specificiteit laag te houden.

typeselectorp, h1, a: elk element met die naam
classselector.name: elk element met die class
id-selector#name: het ene element met dat id
afstammelingencombinatorEen spatie: nav a = a overal binnen nav
pseudoklasse:hover, :focus-visible: een toestand of positie
specificiteitids-classes-typen, vanaf links vergeleken
cascadeDe regels die bepalen welke declaratie wint
overervingTeksteigenschappen gaan van ouder naar kind
  1. Welke selector selecteert <p class="note">?
    • .note
    • #note
    • note
  2. Wat selecteert nav a?
    • Links overal binnen een nav
    • nav-elementen en alle links
    • Alleen links die directe kinderen van nav zijn
  3. Wat doet h1, h2?
    • Past de regel toe op zowel h1 als h2
    • Selecteert h2 binnen h1
    • Selecteert niets
  4. Wat is de specificiteit van #menu .item a?
    • 1-1-1
    • 0-2-1
    • 1-0-2
  5. .a.b.c (0-3-0) en #x (1-0-0) stellen verschillende kleuren in op één element. Welke wint?
    • #x
    • .a.b.c
    • The one written later
  6. Twee regels hebben dezelfde specificiteit. Welke wint?
    • De regel die later in de stylesheet staat
    • De regel die eerder staat
    • Geen van beide wordt toegepast
  7. Welke eigenschap wordt standaard overgeërfd?
    • color
    • border
    • padding
  8. Welke pseudoklasse geeft opmaak aan een element met toetsenbordfocus?
    • :focus-visible
    • :hover
    • :first-child
  9. Wat selecteert a.active?
    • Een link met de class active
    • Elk element met class active binnen een link
    • Alle links en alle .active-elementen
  10. Waarom vermijd je !important voor alledaagse aanpassingen?
    • Je kunt het alleen met meer !important overschrijven, waardoor latere wijzigingen moeilijker worden
    • Het is geen geldige CSS
    • Het vertraagt de browser
Belangrijkste punten
  • p, .class, #id; komma groepeert; spatie betekent afstammeling; > betekent kind.
  • Specificiteit ids-classes-typen beslist; bij gelijke stand wint de latere regel.
  • Teksteigenschappen erven over; blokeigenschappen niet.
Bronnen van deze cursus (5)
  • 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).

Geraadpleegd: 2026-10-17