Contenido y datos
Marquee
Una fila de logos o nombres que se desplaza sola en bucle cuando no entra en el ancho, como la de clientes de una home. Si entra, queda quieta y centrada.
import { Marquee } from "sebs7n-ui/marquee"Ejemplos
Clientes
Si no entran en el ancho, pasan en bucle; se pausa con el puntero encima o con el botón, y con foco en un link queda quieta. Con movimiento reducido queda quieta y se scrollea a mano.
import { Marquee } from "sebs7n-ui/marquee"
function Clients() {
return <Marquee aria-label="Clientes que facturan con nosotros" className="w-full" items={items} />
}Pocos, quietos
Si entran, la fila queda quieta y centrada: no hay nada que mover.
import { Marquee } from "sebs7n-ui/marquee"
function Few() {
return <Marquee aria-label="Clientes destacados" className="w-full" items={items.slice(0, 3)} />
}Props
Generadas del TypeScript del paquete. Las propias del componente, más las heredadas del primitivo que tienen algo que explicar —marcadas «heredada de Base UI»—. El resto está en la línea «hereda de».
Marquee
Hereda las props de <div>.
| Prop | Tipo | Por defecto | Descripción |
|---|---|---|---|
aria-label* | string | — | El nombre de la lista, que no se ve: «Clientes». |
items* | MarqueeItem[] | — | Los ítems de la fila, en orden. |
labels | Partial<MarqueeLabels> | — | Textos del botón de pausa: pause y play. Los que vienen por defecto son marqueeLabels. |
pauseControl | "button" | "press" | "button" | Cómo se pausa. button (por defecto): el botón de pausa al costado. press: tocar la franja la pausa y tocarla de nuevo la reanuda; el botón sigue estando para teclado y lector de pantalla, pero no se ve hasta tener el foco (2.2.2 pide un control, no que se vea siempre). |
speed | number | 40 | La velocidad del bucle, en píxeles por segundo. Por defecto, 40: la misma sensación con 4 logos que con 10. |
variant | "logos" | "cards" | "logos" | logos (por defecto): ítems de 44 de alto, centrados. cards: ítems que son cards, estirados a la altura del más alto. |
className | string | — | Se fusiona con las clases del componente vía cn() (tailwind-merge): lo que pongas gana. |
Teclado
- Tab
- Recorre los links de la fila una sola vez; con foco en un link, la fila queda quieta y se scrollea hasta él.
- Enter · Espacio
- En el botón de pausa, detiene o reanuda el bucle.
Accesibilidad
- La fila es una lista con nombre (
aria-label, obligatorio). La tanda copia del bucle va conaria-hiddeneinert: el lector y Tab no la recorren. - En bucle trae un botón visible «Pausar» / «Reanudar» (WCAG 2.2.2): el hover no existe en un celular. Se pausa también con el puntero sobre los ítems y fuera de pantalla; la pausa del botón dura hasta «Reanudar», que la vuelve a mover aunque el botón siga con el foco.
- Con foco en un link deja de moverse y pasa a scroll a mano, así el link enfocado queda a la vista y sin cortar (WCAG 2.4.7 y 2.4.11). Con
prefers-reduced-motionno se mueve: si desborda, se scrollea a mano. - Sin JS, y en el HTML del servidor, es la fila quieta con todos los ítems.
Reglas de uso
- Para una prueba social de marketing (clientes, prensa), no para información que haya que leer: lo que se mueve no se lee.
- Cada ítem es
{ id, node, href? }:nodepuede ser un SVG o un<img>conalt; conhref, un link que abre en otra pestaña. speeden píxeles por segundo (40 por defecto): la duración sale del ancho de la tanda (que se vuelve a medir si un logo o la fuente cargan después), así se siente igual con 4 ítems que con 10.- La animación es la utilidad
animate-marqueedetheme.css. Solo por subpath (sebs7n-ui/marquee).