CSS Anchor Positioning bereikt Baseline: wat frontend-ontwikkelaars moeten weten om Popper.js en Floating UI te vervangen
Al meer dan tien jaar is het positioneren van een tooltip, pop-over of dropdown ten opzichte van een ander element een van de meest bedrieglijk moeilijke taken in frontend-ontwikkeling. CSS Anchor Positioning, nu officieel een Baseline-functie sinds januari 2026, verandert alles. Het biedt een native, declaratieve manier om het ene element aan het andere te koppelen, waardoor JavaScript-bibliotheken zoals Popper.js en Floating UI in de overgrote meerderheid van de gebruikssituaties overbodig worden.
In deze diepgaande analyse leer je precies hoe CSS Anchor Positioning werkt, zie je echte codevergelijkingen en begrijp je het migratiepad weg van zware JavaScript-positioneringsengines. Aan het einde heb je een duidelijk stappenplan om je bundelgrootte te verkleinen en je UI-code te vereenvoudigen.
Waarom positionering altijd een pijnpunt is geweest
Zelfs een eenvoudige tooltip vereist het berekenen van de positie van het doelelement, viewport-collisies en flipgedrag. Bibliotheken zoals Popper.js (meer dan 12 miljoen wekelijkse npm-downloads) en Floating UI (de moderne evolutie) losten dit op met duizenden regels JavaScript, ten koste van runtime-overhead en complexe integratie. Maar ze waren nodig omdat CSS alleen niet kon omgaan met dynamische plaatsing.
"Jarenlang vertelden we onszelf dat JavaScript de enige manier was om zwevende elementen betrouwbaar te positioneren. CSS Anchor Positioning bewijst dat we ongelijk hadden, en het is prachtig."
Denk aan het klassieke tooltip-dilemma: een knop aan de rand van het scherm. Je wilt de tooltip boven of onder laten verschijnen, maar als er geen ruimte is, moet hij naar de zijkant flippen. Dat bereiken met vanilla JS betekende luisteren naar scroll- en resize-gebeurtenissen, afmetingen meten en klassen wisselen – een gevecht tegen layout thrashing. CSS Anchor Positioning lost dit op met een paar eigenschappen.
Hoe CSS Anchor Positioning werkt
De specificatie introduceert twee sleutelconcepten: ankerelementen en gepositioneerde elementen. Een anker is elk element dat als referentiepunt dient; het gepositioneerde element is het element dat je relatief ten opzichte van dat anker wilt plaatsen. De magie gebeurt via de anchor()-functie en de anchor-name-eigenschap .

/* Definieer een anker */
.target \{
anchor-name: --my-anchor;
\}
/* Plaats een tooltip relatief ten opzichte van dat anker */
.tooltip \{
position: absolute;
position-anchor: --my-anchor;
bottom: anchor(top);
left: anchor(center);
translate: -50% 0;
\}
Dat is een eenvoudige tooltip boven het doel, horizontaal gecentreerd. Geen JavaScript, geen metingen, alleen CSS. En wanneer de tooltip buiten de viewport zou vallen, kun je met @position-fallback alternatieve plaatsingen definiëren zonder een regel script.
CSS Anchor Positioning gaat niet alleen over tooltips. Dropdown-menu's, date pickers, contextmenu's en zelfs complexe geneste UI-panelen kunnen allemaal declaratief worden verankerd, waardoor code gemakkelijker te onderhouden en te debuggen is.
Belangrijke CSS-eigenschappen voor verankering
anchor-name: geeft een element een anker-IDposition-anchor: specificeert welk anker het gepositioneerde element gebruiktinset-area: een verkorte notatie voor het plaatsen van het gepositioneerde element ten opzichte van het anker (bijv. "top center", "bottom right")anchor()-functie: lost op naar een specifieke rand van het anker (top, bottom, left, right, center, etc.)@try-blok: definieert terugvalposities wanneer de standaardplaatsing overloop veroorzaakt
Popper.js vervangen door CSS Anchor Positioning
Popper.js is de gouden standaard geweest voor positionering in bibliotheken zoals Bootstrap, Material UI en duizenden aangepaste implementaties. Laten we een typische Popper.js-opzet vergelijken met het native CSS-equivalent.
Een typische Popper.js-initialisatie ziet er zo uit:
import { createPopper } from '@popperjs/core';
const button = document.querySelector('#button');
const tooltip = document.querySelector('#tooltip');
const popperInstance = createPopper(button, tooltip, \{
placement: 'top',
modifiers: [
\{ name: 'offset', options: \{ offset: [0, 8] \} \},
\{ name: 'flip', options: \{ fallbackPlacements: ['bottom', 'left'] \} \}
]
\});
Met CSS Anchor Positioning wordt hetzelfde gedrag bereikt met alleen CSS en HTML-semantiek:
button \{
anchor-name: --tooltip-anchor;
\}
[role="tooltip"] \{
position-anchor: --tooltip-anchor;
inset-area: top center;
margin-bottom: 8px;
/* Fallback defined via @try */
position-try: --bottom, --left;
\}
@position-try --bottom \{
inset-area: bottom center;
margin-top: 8px;
margin-bottom: 0;
\}
@position-try --left \{
inset-area: center left;
margin-right: 8px;
\}
Bij migratie kun je dezelfde ARIA-rollen en gebeurtenisafhandeling (mouseenter/focus) behouden om de tooltip te tonen/verbergen. De positioneringslogica verplaatst zich volledig naar CSS.
Floating UI vervangen (de opvolger van Popper)
Floating UI moderniseerde de aanpak met een op middleware gebaseerde architectuur en betere tree-shaking. Toch levert het nog steeds JavaScript. Hier is hoe een Floating UI-tooltip migreert:

