Aspect ratio
Un contenedor que mantiene su forma antes de que cargue el contenido multimedia, muestra un brillo mientras carga, hace aparecer el contenido con un fundido y muestra una alternativa si falla.
pnpm dlx shadcn@latest add https://hextaui.com/r/aspect-ratio.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/aspect-ratio.tsx components/ui/skeleton.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Proporciones
ratio acepta un número, una cadena "w/h" o una cadena "w:h".
Carga lenta
La caja mantiene su forma y muestra el shimmer hasta que llega la imagen; entonces la imagen aparece con un fundido, así que nada de lo que hay debajo se mueve. Pulsa Reload para verlo de nuevo.
Imagen rota
Cuando la imagen falla, se oculta el glifo de imagen rota del navegador y se muestra un icono de fallback. Pasa fallback para reemplazarlo, o fallback={null} para no mostrar nada.
Superposición
Los hijos con posición absoluta se sitúan encima del elemento multimedia. La caja no recorta nada, así que los anillos de foco en los enlaces superpuestos siguen visibles.
Sin placeholder
placeholder={false} desactiva el shimmer de carga, el fundido de entrada y el fallback, para el comportamiento básico de shadcn.
Responsive
Reemplaza la proporción en un breakpoint con una clase aspect. Esta es cuadrada en pantallas pequeñas y md:aspect-video desde md.
Dentro de una columna flex centrada
La caja ocupa todo el ancho por defecto, así que llena la columna en lugar de colapsar a cero cuando el padre centra a sus hijos.
Contenido de texto
Los hijos que no son multimedia reciben la caja y nada más. Colócalos tú mismo.
Como figura
Mantén los pies de foto fuera de la caja para que no cambien la proporción.
Proporción no válida
0, los números negativos y las cadenas que no se pueden analizar vuelven a un cuadrado y registran una advertencia en desarrollo.
De derecha a izquierda
Las superposiciones posicionadas con propiedades lógicas como start-3 siguen la dirección de lectura.
- La caja tiene
aria-busymientras carga su contenido multimedia. - El fallback es decorativo y está oculto para las tecnologías de asistencia. El texto
altde la imagen sigue disponible cuando falla la carga, así que escríbelo siempre. - Con movimiento reducido, el contenido multimedia aparece sin fundido.
Acepta todos los atributos del elemento que renderiza. El contenido multimedia colocado directamente dentro, un <img>, <picture> o <video>, llena la caja con object-cover y hereda su radio.
| Prop | Tipo | Predeterminado |
|---|---|---|
ratio | number | `${number}/${number}` | `${number}:${number}` | 1 |
placeholderMuestra un shimmer mientras carga el contenido multimedia y un fallback cuando falla. | boolean | true |
fallbackSe muestra cuando falla el contenido multimedia. null no muestra nada. | ReactNode | <IconPhotoOff /> |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="aspect-ratio" | Selecciona la caja en CSS. |
data-state | loading, loaded o error. Se establece solo cuando placeholder está activado y la caja contiene contenido multimedia. |
aria-busy | Presente mientras el contenido multimedia carga. |
--ratio | La proporción analizada como número. |
data-slot="aspect-ratio-placeholder" | El shimmer que se muestra durante la carga o tras un error. |
data-slot="aspect-ratio-fallback" | El contenedor alrededor del fallback. |
parseAspectRatio(ratio) convierte cualquier proporción aceptada en un número, con 1 como valor de respaldo. Úsalo para dimensionar otros elementos de la misma manera. También se exportan los tipos AspectRatioValue y AspectRatioProps.
- SkeletonMarcadores de posición que esperan 150ms antes de mostrarse, toman el tamaño exacto del contenido que envuelven y lo hacen aparecer con un fundido sin mover nada.
- AccordionEncabezados apilados que revelan cada uno un panel, con un movimiento de altura que puedes invertir a mitad de camino y paneles que siguen siendo buscables mientras están cerrados.
- CarouselDiapositivas nativas con scroll-snap, con inercia en pantallas táctiles, arrastre con el ratón, teclas de flecha, puntos, miniaturas y una reproducción automática que se pausa cuando debe.
- CollapsibleUn panel que se muestra y se oculta con un movimiento de altura que puedes invertir a mitad de camino, sin saltos en el diseño.
- ResizablePaneles que puedes separar arrastrando, con un divisor discreto que despierta al pasar el cursor, tamaños que se deslizan al restablecer o colapsar, y diseños que persisten.
- Scroll areaScroll nativo con una barra de desplazamiento mínima, bordes que se desvanecen solo donde hay más por ver y un vistazo opcional que corta el último elemento por la mitad.