⏱️ Leestijd: ca. 5 min.

Pseudo-classes voor Hyperlinks

Als grafisch en digitaal vormgever ontwerp je niet alleen statische pagina's, maar creëer je interactieve ervaringen. Wanneer een gebruiker over de pagina beweegt met de muis, op de Tab-toets drukt of op een knop klikt, verwacht deze directe visuele feedback. We noemen deze kleine visuele reacties micro-interacties.

In CSS sturen we deze interactieve toestanden (of states) aan met pseudo-classes. In deze les leer je hoe je met de vijf belangrijkste pseudo-classes voor hyperlinks — :link, :visited, :hover, :active en :focus — de gebruikerservaring (UX) en toegankelijkheid (accessibility) van je website naar een professioneel niveau tilt.


1. Wat is een Pseudo-class?

Een pseudo-class is een trefwoord dat je aan een CSS-selector toevoegt om een element te stylen op basis van zijn toestand of context, in plaats van zijn positie in de HTML-structuur.

Je herkent een pseudo-class in CSS altijd aan de dubbele punt (:) voor de naam.

/* Syntaxis */
selector:pseudo-class {
    eigenschap: waarde;
}
In de praktijk: In plaats van extra HTML-classes aan te maken (zoals <a class="actief">), herkent de browser automatisch in welke toestand een link zich bevindt en past de bijbehorende CSS-stijl toe.

2. De 5 Link Staten Uitgelegd

Hyperlinks (<a>-tags) doorlopen verschillende fasen tijdens het gebruik. CSS kent voor elke fase een specifieke pseudo-class:

A. :link (De onbezochte link)

Dit is de standaardtoestand van een hyperlink die door de bezoeker nog niet is aangeklikt.

a:link {
    color: #2563eb;          /* Helderblauw */
    text-decoration: none;   /* Verwijder de standaard onderlijning */
}

B. :visited (De bezochte link)

Zodra een bezoeker op een link heeft geklikt en de betreffende pagina later opnieuw bekijkt, krijgt de link de toestand :visited. Dit helpt gebruikers om te zien welke pagina's ze al gelezen hebben.

a:visited {
    color: #7c3aed;          /* Paars (geeft aan: hier ben je al geweest) */
}
Beveiligingsnoot: Om privacyredenen laten moderne browsers om veiligheidsredenen alleen aanpassingen in kleur (zoals color en background-color) toe bij :visited. Je kunt bijvoorbeeld de lettergrootte of marges van een bezochte link niet veranderen.

C. :hover (Muisaanwijzer zweeft erover)

Deze toestand activeert op het moment dat de gebruiker met de muisaanwijzer (cursor) over het element zweeft. Dit is dé belangrijkste selector voor het maken van vloeiende knoppen en navigatiemenu's!

a:hover {
    color: #1d4ed8;
    text-decoration: underline; /* Onderlijn de tekst als de muis erover zweeft */
}

D. :active (Op het moment van klikken)

Deze toestand is heel kort zichtbaar: exact op het moment dat de bezoeker de muisknop ingedrukt houdt op de link of knop. Het geeft het visuele gevoel dat een knop echt fysiek 'ingedrukt' wordt.

a:active {
    color: #1e40af;
    transform: scale(0.98);    /* Maakt het element 2% kleiner voor een 'klik'-effect */
}

E. :focus (Toetsenbordnavigatie & Toegankelijkheid)

De :focus toestand activeert wanneer een element geselecteerd is, bijvoorbeeld wanneer een gebruiker met de Tab-toets door de pagina navigeert of op een invoerveld klikt.

Dit is essentieel voor toegankelijkheid (accessibility): mensen met een visuele of motorische beperking gebruiken vaak het toetsenbord om een website te bedienen.

a:focus {
    outline: 3px solid #f59e0b; /* Duidelijke oranje accentrand rond de gefocuste link */
    outline-offset: 2px;
}

3. Volgorde is Cruciaal: De LVHA/F-regel!

Een van de meest gemaakte fouten bij het schrijven van CSS voor links is het hanteren van de verkeerde volgorde. Omwille van de manier waarop CSS-stijlen elkaar overschrijven (cascading), moet je pseudo-classes altijd in een vaste volgorde in je stylesheet plaatsen.

Onthoud het ezelsbruggetje: LoVe For HaTe (of LVFHA).

1. :link     (Unvisited)
2. :visited  (Visited)
3. :focus    (Focus)
4. :hover    (Hover)
5. :active   (Active)

Waarom is deze volgorde verplicht?


4. Toegankelijkheid: Zondig nooit tegen outline: none;

Standaard plaatsen browsers een blauwe of zwarte stippellijn rond elementen die :focus krijgen. Veel beginnende ontwerpers vinden dit lelijk en verwijderen het met outline: none; of outline: 0;.

⚠️ Belangrijke Waarschuwing:
Verwijder nooit de outline van een element zonder er een eigen, goed zichtbare :focus-stijl voor in de plaats te zetten! Als je de focus-rand verwijdert, worden je links en formulieren onbruikbaar voor bezoekers die navigeren met het toetsenbord.
/* ❌ SLECHT VOOR TOEGANKELIJKHEID */
a:focus {
    outline: none; /* De toetsenbordgebruiker ziet niet meer waar hij is! */
}

/* ✅ GOED: Eigen, stijlvolle focus-indicator */
a:focus {
    outline: 2px solid #2563eb;
    outline-offset: 4px;
    border-radius: 2px;
}

5. Compleet Praktijkvoorbeeld: Een Moderne Knop & Navigatielink

In dit voorbeeld combineren we alle vijf de pseudo-classes om een stijlvolle actieknop en navigatielink vorm te geven.

HTML

<nav class="hoofdnavigatie">
    <a href="#home" class="nav-link">Home</a>
    <a href="#over" class="nav-link">Over Ons</a>
    <a href="#contact" class="btn-primary">Neem Contact Op</a>
</nav>

CSS

/* Basisstijl voor de navigatielink */
.nav-link:link {
    color: #475569;
    text-decoration: none;
    font-weight: 500;
    padding: 8px 12px;
    transition: color 0.2s ease;
}

.nav-link:visited {
    color: #64748b;
}

.nav-link:focus {
    outline: 2px solid #2563eb;
    outline-offset: 2px;
    border-radius: 4px;
}

.nav-link:hover {
    color: #2563eb;
    text-decoration: underline;
}

.nav-link:active {
    color: #1d4ed8;
}

/* -------------------------------------------------- */
/* Stijl voor de opvallende actieknop (Button style) */
/* -------------------------------------------------- */

.btn-primary:link,
.btn-primary:visited {
    display: inline-block;
    background-color: #2563eb;
    color: #ffffff;
    text-decoration: none;
    padding: 10px 20px;
    border-radius: 6px;
    font-weight: bold;
    transition: background-color 0.2s ease, transform 0.1s ease;
}

.btn-primary:focus {
    outline: 3px solid #93c5fd;
    outline-offset: 2px;
}

.btn-primary:hover {
    background-color: #1d4ed8; /* Iets donkerder blauw bij hover */
}

.btn-primary:active {
    background-color: #1e40af;
    transform: translateY(2px); /* Drukt de knop visueel 2px naar beneden */
}

Samenvatting