Anchor positioning
Tooltips, menús y popovers pegados a su botón, solo con CSS.
Un elemento se coloca respecto a otro (anchor-name, position-anchor, position-area) y, si no cabe, prueba otras posiciones (position-try-fallbacks). Con popover y los comandos de HTML (commandfor, command) salen menús accesibles sin JavaScript ni librerías como Floating UI.
Funciona en los tres motores desde enero de 2026 (Firefox 147). web-features 3.40.0 ya no la marca como Baseline porque ahora cuenta las palabras clave anchor-valid y anchor-visible, que solo tiene Safari 27.
Para qué sirve
- Tooltips y menús contextuales que no se salen de la pantalla
- Etiquetas que siguen a un elemento al desplazarse
- Selectores y desplegables a medida
Demo
Arrastra el punto. La etiqueta está anclada a él solo con CSS y, cuando no cabe, cambia de lado (position-try-fallbacks). Debajo, menús con popover y commandfor: sin JavaScript.
Compatibilidad
Disponibilidad limitada| Función | Escritorio | Móvil | |||||
|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Firefox Android | Safari iOS | |
| anchor-name y anchor() | 125Chrome: 125 | 125Edge: 125 | 147Firefox: 147 | 26Safari: 26 | 125Chrome: 125 | 147Firefox: 147 | 26Safari: 26 |
| position-area | 1291Chrome: 129 | 1291Edge: 129 | 147Firefox: 147 | 26Safari: 26 | 1291Chrome: 129 | 147Firefox: 147 | 26Safari: 26 |
| position-try-fallbacks | 128Chrome: 128 | 128Edge: 128 | 147Firefox: 147 | 26Safari: 26 | 128Chrome: 128 | 147Firefox: 147 | 26Safari: 26 |
| commandfor / command | 135Chrome: 135 | 135Edge: 135 | 144Firefox: 144 | 26.2Safari: 26.2 | 135Chrome: 135 | 144Firefox: 144 | 26.2Safari: 26.2 |
- 1The position-area property changes the position of absolutely positioned elements that do not find an anchor. See bug 388575663.
Compatibilidad generada en cada publicación desde MDN browser-compat-data 8.1.3 (24 sep 2026) · web-features 3.40.0 · revisión manual: 1 oct 2026
Código mínimo
<!doctype html>
<meta charset="utf-8">
<title>Anchor positioning · ejemplo mínimo</title>
<style>
body { font: 16px system-ui; min-height: 150vh; padding: 40vh 2rem; }
/* 1 · El ancla tiene un nombre */
#info { anchor-name: --info; }
/* 2 · El popover se coloca respecto a ella y cambia de lado si no cabe */
#tip {
position-anchor: --info;
position-area: block-end;
position-try-fallbacks: flip-block, flip-inline;
margin: 8px; inset: auto;
max-width: 240px; padding: 8px 12px; border: 1px solid #999;
}
</style>
<!-- popover + commandfor: abrir y cerrar sin JavaScript -->
<button id="info" commandfor="tip" command="toggle-popover">¿Qué es esto?</button>
<div id="tip" popover>
Un popover anclado al botón con CSS. Desplázate: si no cabe debajo, se coloca encima.
</div><!doctype html>
<meta charset="utf-8">
<title>Anchor positioning · ejemplo mínimo</title>
<style>
body { font: 16px system-ui; min-height: 150vh; padding: 40vh 2rem; }
/* 1 · El ancla tiene un nombre */
#info { anchor-name: --info; }
/* 2 · El popover se coloca respecto a ella y cambia de lado si no cabe */
#tip {
position-anchor: --info;
position-area: block-end;
position-try-fallbacks: flip-block, flip-inline;
margin: 8px; inset: auto;
max-width: 240px; padding: 8px 12px; border: 1px solid #999;
}
</style>
<!-- popover + commandfor: abrir y cerrar sin JavaScript -->
<button id="info" commandfor="tip" command="toggle-popover">¿Qué es esto?</button>
<div id="tip" popover>
Un popover anclado al botón con CSS. Desplázate: si no cabe debajo, se coloca encima.
</div>Novedades
- Safari 27: anclaje con transformaciones y las palabras clave anchor-valid y anchor-visible (en singular).
- Chrome 151 y Firefox 151 adoptan el nuevo valor inicial normal de position-anchor (Safari, en la 27).
- Sigue en Interop 2026.
- Firefox 147 la activa: ya está en los tres motores.
- commandfor y command son Baseline (Safari 26.2).
Ten en cuenta
- Anclar no crea relación de accesibilidad: añade el ARIA que haga falta o usa popover con commandfor.
- Los popovers traen inset: 0 y margin: auto del navegador; ponles inset: auto antes de anclarlos.
- Para navegadores antiguos existe el polyfill @oddbird/css-anchor-positioning (0.10.2).
Más información
Fuentes
- WebKit · Features for Safari 27.017 sep 2026
- MDN · Firefox 147 for developers13 ene 2026
- Chrome 151 release notes28 jul 2026
- web-features 3.40.0 · anchor-positioning30 sep 2026