Catálogo · Estructura de página
Hero
Abre una página de inicio o landing con un título, una frase, las acciones principales y una imagen opcional.
Encaja mejor en: landing — la parte superior de una landing page, bajo la cabecera
Ejemplo
El hero de la página de un evento, con su fecha, título, entradilla y dos acciones.
12 and 13 May 2027 · Seville
Acme Summit 2027
Two days of talks and workshops for retail teams.
This column is narrower than 51rem, so the picture goes under the text; on a page of full width it sits beside it. The frame is empty, so it shows its flat surface, and the title is a paragraph: this page already has its <h1>.
New in version 2
Stock counts that keep up with the shop
Acme Stock updates every shelf as it sells, so you reorder before it runs out.
The same hero with luz-hero--centered: one column at any width, the text centred. A picture that bleeds cannot be shown in this column, as it runs to the edges of the window: see Variants and options.
Problemas conocidos
No se conocen problemas.
Código
Copiar el marcado
import "@luz-ds/catalog/components/hero.css";
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@luz-ds/catalog@0.3.0/dist/components/hero.min.css" integrity="sha384-yY6Z5/WOdLWJ5gJVsJd6tYONFWiaFA3uu8P2nHPqbXqdGhDCL5lVbif0VJ2a5CnB" crossorigin="anonymous">
<section class="luz-hero o-grid o-grid--split" aria-labelledby="hero-title">
<div class="luz-hero__copy">
<p class="luz-hero__eyebrow">12 and 13 May 2027 · Seville</p>
<h1 class="luz-hero__title" id="hero-title">Acme Summit 2027</h1>
<p class="luz-hero__lead">Two days of talks and workshops for retail teams.</p>
<div class="o-actions">
<a class="luz-btn luz-btn--primary" href="#register">Register</a>
<a class="luz-btn luz-btn--outline" href="#programme">See the programme</a>
</div>
</div>
<div class="luz-hero__media">
<div class="luz-image luz-image--4x3">
<img src="/img/venue-1280.jpg" width="1280" height="960" alt="The main hall, full, before the opening talk" fetchpriority="high" decoding="async">
</div>
</div>
</section>
Variantes y opciones
Dos modificadores, --centered y __media--bleed, como en la plantilla de página de producto. La etiqueta superior, la entradilla y la imagen son opcionales; sin imagen, el texto ocupa todo el ancho.
El bloque es una clase de landing sobre la cuadrícula dividida de core.
| Clase | Qué hace |
|---|---|
.luz-hero | En un <section> con .o-grid.o-grid de core: espacio encima, separación entre elementos y columnas de al menos 24 rem (--luz-grid-min); cuando cada una dispone de 24 rem, son dos columnas iguales; si no, una debajo de otra. |
.luz-hero | Una columna a cualquier ancho: el texto mide como máximo 48 rem, está centrado y también lo están sus acciones; la imagen queda debajo. |
.luz-hero | El texto y las acciones, primero en el código fuente. |
.luz-hero | Una línea breve sobre el título, en versalitas pequeñas con tipografía mono; en árabe se usa sans. |
.luz-hero | El título: tipografía de encabezado, tamaño 4xl y líneas equilibradas; 3xl por debajo de 1024 px y 2xl a 640 px o menos. |
.luz-hero | Una o dos frases de hasta 70 caracteres de ancho, en color de texto secundario; tamaño xl, lg por debajo de 1024 px y base a 640 px o menos. |
.luz-hero | La segunda columna, que contiene el marco de imagen de core. |
.luz-hero | En un hero centrado, la imagen va de un extremo al otro de la ventana, más allá de los márgenes interiores de la página, sin desplazamiento lateral. El marco tiene una proporción de 16:9, salvo que indiques otra. |
Cómo funciona
Un <section> con el nombre de su título, maquetado con la cuadrícula dividida de core y con estilos de components/hero.css de @luz-ds/catalog. No usa JavaScript.
- Las columnas son la cuadrícula dividida intrínseca de core: dependen del espacio disponible para el hero, no del ancho de la ventana. Un hero tan ancho como la página se divide a partir de unos 900 px de ventana; en una columna estrecha o con texto más grande permanece en una sola columna.
- El orden es el del código fuente: el texto va primero, a la izquierda en una página de izquierda a derecha y a la derecha en una de derecha a izquierda.
- Las acciones son el grupo de acciones de core,
.o-actions: a 640 px o menos, los botones se apilan y ocupan todo el ancho. - El desbordamiento mide la ventana sin una unidad de viewport, que cuenta la barra de desplazamiento y mueve la página lateralmente: la raíz de la página se convierte en un contenedor de tamaño (
container-type: inline-size). La columna debe centrarse respecto a la ventana, como hace.o-containerde core. - El
emde un título toma el color de--luz-title-accent, que por defecto es el del título. - Las clases solo cambian el aspecto. El título debe ser el
<h1>de la página.
Sin JavaScript
No cambia nada: el hero es HTML y CSS.
Teclado y ARIA
El hero no tiene interacción propia: Tab recorre sus enlaces en el orden del código fuente.
aria-labelledbyen<section>apunta al título, así que el hero es una región con el nombre de la página.- Déjalo al principio de
<main>para que el enlace para saltar al contenido llegue justo antes.
Contraste y foco están en la pestaña Diseño.
Diseño
Cuándo usarlo
Usa un hero al principio de una página de inicio, una landing o una portada para explicar en pocas palabras de qué trata el sitio o el evento y qué hacer primero.
Cuándo no usarlo
No lo uses en una página a la que se llega para leer o completar una tarea: utiliza un <h1> sencillo y una entradilla, que ocupan menos espacio.
- Un hero por página y solo al principio.
- No lo uses para un mensaje en medio de la página: utiliza una sección y, si tiene que destacar, una banda de core.
Buenas y malas prácticas
Redacción del contenido
El título explica de qué trata el sitio o el evento, en estilo de frase y con menos de diez palabras.
- La etiqueta superior es un dato que hace falta conocer enseguida (una fecha y un lugar, el nombre de un producto), no un eslogan. Omítela si no la necesitas.
- La entradilla tiene una o dos frases breves: explica qué obtiene quien lee.
- Los botones empiezan con un verbo e indican adónde llevan: «Inscríbete», «Ver el programa».
- El
altde la imagen indica qué muestra, o queda vacío si es solo decorativa. Es lo primero de la página: no usesloading="lazy".
Contraste y foco
El título usa el color de texto principal y la etiqueta superior y la entradilla, el secundario, sobre la página. Los botones son de core.
| Parte | Color sobre el fondo | Claro | Oscuro | Alto contraste | Mínimo |
|---|---|---|---|---|---|
Etiqueta superior | --luz-text-secondary on --luz-surface-page | 6.2:1 | 7.5:1 | 19.3:1 | 4.5:1 |
Título | --luz-text-primary on --luz-surface-page | 15.8:1 | 15.1:1 | 21.0:1 | 4.5:1 |
Entradilla | --luz-text-secondary on --luz-surface-page | 6.2:1 | 7.5:1 | 19.3:1 | 4.5:1 |
Calculado a partir de los valores de los tokens de cada modo, redondeado hacia abajo. El mínimo es el de WCAG 2.2 AA: 4,5:1 para el texto y 3:1 para los anillos de foco, los bordes y los iconos.
- Foco: el hero no recibe el foco; sus botones conservan el anillo de foco del botón.
- Acento: el
emde un título tiene el color del título, salvo que definas--luz-title-accent. El color es tuyo: comprueba el contraste con la superficie de la página en todos los modos que ofrezcas; el texto necesita 4,5:1. - No pongas el texto sobre la imagen: el contraste dependería de ella y no hay ningún token que lo controle.
Tokens que utiliza
Los 19 tokens que leen, por familia, las reglas de .luz-hero en components/hero.css. Cada familia enlaza a su página, donde están los valores de todos los modos. En Figma son variables con los mismos nombres: consulta Tokens en Figma.
- Spacing and sizing
--luz-space-2xl,--luz-space-3xl,--luz-space-lg,--luz-space-md,--luz-space-sm,--luz-space-xl,--luz-space-xs- Typography
--luz-font-heading,--luz-font-mono,--luz-font-sans,--luz-text-2xl,--luz-text-3xl,--luz-text-4xl,--luz-text-base,--luz-text-lg,--luz-text-xl,--luz-text-xs
Teclado y ARIA están en la pestaña Código.