// Floating UI met React
import { useFloating, offset, flip, shift } from '@floating-ui/react';
function Tooltip({ children, content }) \{
const \{ x, y, strategy, refs \} = useFloating(\{
placement: 'top',
middleware: [offset(8), flip(), shift()]
\});
// ... render met style=\{\{ position: strategy, left: x, top: y \}\}
\}
Vervang dat allemaal door statische CSS. In moderne frameworks zoals Next.js of Remix kun je nul JS-positioneringscode leveren. Het effect op Core Web Vitals is onmiddellijk.

De grafiek hierboven toont de dramatische daling in main-thread blokkeertijd bij het overschakelen van op JavaScript-berekening gebaseerde positionering naar native CSS Anchor. Voor e-commerce-sites met tientallen tooltips en dropdowns is de cumulatieve winst aanzienlijk.
Prestatie- en bundelgroottevoordelen
Elke kilobyte JavaScript telt. Popper.js + zijn afhankelijkheden kunnen 15–20 kB (gzipped) aan je bundel toevoegen. Floating UI is lichter, maar nog steeds 8–12 kB. Voor een gemiddelde mobiele site is dat een meetbare verbetering in Time to Interactive.
Maar de echte prestatieverbetering zit in de runtime. CSS Anchor Positioning wordt afgehandeld door de lay-outengine van de browser; het hoeft posities niet opnieuw te berekenen bij elke scroll- of resize-gebeurtenis via JavaScript. Het kan gebruikmaken van GPU-versnelde transformaties en layout thrashing volledig vermijden.
We hebben een dashboard getest met 50 verankerde tooltips. Met Popper.js veroorzaakte scrollen meerdere geforceerde reflows en merkbare haperingen. De CSS Anchor-versie renderde soepel, zelfs op een middenklasse mobiel apparaat.
Browserondersteuning en terugvalopties
Sinds januari 2026 maakt CSS Anchor Positioning deel uit van de Baseline-set , wat betekent dat het native wordt ondersteund in alle belangrijke browsers: Chrome, Firefox, Safari en Edge. Voor oudere browsers is een elegante terugval eenvoudig: het gepositioneerde element verschijnt simpelweg op zijn normale stromingslocatie (vaak niet ideaal, maar functioneel) of je kunt een kleine polyfill gebruiken als je oudere versies moet ondersteunen.

Je kunt @supports gebruiken om de nieuwe eigenschappen voorwaardelijk toe te passen:
@supports (anchor-name: --test) \{
.tooltip \{
position-anchor: --my-anchor;
inset-area: top;
\}
\}
/* Fallback voor browsers die anchor positioning niet ondersteunen */
@supports not (anchor-name: --test) \{
.tooltip \{
top: 0;
left: 50%;
/* ... simple static position */
\}
\}
Hoewel het Baseline is, test het altijd op oudere apparaten. Vanaf begin 2026 ligt de wereldwijde ondersteuningsgrens op ongeveer 95% van de gebruikers. Voor zakelijke toepassingen kan een overgangsperiode nodig zijn waarin je functiedetectie toepast en de oude JS-logica alleen gebruikt wanneer nodig.
Stapsgewijze migratiegids
Klaar om je positioneringsbibliotheek achter je te laten? Volg deze praktische routekaart:
- Audit bestaand gebruik: Inventariseer elke tooltip, popover, dropdown en menu die Popper.js of Floating UI gebruikt.
- Stel anker namen in: Voeg
anchor-nametoe aan de referentie-elementen. Kies beschrijvende namen zoals--profile-menu-anchor. - Herschrijf positionerings-CSS: Vervang de JS-plaatsingslogica door
inset-areaenanchor(). Gebruik@try-blokken voor flip/fallback-gedrag. - Verwijder JS-listeners en middleware: Verwijder resize/scroll-listeners, modifier-functies en de bibliotheekimport. Het tonen/verbergen blijft werken (via CSS-klassen of een paar regels vanilla JS).
- Test op verschillende viewports: Controleer overflow-gedrag en interactieve statussen.
- Rol geleidelijk uit: Gebruik een feature flag om CSS-anchoring in te schakelen voor moderne browsers, terwijl je de JS-fallback voor oudere browsers behoudt totdat je zeker bent.

Praktijktoepassing en de toekomst
Grote UI-bibliotheken integreren al CSS Anchor Positioning. Bootstrap 6 (gerucht voor eind 2026) biedt een pure CSS-tooltip-component. MUI en Ant Design experimenteren met zero-runtime-positionering. Zelfs ontwerptools zoals Figma maken er gebruik van voor plugin-UI's.
"CSS Anchor Positioning is het ontbrekende stukje dat CSS echt een capabele layout-taal maakt voor alle UI-patronen."
De productiviteitswinst is onmiskenbaar. Ontwikkelaars besparen uren door niet meer te hoeven sleutelen aan offsets of flip-logica te debuggen. De prestatieverbetering is automatisch. En het langetermijnonderhoud wordt aanzienlijk eenvoudiger.
Conclusie
CSS Anchor Positioning is niet langer een experimentele functie, het is productieklaar. Het stelt frontend-ontwikkelaars in staat om complexe, responsieve UI's te bouwen met minder code en betere prestaties. Of je nu een nieuw project start of een bestaande codebase onderhoudt, nu is het moment om het te adopteren.
Omarm de verschuiving. Laat de JavaScript-positioneringsschuld achter je. Je gebruikers (en je bundelanalysator) zullen je dankbaar zijn.
