Catálogo · Documentación
Índice lateral
La lista de secciones de una página que permanece visible junto al contenido, con las acciones de la página debajo.
Encaja mejor en: documentación — el lateral de una página de documentación larga
Ejemplo
Una página con el índice lateral: la lista de secciones y las tres acciones.
Install
Add the tool to your project with your package manager.
Configure
The tool reads one file from the root of the project.
The config file
Name it acme.config.json.
The rail beside the text it lists, shown at any width: in a page it is a third column from 80rem and sits above the content below it. With the catalog's script, the section in view is marked as you scroll.
Problemas conocidos
Sin el script de catalog, ningún enlace aparece marcado como actual, aunque los enlaces siguen funcionando. No se ha probado con un lector de pantalla.
Código
Copiar el marcado
import "@luz-ds/catalog/components/page-rail.css";
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@luz-ds/catalog@0.3.0/dist/components/page-rail.min.css" integrity="sha384-rtBwzNTcuj/dbwc7iMTxhqi7LU16M2g06o5Y73z+/VADATrf1qbSJBM+Z2b3pNjq" crossorigin="anonymous">
El índice lateral como hijo directo de la estructura, entre la barra lateral y el contenido:
<aside class="luz-page-rail" aria-label="About this page">
<div class="luz-page-rail__inner">
<nav class="luz-page-rail__onpage" aria-labelledby="onpage-title">
<details class="luz-page-rail__fold" open>
<summary class="luz-page-rail__title" id="onpage-title">On this page</summary>
<ul class="luz-page-rail__list">
<li><a class="luz-sidebar__link luz-page-rail__link" href="#install">Install</a></li>
<li><a class="luz-sidebar__link luz-page-rail__link" href="#configure">Configure</a>
<ul class="luz-page-rail__sub">
<li><a class="luz-sidebar__link luz-page-rail__link" href="#config-file">The config file</a></li>
</ul>
</li>
</ul>
</details>
</nav>
<div class="luz-page-rail__actions">
<a href="https://example.com/docs/install.md">Copy page as Markdown</a>
<a href="https://example.com/edit/install.md">Edit this page</a>
<a href="https://example.com/issues/new">Report a problem</a>
</div>
</div>
</aside>
Variantes y opciones
No hay modificadores. El índice lateral es un <aside> que contiene una caja con dos bloques: la lista y las acciones.
| Clase | Efecto |
|---|---|
.luz-page-rail | En un <aside>: la tercera columna de la estructura a partir de 80rem, tan alta como el contenido; por debajo de ese ancho, aparece encima del contenido |
.luz-page-rail | En un <div>, único hijo del índice lateral, que contiene la lista y las acciones: a partir de 80rem es una caja fija dentro del índice, así nunca tapa el pie y se desplaza por sí sola, con espacio al principio para el anillo de foco |
.luz-page-rail | En el <nav> de la lista, hijo directo de __inner: limita el reinicio del plegado y su título, y sirve de anclaje para un script |
.luz-page-rail | En un <details> nativo. Escribe open para que la lista se muestre sin script. Cuando el índice lateral está encima del contenido, un script puede cerrarlo al cargar la página |
.luz-page-rail | En <summary>: «En esta página», en seminegrita. Es el nombre del <nav> |
.luz-page-rail | En el <ul>: sin viñetas y con una línea al principio |
.luz-page-rail junto con .luz-sidebar | En cada <a>: texto de la página, con 28px de alto. El enlace marcado con aria-current="true" tiene un borde al principio en el color de marca |
.luz-page-rail | En un <ul> anidado: el h3 de un h2, con sangría |
.luz-page-rail | Una columna de enlaces bajo una línea: copiar, editar e informar |
Cómo funciona
CSS de components/page-rail.css de @luz-ds/catalog sobre el enlace de la barra lateral y su seguimiento del desplazamiento de catalog.
- Por debajo de 80rem, el índice lateral aparece encima del contenido, bajo la cabecera. A partir de 80rem ocupa una columna tan alta como el contenido, y su caja interior queda fija a
--luz-page-rail-topdesde la parte superior de la ventana: se detiene al final del índice y nunca tapa el pie. La caja interior no supera la altura de la ventana y se desplaza por sí sola si la lista es más larga. - Los enlaces usan
.luz-sidebar__linkde catalog, así que su script marca la sección visible conaria-current="true". El índice lateral representa el enlace como texto de la página: la marca combina el grosor y un borde al principio, nunca depende solo del color. - La lista incluye cada
h2de la página y, debajo, cadah3. No hay más niveles de anidación. - «Copiar la página como Markdown» es un enlace al archivo Markdown de la página; te corresponde implementar su copia con un script. El índice lateral no se imprime.
Sin JavaScript
La lista y las acciones son enlaces, y el elemento <details> nativo funciona sin JavaScript. Ningún enlace aparece marcado como actual: esa marca la añade el script de catalog.
Teclado y ARIA
- Orden: el índice lateral aparece entre la barra lateral y el contenido en el código fuente, así que con Tab llegas a él antes que al texto: primero la lista y después las acciones. El enlace para saltar va al contenido, pasando por encima del índice.
- Teclas: pulsa Enter o Espacio en «En esta página» para plegar la lista. Con Tab llegas a cada enlace; con Enter vas a su sección.
- Nombres: el
<aside>es una zona de referencia llamada «Acerca de esta página»; el<nav>recibe el nombre de su resumen: «En esta página».
La pestaña Diseño incluye Contraste y foco.
Diseño
Cuándo usarlo
Usa el índice lateral en páginas con varias secciones para que quien lee vea su estructura y pueda saltar a una de ellas.
- Una página con tres secciones o más, lo bastante larga como para desplazarse.
- Acciones propias de la página, no del sitio: editar, informar y copiar.
Cuándo no usarlo
No uses el índice lateral en una página corta: leer dos enlaces lleva más que leer la propia página.
- Incluye las secciones de una sola página. Las páginas del sitio van en la barra lateral.
- No anides más allá de un
h3. Para mostrar el índice junto a un artículo, usa la tabla de contenidos de CMS.
Qué hacer y qué no
Cómo escribir el contenido
- Enlaces: el texto exacto del encabezado, breve y en estilo de frase.
- Título: «En esta página». Tradúcelo junto con el resto de la página.
- Acciones: empieza por el verbo, como en «Editar esta página» e «Informar de un problema». Mantén el orden: copiar, editar e informar.
Contraste y foco
La lista se muestra sobre la superficie de la página. El enlace bajo el cursor aparece sobre una superficie atenuada.
| Elemento | Color sobre fondo | Claro | Oscuro | Alto contraste | Mínimo |
|---|---|---|---|---|---|
Título | --luz-text-primary on --luz-surface-page | 15.8:1 | 15.1:1 | 21.0:1 | 4.5:1 |
Enlace | --luz-text-secondary on --luz-surface-page | 6.2:1 | 7.5:1 | 19.3:1 | 4.5:1 |
Enlace al pasar el cursor | --luz-text-primary on --luz-surface-muted | 15.8:1 | 15.1:1 | 20.1:1 | 4.5:1 |
Sección visible | --luz-text-primary on --luz-surface-page | 15.8:1 | 15.1:1 | 21.0:1 | 4.5:1 |
Marca de la sección visible | --luz-brand-primary on --luz-surface-page | 5.6:1 | 7.7:1 | 14.1:1 | 3:1 |
Acción | --luz-brand-primary on --luz-surface-page | 5.6:1 | 7.7:1 | 14.1:1 | 4.5:1 |
Anillo de foco | --luz-focus-ring on --luz-surface-page | 5.6:1 | 7.7:1 | 21.0:1 | 3:1 |
Medido a partir de los valores de los tokens de cada modo y redondeado hacia abajo. El mínimo es el de WCAG 2.2 AA: 4,5:1 para texto y 3:1 para anillos de foco, bordes e iconos.
- Foco: todos los enlaces y el resumen conservan el anillo de core, de 2 px,
--luz-focus-ring. - Marca: la sección visible se distingue por el grosor, un borde de 2px al principio y el color del texto.
- Área de activación: cada enlace, el resumen y cada acción miden al menos 28px de alto.
Tokens que usa
Los 14 tokens que leen las reglas de .luz-page-rail de components/page-rail.css del catálogo, agrupados por familia. 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.
- Color
--luz-brand-primary,--luz-divider,--luz-surface-muted,--luz-text-primary,--luz-text-secondary- Spacing and sizing
--luz-control-sm,--luz-space-2xs,--luz-space-lg,--luz-space-md,--luz-space-sm,--luz-space-xl,--luz-space-xs- Typography
--luz-font-sans,--luz-text-sm
La pestaña Código incluye Teclado y ARIA.