Saltar al contenido principal

Catálogo · Documentación

Armazón de página

La página de un sitio de documentación en tres columnas: la barra lateral, el contenido y el índice lateral; en el móvil se reduce a una columna.

Encaja mejor en: documentación — la estructura de cada página de un sitio de documentación

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

La estructura es la página completa, así que no tiene un ejemplo en vivo dentro de otra página. El marcado de abajo es una página completa: cópialo, añade tu propio contenido y cambia el tamaño de la ventana.

Tiene tres columnas a partir de 80rem, dos a partir de 60rem y una por debajo; cuando no hay tercera columna, el índice lateral queda encima del contenido. Las plantillas de documentación muestran la misma página completa.

Problemas conocidos

No se conocen.

Código

Copiar el marcado

Bundler
import "@luz-ds/catalog/components/docs-layout.css";
HTML
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@luz-ds/catalog@0.3.0/dist/components/docs-layout.min.css" integrity="sha384-4mL+wj5xGmF98hYy2houcLGyUl4xNNTemLvMbtsCj1A7wpQ7RE3Ng26GboK9hgm9" crossorigin="anonymous">

La estructura en <body>, seguida de la cabecera, la barra lateral, el índice lateral, el contenido y el pie, en el orden en que se recorren con el teclado. El enlace para saltar al contenido lo lleva hasta él, más allá de la barra lateral y del índice:

HTML
<body class="o-shell luz-docs-layout">
  <a class="luz-skip-link" href="#main-content">Skip to content</a>
  <header>
    <button class="luz-nav-toggle" type="button" popovertarget="docs-nav" aria-label="Menu">…</button>
    <p><a href="/">Acme docs</a></p>
  </header>
  <nav class="luz-sidebar luz-docs-nav" id="docs-nav" aria-label="Acme docs" popover>…</nav>
  <aside class="luz-page-rail" aria-label="About this page">…</aside>
  <main class="o-main luz-docs-main" id="main-content" tabindex="-1">
    <header class="luz-doc-header">…</header>
    …
  </main>
  <footer>…</footer>
</body>

Variantes y opciones

Sin modificadores. Tres clases en elementos nativos y tres propiedades personalizadas.

Clase o propiedadEfecto
.luz-docs-layout
En <body>, con .o-shell de core: las columnas y la posición de cada parte
.luz-docs-nav
Con .luz-sidebar de catalog, en <nav>: la columna de la barra lateral
.luz-docs-main
Con .o-main, en <main>: la columna del contenido. Sus elementos se ajustan al ancho de lectura
.luz-page-rail
En un <aside>: la tercera columna a partir de 80rem, por encima del contenido. Consulta Índice lateral
--luz-docs-measure
Una línea de texto: 46rem. Asígnala a la estructura en tu CSS para cambiarla
--luz-docs-nav-w, --luz-page-rail-w
La barra lateral y el índice lateral: 16.5rem y 14rem
--luz-page-rail-top
A qué distancia de la parte superior queda fijado el índice lateral. Auméntala si hay una cabecera fija

Cómo funciona

CSS de components/docs-layout.css de @luz-ds/catalog sobre la estructura de core y la barra lateral de catalog. Docs define las columnas y el ancho de lectura; core aporta la cuadrícula y la barra lateral, el cajón.

  • A partir de 80rem hay tres columnas: barra lateral, contenido e índice lateral. A partir de 60rem hay dos, y el índice lateral se muestra encima del contenido. Por debajo, hay una, en el orden del marcado: barra lateral, índice lateral, contenido y pie.
  • Un <header> sin estilos ocupa todas las columnas. El pie queda debajo del contenido y la barra lateral se extiende a su lado.
  • Entre 769px y 60rem, la barra lateral es el primer bloque, por encima del contenido. A 768px o menos, pasa a ser el cajón de la barra lateral: un popover que abre el botón de menú.
  • Todos los elementos del contenido respetan --luz-docs-measure, así que un ejemplo tiene el ancho de una línea de texto. Al imprimir, se omite el índice lateral.

Sin JavaScript

