## El Problema con el Posicionamiento JavaScript Durante años, posicionar tooltips, popovers y menús desplegables requería librerías JavaScript como Popper.js o Floating UI. Calculabas posiciones, manejabas colisiones con el viewport, gestionabas eventos de scroll y luchabas guerras de z-index. CSS Anchor Positioning elimina todo eso. Declaras a qué elemento anclar, y dónde colocar el elemento posicionado - eso es todo. ## El Concepto Central Anchor Positioning funciona en dos pasos: 1. **Nombrar un ancla** - Dale a cualquier elemento un `anchor-name` 2. **Posicionar relativo a él** - Usa `position-anchor` y `position-area` en el elemento posicionado ```css /* Paso 1: Nombrar el ancla */ .trigger-button { anchor-name: --my-button; } /* Paso 2: Posicionar relativo a él */ .tooltip { position: fixed; position-anchor: --my-button; position-area: top center; } ``` Ese es todo el concepto. Sin coordenadas JavaScript, sin resize observers, sin cálculos manuales. ## Ejemplo Real: Modal Flotante de Resumen Así es como posiciono el modal del resumidor de IA en este sitio: ```css .summary-bubble { position: fixed; bottom: 2rem; right: 2rem; width: 64px; height: 64px; anchor-name: --summary-bot; } .summary-modal { position: fixed; position-anchor: --summary-bot; position-area: top left; max-width: 400px; width: 90vw; } ``` El modal se posiciona automáticamente arriba y a la izquierda del botón. Cuando el botón se mueve (diferentes tamaños de pantalla, posición de scroll), el modal lo sigue. ## Entendiendo `position-area` La propiedad `position-area` usa un modelo de grilla de 9 regiones: ``` ┌─────────┬────────┬──────────┐ │ top │ top │ top │ │ left │ center │ right │ ├─────────┼────────┼──────────┤ │ center │ center │ center │ │ left │ │ right │ ├─────────┼────────┼──────────┤ │ bottom │ bottom │ bottom │ │ left │ center │ right │ └─────────┴────────┴──────────┘ ``` Valores comunes: - `top center` - Arriba del ancla, centrado - `bottom left` - Debajo del ancla, alineado a la izquierda - `span-top span-left` - Expandirse por el cuadrante superior izquierdo ## Ejemplo Real: Notificación de Botón Compartir Aquí hay una notificación posicionada relativa a un botón de compartir: ```css #share { anchor-name: --share-button; } #notification { position: fixed; position-anchor: --share-button; bottom: calc(anchor(top) + 10px); /* Posicionar 10px arriba del borde superior del ancla */ } ``` La función `anchor()` te da control preciso - referencia cualquier borde del ancla y agrega offsets. ## Ejemplo Real: Navegación de Carrusel Para navegación de scroll markers en carruseles: ```css ul.carousel { anchor-name: --badges-carousel; /* ... estilos de scroll snap */ } ul.carousel::scroll-marker-group { position: fixed; position-anchor: --badges-carousel; position-area: block-end; /* Posicionado debajo del carrusel */ } ``` ## Nombres de Ancla Dinámicos Para listas donde cada elemento necesita su propio ancla, usa propiedades personalizadas CSS: ```astro --- const items = ['Item 1', 'Item 2', 'Item 3'] --- {items.map((item, i) => (