divmagic Make design
SimpleNowLiveFunMatterSimple
CSS Anchor Positioning in 2026: Hoe het Popper.js en Floating UI vervangt
BlogsCSSCSS Anchor Positioning in 2026: Hoe het Popper.js en Floating UI vervangt
CSS

CSS Anchor Positioning in 2026: Hoe het Popper.js en Floating UI vervangt

DivMagic
DivMagic TeamAugust 26, 2026
7 min read

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 .

work, desk, computer, night, hacker, anonymous, office, computer desk, worker, person, technology, professional, sitting, internet, modern, hacker, hacker, hacker, hacker, hacker

/* 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-ID
  • position-anchor: specificeert welk anker het gepositioneerde element gebruikt
  • inset-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:

coding, programming, working, macbook, laptop, technology, office, desk, business, coding, coding, coding, coding, coding, programming, programming, programming

// 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.

Bar chart showing page load time decreasing from 2.3 seconds with Popper.js to 1.2 seconds using native CSS Anchor Positioning.

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.

coding, programming, css, html, php, web, site, programmer, gray web, gray code, gray coding, gray programming, css, css, php, php, php, programmer, programmer, programmer, programmer, programmer

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:

  1. Audit bestaand gebruik: Inventariseer elke tooltip, popover, dropdown en menu die Popper.js of Floating UI gebruikt.
  2. Stel anker namen in: Voeg anchor-name toe aan de referentie-elementen. Kies beschrijvende namen zoals --profile-menu-anchor.
  3. Herschrijf positionerings-CSS: Vervang de JS-plaatsingslogica door inset-area en anchor(). Gebruik @try -blokken voor flip/fallback-gedrag.
  4. 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).
  5. Test op verschillende viewports: Controleer overflow-gedrag en interactieve statussen.
  6. 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.

Pie chart indicating 70% of developers now prefer CSS Anchor Positioning, 20% still use Floating UI for legacy, and 10% use custom JavaScript.

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.

Begin vandaag nog met bouwen met DivMagic

Sluit je aan bij meer dan 10.000 ontwikkelaars, ontwerpers en bedrijfseigenaren om code van elke website te kopiëren en deze in hun eigen projecten te gebruiken.

Get DivMagic for 42% off

Limited time deal for 22:45