No cambia nada: la maquetación está hecha con CSS. El cajón es un popover que abre el atributo popovertarget del botón de menú, sin necesidad de scripts.

En un navegador sin la API de popover, la barra lateral permanece en la página, por encima del contenido.

Teclado y ARIA

  • Orden: el del código fuente; la cuadrícula no lo cambia. Enlace para saltar al contenido, cabecera, barra lateral, índice lateral, contenido y pie. El enlace lleva al contenido, más allá de la barra lateral y del índice.
  • Enlace para saltar al contenido: coloca primero el enlace para saltar al contenido, dirigido a <main>, para que quien use el teclado pueda omitir la barra lateral.
  • Regiones: un <header> hijo de <body> es el banner; nombra el <nav> con el nombre del sitio y el <aside> «Acerca de esta página».
  • Teclas: pulsa Enter o Espacio en el botón de menú para abrir el cajón; Esc para cerrarlo. El navegador se encarga.

La pestaña Diseño incluye el contraste y el foco.

Diseño

Cuándo usarlo

Usa esta estructura para las páginas de un sitio de documentación: se leen una tras otra, con una barra lateral que las reúne y una lista de las secciones de cada página.

  • Tu sitio tiene más páginas de las que caben en una cabecera.
  • Quienes leen recorren las páginas en orden.

Cuándo no usarlo

No uses esta estructura para una página que no sea de documentación: presupone que hay una barra lateral y una columna de contenido.

  • Para una página sin barra lateral, usa .o-page de core: consulta la página y sus bandas.
  • Para una aplicación web, usa App; para un blog, CMS.

Qué hacer y qué no

Sí Coloca el índice lateral entre la barra lateral y el contenido. «En esta página» aparece antes del texto y el enlace para saltar al contenido lo omite.
<nav class="luz-sidebar luz-docs-nav">…</nav>
<aside class="luz-page-rail">…</aside>
<main class="o-main luz-docs-main">…</main>
No Coloques el índice lateral después del contenido. En el móvil, «En esta página» quedaría al final, después de todo lo que enumera.
<nav class="luz-sidebar luz-docs-nav">…</nav>
<main class="o-main luz-docs-main">…</main>
<aside class="luz-page-rail">…</aside>

Cómo escribir el contenido

La estructura apenas incluye texto propio, y cada texto es un nombre.

  • Enlace para saltar al contenido: «Saltar al contenido».
  • Barra lateral: usa aria-label con el nombre de la documentación, por ejemplo, «Documentación de Acme». No uses «Navegación»: el rol ya lo indica.
  • Índice lateral: «Acerca de esta página». Su lista se llama «En esta página».
  • Enlaces de la barra lateral: los títulos de las páginas, en el orden en que se recorren.
  • Botón de menú: «Menú».

Contraste y foco

La estructura no define sus propios colores. El texto se muestra sobre la superficie de la página y la barra lateral conserva sus propios colores.

ElementoColor sobre fondoClaroOscuroAlto contrasteMínimo
Texto del contenido
--luz-text-primary on --luz-surface-page
15.8:1
15.1:1
21.0:1
4.5:1
Enlace de la barra lateral
--luz-sidebar-text on --luz-sidebar-bg
10.9:1
10.0:1
14.1:1
4.5:1
Enlace actual de la barra lateral
--luz-sidebar-active-text on --luz-sidebar-active-bg
10.3:1
10.2:1
21.0: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 botones conservan el anillo de core, de 2 px, definido por --luz-focus-ring.
  • Adaptación: a 320px la página tiene una sola columna y no se desplaza en horizontal. Las pruebas lo comprueban.

Tokens que usa

Los 4 tokens que usan las reglas de .luz-docs-layout en components/docs-layout.css del catálogo, agrupados por familia. Cada familia enlaza a su página, donde se muestran los valores de todos los modos. En Figma son variables con los mismos nombres: consulta Tokens en Figma.

Spacing and sizing
--luz-space-3xl, --luz-space-lg, --luz-space-md, --luz-space-xl

La pestaña Código incluye teclado y ARIA.