Saltar al contenido principal

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

Esta traducción la ha escrito una IA y todavía no la ha revisado ninguna persona. Leer esta página en inglés

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

Bundler
import "@luz-ds/catalog/components/page-rail.css";
HTML
<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:

HTML
<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.

ClaseEfecto
.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__inner
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__onpage
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__fold
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__title
En <summary>: «En esta página», en seminegrita. Es el nombre del <nav>
.luz-page-rail__list
En el <ul>: sin viñetas y con una línea al principio
.luz-page-rail__link junto con .luz-sidebar__link
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__sub
En un <ul> anidado: el h3 de un h2, con sangría
.luz-page-rail__actions
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-top desde 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__link de catalog, así que su script marca la sección visible con aria-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 h2 de la página y, debajo, cada h3. 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

Hazlo Usa en los enlaces las mismas palabras que en los encabezados, para que cada uno indique el nombre de su sección.
Evítalo No numeres los enlaces con rótulos como «Parte 1» y «Parte 2»: fuera de contexto, esa lista no significa nada.

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.

ElementoColor sobre fondoClaroOscuroAlto contrasteMí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.

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.