Ontdek de revolutionaire CSS Anchor Positioning Constraint Solver, een doorbraak voor complexe UI. Leer hoe het intelligent meerdere positioneringsbeperkingen oplost voor robuuste, adaptieve webinterfaces wereldwijd.
Geavanceerde UI Ontketend: De CSS Anchor Positioning Constraint Solver en Multi-Constraint Resolutie
In het uitgestrekte en constant evoluerende landschap van webontwikkeling presenteert user interface (UI) design vaak een unieke reeks uitdagingen. Een van de meest hardnekkige en ingewikkelde problemen is de precieze en robuuste positionering van elementen ten opzichte van andere elementen, vooral voor dynamische componenten zoals tooltips, popovers, contextmenu's en dropdowns. Historisch gezien hebben ontwikkelaars hiermee geworsteld met een samenraapsel van JavaScript, complexe CSS-transforms en media queries, wat leidde tot breekbare, prestatie-intensieve en vaak ontoegankelijke oplossingen. Deze traditionele methoden bezwijken vaak onder de druk van variërende schermgroottes, gebruikersinteracties of zelfs eenvoudige inhoudswijzigingen.
Maak kennis met CSS Anchor Positioning: een baanbrekende, native browserfunctie die op het punt staat een revolutie teweeg te brengen in hoe we adaptieve gebruikersinterfaces bouwen. In de kern stelt Anchor Positioning één element (het "verankerde" element) in staat om declaratief te worden gepositioneerd ten opzichte van een ander element (het "anker") zonder toevlucht te nemen tot JavaScript. Maar de ware kracht, de geavanceerde motor achter deze innovatie, ligt in zijn Constraint Solver en zijn vermogen om Multi-Constraint Resolutie uit te voeren. Dit gaat niet alleen over het plaatsen van een element; het gaat over het intelligent beslissen waar een element moet komen, rekening houdend met een veelheid aan factoren en voorkeuren, en dit native te doen binnen de rendering engine van de browser.
Deze uitgebreide gids duikt diep in de mechanica van de CSS Anchor Positioning Constraint Solver en legt uit hoe deze meerdere positioneringsbeperkingen interpreteert en oplost om robuuste, adaptieve en wereldwijd bewuste web-UI's te leveren. We zullen de syntaxis, praktische toepassingen en de immense voordelen ervan voor ontwikkelaars wereldwijd verkennen, ongeacht de schaal van hun specifieke project of culturele UI-nuances.
De Basis Begrijpen: Wat is CSS Anchor Positioning?
Voordat we de solver ontleden, leggen we eerst een duidelijk begrip van CSS Anchor Positioning zelf vast. Stel u voor dat u een knop heeft en u wilt dat er direct daaronder een tooltip verschijnt. Met traditionele CSS zou u `position: absolute;` op de tooltip kunnen gebruiken en vervolgens de `top`- en `left`-eigenschappen berekenen met JavaScript, of het zorgvuldig in de DOM-structuur plaatsen. Dit wordt omslachtig als de knop beweegt, van grootte verandert, of als de tooltip moet voorkomen dat hij van het scherm af gaat.
CSS Anchor Positioning vereenvoudigt dit door u toe te staan een relatie te declareren. U wijst een element aan als een "anker" en vertelt vervolgens een ander element om zichzelf te positioneren ten opzichte van dat anker. De belangrijkste CSS-eigenschappen die dit mogelijk maken zijn:
anchor-name: Gebruikt op het ankerelement om het een unieke naam te geven.anchor()functie: Gebruikt op het verankerde element om de positie, grootte of andere attributen van het anker te refereren.position-try(): De cruciale eigenschap die een lijst met benoemde fallback-positioneringsstrategieën definieert.@position-tryregel: Een CSS at-rule die de daadwerkelijke positioneringslogica voor elke benoemde strategie definieert.inset-area,inset-block-start,inset-inline-start, etc.: Eigenschappen die binnen@position-tryregels worden gebruikt om de gewenste plaatsing ten opzichte van het anker, of het bevattende blok, te specificeren.
Deze declaratieve aanpak stelt de browser in staat om de complexe details van positionering te beheren, waardoor onze code schoner, beter onderhoudbaar en inherent veerkrachtiger wordt tegen veranderingen in de UI of viewport.
Het 'Anker'-concept: Relaties Declareren
De eerste stap bij het gebruik van anchor positioning is het vaststellen van het anker. Dit wordt gedaan door een unieke naam aan een element toe te wijzen met de anchor-name eigenschap. Zie het als het geven van een label aan een referentiepunt.
.my-button {
anchor-name: --btn;
}
Eenmaal benoemd, kunnen andere elementen dit anker refereren met de anchor() functie. Deze functie stelt u in staat om verschillende eigenschappen van het anker te benaderen, zoals de coördinaten van `top`, `bottom`, `left`, `right`, `width`, `height` en `center`. Om bijvoorbeeld de bovenrand van een tooltip op de onderrand van de knop te positioneren, zou u schrijven:
.my-tooltip {
position: absolute;
top: anchor(--btn bottom);
left: anchor(--btn left);
}
Deze eenvoudige declaratie vertelt de tooltip om zijn bovenkant uit te lijnen met de onderkant van de knop, en zijn linkerkant met de linkerkant van de knop. Het is beknopt, leesbaar en past zich dynamisch aan als de knop beweegt of de paginalay-out verandert. Dit basisvoorbeeld houdt echter nog geen rekening met mogelijke overflows of biedt geen fallback-posities. Dat is waar de Constraint Solver in het spel komt.
Het Hart van de Innovatie: De Constraint Solver
De CSS Anchor Positioning Constraint Solver is geen stuk code dat u schrijft; het is een intelligent algoritme ingebouwd in de rendering engine van de browser. Het doel is om een set positioneringsvoorkeuren (beperkingen) te evalueren die door de ontwikkelaar zijn gedefinieerd en de optimale positie voor een verankerd element te bepalen, zelfs wanneer die voorkeuren conflicteren of tot ongewenste resultaten leiden, zoals het overschrijden van de viewport.
Stel u voor dat u een tooltip onder een knop wilt laten verschijnen. Maar wat als de knop helemaal onderaan het scherm staat? Een intelligente UI zou de tooltip dan boven de knop moeten positioneren, of misschien gecentreerd, of aan de zijkant. De solver automatiseert dit besluitvormingsproces. Het past niet zomaar de eerste regel toe die het vindt; het probeert meerdere mogelijkheden en selecteert degene die het beste aan de gegeven voorwaarden voldoet, waarbij gebruikerservaring en visuele integriteit voorop staan.
De noodzaak voor een dergelijke solver komt voort uit de dynamische aard van webcontent en diverse gebruikersomgevingen:
- Viewport-grenzen: Elementen moeten zichtbaar blijven binnen het scherm van de gebruiker of een specifieke scrollbare container.
- Layoutverschuivingen: Wijzigingen in de DOM, het vergroten of verkleinen van elementen, of responsieve breekpunten kunnen de beschikbare ruimte veranderen.
- Inhoudsvariabiliteit: Verschillende talen, variërende tekstlengtes of afbeeldingsgroottes kunnen de intrinsieke afmetingen van een element veranderen.
- Gebruikersvoorkeuren: Rechts-naar-links (RTL) leesmodi, zoomniveaus of toegankelijkheidsinstellingen kunnen de ideale plaatsing beïnvloeden.
De solver pakt deze complexiteiten aan door ontwikkelaars toe te staan een hiërarchie van positioneringspogingen te definiëren. Als de eerste poging niet "geldig" is (bijv. het veroorzaakt overflow), probeert de solver automatisch de volgende, en zo verder, totdat een bevredigende positie is gevonden. Dit is waar het concept van "Multi-Constraint Resolutie" echt tot zijn recht komt.
Multi-Constraint Resolutie: Een Diepere Duik
Multi-constraint resolutie in CSS Anchor Positioning verwijst naar het vermogen van de browser om verschillende potentiële positioneringsstrategieën te evalueren en de meest geschikte te selecteren op basis van een gedefinieerde volgorde van voorkeur en impliciete beperkingen (zoals het niet overschrijden van de `overflow-boundary`). Dit wordt voornamelijk bereikt door de combinatie van de `position-try()` eigenschap en meerdere `@position-try` at-rules.
Zie het als een reeks 'if-then-else'-verklaringen voor positionering, maar dan native en efficiënt afgehandeld door de browser. U declareert een lijst met voorkeursposities, en de browser doorloopt ze, en stopt bij de eerste die aan de criteria voldoet en geen ongewenste overflow veroorzaakt.
Eén Beperking, Meerdere Pogingen: position-try() en inset-area
De position-try() eigenschap op het verankerde element specificeert een door komma's gescheiden lijst van benoemde positioneringspogingen. Elke naam correspondeert met een `@position-try` regel die de daadwerkelijke CSS-eigenschappen voor die poging definieert. De volgorde van deze namen is cruciaal, omdat het de voorkeur van de solver bepaalt.
Laten we ons tooltip-voorbeeld verfijnen. We willen dat het bij voorkeur onder de knop verschijnt. Als er geen ruimte is, moet het proberen erboven te verschijnen. Als dat ook niet werkt, misschien aan de rechterkant.
.my-tooltip {
position: absolute;
anchor-name: --self-tip; /* Optioneel: voor zelfreferentie in complexe scenario's */
position-try: --bottom-placement, --top-placement, --right-placement;
}
@position-try --bottom-placement {
inset-area: block-end;
/* Dit is equivalent aan:
top: anchor(--btn bottom);
left: anchor(--btn left);
right: auto;
bottom: auto;
block-size: auto;
inline-size: auto;
margin-block-start: 0;
margin-inline-start: 0;
Dit plaatst de block-start van het verankerde element aan de block-end van het anker.
*/
}
@position-try --top-placement {
inset-area: block-start;
/* Plaatst de block-end van het verankerde element aan de block-start van het anker. */
}
@position-try --right-placement {
inset-area: inline-end;
/* Plaatst de inline-start van het verankerde element aan de inline-end van het anker. */
}
In dit voorbeeld:
- De browser probeert eerst
--bottom-placement. Als de tooltip (nadat deze `block-end` van de knop is geplaatst) binnen zijn `overflow-boundary` (standaard de viewport) past, wordt deze positie gekozen. - Als
--bottom-placementervoor zorgt dat de tooltip overloopt (bijv. onderaan het scherm uitsteekt), verwerpt de solver deze en probeert--top-placement. - Als `block-start` ook overloopt, probeert het vervolgens
--right-placement. - Dit gaat door totdat een geldige positie is gevonden of alle pogingen zijn uitgeput. Als er geen geldige positie wordt gevonden, wordt doorgaans de eerste in de lijst gekozen die *minimaal* overloopt, of wordt een standaardgedrag toegepast.
De inset-area eigenschap is een krachtige verkorte notatie die veelvoorkomende positioneringspatronen vereenvoudigt. Het lijnt de randen van het verankerde element uit met de randen van het anker met behulp van logische eigenschappen zoals `block-start`, `block-end`, `inline-start`, `inline-end`, en hun combinaties (bijv. `block-end / inline-start` of `block-end inline-start`). Dit maakt de positionering inherent aanpasbaar aan verschillende schrijfmodi (bijv. LTR, RTL, verticaal) en internationalisatie-overwegingen, een cruciaal aspect voor een wereldwijd publiek.
Complexe Logica Definiëren met @position-try Regels
Hoewel inset-area uitstekend is voor veelvoorkomende gevallen, kunnen @position-try regels elke inset eigenschap bevatten (top, bottom, left, right, `inset-block`, `inset-inline`, etc.) en zelfs `width`, `height`, `margin`, `padding`, `transform` en meer. Deze granulaire controle maakt zeer specifieke positioneringslogica mogelijk binnen elke fallback-poging.
Neem een complex dropdownmenu dat intelligent gepositioneerd moet worden:
.dropdown-menu {
position: absolute;
anchor-name: --dd-trigger;
position-try: --bottom-start, --bottom-end, --top-start, --top-end;
/* Definieer andere standaard stijlen zoals max-height, overflow-y: auto */
}
/* Probeer onder de trigger te positioneren, uitgelijnd met de start-rand */
@position-try --bottom-start {
top: anchor(--dd-trigger bottom);
inset-inline-start: anchor(--dd-trigger inline-start);
min-inline-size: anchor(--dd-trigger width); /* Zorgt ervoor dat het minstens zo breed is als de trigger */
}
/* Als --bottom-start overloopt, probeer dan onder de trigger, uitgelijnd met de eind-rand */
@position-try --bottom-end {
top: anchor(--dd-trigger bottom);
inset-inline-end: anchor(--dd-trigger inline-end);
min-inline-size: anchor(--dd-trigger width);
}
/* Als beide onderste opties falen, probeer dan boven de trigger, uitgelijnd met de start-rand */
@position-try --top-start {
bottom: anchor(--dd-trigger top);
inset-inline-start: anchor(--dd-trigger inline-start);
min-inline-size: anchor(--dd-trigger width);
}
/* Probeer ten slotte boven de trigger, uitgelijnd met de eind-rand */
@position-try --top-end {
bottom: anchor(--dd-trigger top);
inset-inline-end: anchor(--dd-trigger inline-end);
min-inline-size: anchor(--dd-trigger width);
}
Deze reeks definieert een geavanceerd, meertraps fallback-mechanisme. De solver zal elke `position-try` definitie in volgorde proberen. Voor elke poging past hij de gespecificeerde CSS-eigenschappen toe en controleert vervolgens of het gepositioneerde element (het dropdownmenu) binnen zijn gedefinieerde `overflow-boundary` (bijv. de viewport) blijft. Zo niet, dan wordt die poging afgewezen en wordt de volgende geprobeerd. Dit iteratieve evaluatie- en selectieproces is de essentie van multi-constraint resolutie.
Het is belangrijk op te merken dat `inset` eigenschappen, wanneer gebruikt zonder `position: absolute;` of `position: fixed;`, vaak verwijzen naar het bevattende blok. Echter, binnen een `@position-try` regel voor een absoluut gepositioneerd verankerd element, hebben ze specifiek betrekking op het anker. Bovendien kunnen eigenschappen zoals `margin` en `padding` binnen `@position-try` cruciale offsets en afstvoorkeuren toevoegen waar de solver ook rekening mee zal houden.
Een andere krachtige functie gerelateerd aan constraint solving is position-try-options. Deze eigenschap kan binnen een `@position-try` regel worden gebruikt om aanvullende voorwaarden of voorkeuren voor een specifieke poging te specificeren, zoals `flip-block` of `flip-inline`, die de oriëntatie automatisch kunnen omdraaien als er overflow optreedt. Terwijl `position-try()` de sequentiële fallback afhandelt, kan `position-try-options` extra logica introduceren binnen een enkele poging, waardoor de intelligentie van de solver verder wordt vergroot.
Praktische Toepassingen en Wereldwijde UI-patronen
De implicaties van CSS Anchor Positioning en zijn robuuste Constraint Solver zijn enorm, en vereenvoudigen de ontwikkeling van vele veelvoorkomende, doch complexe, UI-componenten. De inherente aanpasbaarheid maakt het van onschatbare waarde voor wereldwijde applicaties die moeten inspelen op diverse linguïstische en culturele contexten.
1. Tooltips & Popovers
Dit is wellicht de meest eenvoudige en universeel voordelige toepassing. Tooltips of informatie-popovers kunnen consistent in de buurt van hun triggerelementen verschijnen, en passen zich dynamisch aan aan schermranden, scrollposities en zelfs verschillende schrijfmodi (zoals verticale tekst in sommige Oost-Aziatische talen, waar `block-start` en `inline-start` zich anders gedragen).
2. Contextmenu's
Rechtermuisknop-contextmenu's zijn een vast onderdeel van veel desktop- en webapplicaties. Het is cruciaal dat ze openen zonder te worden afgesneden door de viewport en idealiter in de buurt van de cursor of het aangeklikte element. De constraint solver kan meerdere fallback-posities definiëren (bijv. naar rechts, dan links, dan boven, dan onder) om zichtbaarheid te garanderen, ongeacht waar op het scherm de interactie plaatsvindt. Dit is met name belangrijk voor gebruikers in regio's met variërende schermresoluties of voor degenen die touch-apparaten gebruiken.
3. Dropdowns & Selects
Standaard HTML <select> elementen zijn vaak beperkt in styling en positionering. Aangepaste dropdowns bieden meer flexibiliteit, maar brengen positionerings-overhead met zich mee. Anchor positioning kan ervoor zorgen dat de dropdown-lijst altijd in een zichtbaar gebied opent, zelfs als de triggerknop zich bovenaan of onderaan het scherm bevindt. Op een wereldwijde e-commercesite moet bijvoorbeeld een valuta- of taalkiezer-dropdown altijd toegankelijk en leesbaar zijn.
4. Modale Dialogen en Zwevende Panelen (ten opzichte van een trigger)
Terwijl hoofd-modale dialogen vaak gecentreerd zijn, profiteren kleinere zwevende panelen of "mini-modals" die verschijnen als reactie op een specifieke actie (bijv. een "deel"-paneel na het klikken op een deelknop) enorm. Deze panelen kunnen worden verankerd aan hun trigger, wat een duidelijke visuele verbinding biedt en hun positie aanpast om overlap van inhoud of schermgrenzen te vermijden.
5. Interactieve Kaarten/Grafieken en Datavisualisaties
Wanneer gebruikers over een datapunt in een grafiek of een locatie op een kaart zweven, verschijnt er vaak een informatievenster. Anchor positioning kan ervoor zorgen dat deze infovensters leesbaar en binnen het canvas blijven, en hun plaatsing dynamisch aanpassen terwijl de gebruiker verschillende datapunten verkent, zelfs in complexe, data-intensieve dashboards die door analisten wereldwijd worden gebruikt.
Overwegingen voor Wereldwijde Aanpasbaarheid
Het gebruik van logische eigenschappen (`block-start`, `inline-start`, `block-end`, `inline-end`) binnen `@position-try` regels is een significant voordeel voor wereldwijde ontwikkeling. Deze eigenschappen passen automatisch hun fysieke richting aan op basis van de schrijfmodus van het document (bijv. `ltr`, `rtl`, `vertical-lr`). Dit betekent dat een enkele set CSS-regels voor anchor positioning moeiteloos kan omgaan met:
- Links-naar-rechts (LTR) talen: Zoals Engels, Frans, Spaans, Duits.
- Rechts-naar-links (RTL) talen: Zoals Arabisch, Hebreeuws, Perzisch. Hier verwijst `inline-start` naar de rechterrand, en `inline-end` naar de linker.
- Verticale schrijfmodi: Gebruikt in sommige Oost-Aziatische schriften, waar `block-start` kan verwijzen naar de boven- of rechterrand, en `inline-start` naar de boven- of linkerrand.
Deze inherente ondersteuning voor internationalisatie vermindert drastisch de hoeveelheid conditionele CSS of JavaScript die traditioneel nodig is om UI-componenten wereldwijd vriendelijk te maken. De constraint solver evalueert eenvoudigweg de beschikbare ruimte en de voorkeuren binnen de huidige schrijfmoduscontext, waardoor uw UI's echt klaar zijn voor de wereld.
Voordelen van CSS Anchor Positioning met Multi-Constraint Resolutie
De adoptie van deze nieuwe CSS-functie brengt een veelheid aan voordelen voor zowel ontwikkelaars als gebruikers:
- Declaratieve & Onderhoudbare Code: Door complexe positioneringslogica van JavaScript naar CSS te verplaatsen, wordt code gemakkelijker te lezen, te begrijpen en te onderhouden. Ontwikkelaars declareren wat ze willen, en de browser regelt het hoe.
- Superieure Prestaties: Native browserimplementatie betekent dat positioneringsberekeningen op een laag niveau worden geoptimaliseerd, vaak op de GPU, wat leidt tot soepelere animaties en een betere algehele UI-responsiviteit in vergelijking met door JavaScript aangedreven oplossingen.
- Inherente Responsiviteit: Verankerde elementen passen zich automatisch aan veranderingen in de viewport-grootte, apparaatoriëntatie, inhoudsschaling en zelfs browserzoomniveaus aan, zonder extra inspanning van de ontwikkelaar.
- Verbeterde Toegankelijkheid: Consistente en voorspelbare positionering verbetert de gebruikerservaring voor iedereen, vooral voor degenen die afhankelijk zijn van ondersteunende technologieën. Elementen verschijnen consequent waar verwacht, wat de cognitieve belasting vermindert.
- Robuustheid en Betrouwbaarheid: De constraint solver maakt UI's veerkrachtiger. Het behandelt op elegante wijze randgevallen waarbij elementen anders zouden kunnen worden afgesneden of verdwijnen, en zorgt ervoor dat kritieke informatie zichtbaar blijft.
- Wereldwijde Aanpasbaarheid: Door het gebruik van logische eigenschappen respecteert het positioneringssysteem van nature verschillende schrijfmodi en richtingen, waardoor het gemakkelijker wordt om vanaf de basis echt geïnternationaliseerde applicaties te bouwen.
- Verminderde JavaScript-afhankelijkheid: Vermindert of elimineert de noodzaak van JavaScript voor veelvoorkomende positioneringstaken aanzienlijk, wat leidt tot kleinere bundelgroottes en minder potentiële bugs.
Huidige Status en Toekomstperspectieven
Eind 2023 / begin 2024 is CSS Anchor Positioning nog steeds een experimentele functie. Het wordt actief ontwikkeld en verfijnd binnen browser-engines (bijv. Chrome, Edge) en kan worden ingeschakeld via experimentele webplatform-feature-vlaggen in browserinstellingen (bijv. `chrome://flags/#enable-experimental-web-platform-features`). Browserleveranciers werken samen via de CSS Working Group om de specificatie te standaardiseren en interoperabiliteit te garanderen.
De reis van experimentele functie naar wijdverbreide adoptie omvat rigoureus testen, feedback van de ontwikkelaarsgemeenschap en continue iteratie. De potentiële impact van deze functie is echter onmiskenbaar. Het vertegenwoordigt een fundamentele verschuiving in hoe we complexe UI-uitdagingen benaderen, en biedt een declaratieve, performante en intrinsiek adaptieve oplossing die voorheen onbereikbaar was met pure CSS.
Vooruitkijkend kunnen we verdere verfijningen van de capaciteiten van de solver verwachten, mogelijk met meer geavanceerde opties voor het prioriteren van beperkingen, aangepaste overflow-grenzen en integratie met andere aankomende CSS-functies. Het doel is om ontwikkelaars een steeds rijkere toolkit te bieden voor het bouwen van zeer dynamische en gebruiksvriendelijke interfaces.
Praktische Inzichten voor Ontwikkelaars
Voor ontwikkelaars wereldwijd die voorop willen blijven lopen in webtechnologie, zijn hier enkele praktische inzichten:
- Schakel Vlaggen in en Experimenteer: Schakel experimentele webplatform-functies in uw browser in en begin met experimenteren met CSS Anchor Positioning. Probeer bestaande op JS-gebaseerde tooltip- of dropdown-logica opnieuw te implementeren met deze nieuwe CSS.
- Heroverweeg JavaScript Positionering: Bekijk uw huidige UI-componenten die JavaScript gebruiken voor positionering. Identificeer mogelijkheden waar Anchor Positioning een robuuster en performanter native alternatief kan bieden.
- Geef Prioriteit aan Gebruikerservaring: Denk na over hoe de constraint solver de gebruikerservaring kan verbeteren door ervoor te zorgen dat kritieke UI-elementen altijd zichtbaar en intelligent gepositioneerd zijn, ongeacht de schermgrootte of gebruikersinteractie.
- Omarm Logische Eigenschappen: Integreer actief logische eigenschappen (`block-start`, `inline-start`, etc.) in uw positioneringsstrategieën, vooral binnen `@position-try` regels, om UI's te bouwen die inherent aanpasbaar zijn aan verschillende schrijfmodi en culturen.
- Geef Feedback: Als experimentele functie is de feedback van ontwikkelaars cruciaal. Meld problemen, suggereer verbeteringen of deel uw positieve ervaringen met browserleveranciers en de CSS Working Group.
- Blijf op de Hoogte: Volg nieuws over webstandaarden, browserreleases en ontwikkelaarsblogs (zoals deze!) om op de hoogte te blijven van de laatste ontwikkelingen in CSS Anchor Positioning en andere geavanceerde webfuncties.
Conclusie
De CSS Anchor Positioning Constraint Solver, met zijn krachtige multi-constraint resolutiemogelijkheden, markeert een significante sprong voorwaarts in frontend-ontwikkeling. Het stelt ontwikkelaars in staat om geavanceerde, adaptieve en zeer responsieve gebruikersinterfaces te creëren met een ongekend gemak en efficiëntie. Door declaratief relaties en fallback-strategieën te definiëren, kunnen we de complexiteit van dynamische elementpositionering overdragen aan de browser, wat een nieuw tijdperk van performante, toegankelijke en wereldwijd aanpasbare webervaringen ontsluit.
We zullen niet langer beperkt zijn tot breekbare JavaScript-oplossingen of eindeloos pixel-perfect maken. In plaats daarvan kunnen we de native intelligentie van de browser benutten om UI's te bouwen die elegant inspelen op de diverse behoeften van gebruikers over de hele wereld. De toekomst van UI-positionering is hier, en het is gebouwd op een fundament van intelligente constraint solving.