Core · Campos de formulario
Partes del campo
Lo que envuelve a un control: la etiqueta, la pista, el error y el grupo.
Etiqueta, pista y error
El texto que da nombre a un control, dice lo que necesita e indica qué ha fallado.
Código
Copiar el marcado
.luz-field envuelve la etiqueta, el control, la pista y el error. aria-describedby une la pista y el error al control:
<div class="luz-field">
<label class="luz-field__label luz-field__label--required" for="slug">Slug</label>
<input class="luz-input luz-input--error" id="slug" type="text" required aria-invalid="true" aria-describedby="slug-hint slug-error">
<div class="luz-field__helper" id="slug-hint">Letters, numbers and dashes.</div>
<div class="luz-field__error" id="slug-error"><span class="u-sr-only">Error: </span>Use letters, numbers and dashes only.</div>
</div>
Variantes y opciones
.luz-field__label: la etiqueta visible.--requiredañade detrás un « *» rojo..luz-field__helper: la pista, bajo el control..luz-field__error: el error, en el color de peligro..luz-input--errorconaria-invalid="true": un subrayado de peligro de 2 px en el control.
Cómo funciona
La etiqueta da nombre al control mediante for e id, y un clic en ella lleva el foco al control. LUZ no marca un campo como no válido por ti: añade la clase de error, aria-invalid y el mensaje cuando falle tu validación.
Sin JavaScript
La etiqueta, la pista y el error son texto de tu HTML, así que se muestran sin script. El navegador sigue comprobando required y el tipo al enviar el formulario.
Teclado y ARIA
- Una etiqueta y un mensaje no reciben el foco y no tienen teclas propias.
- Escribe «Error: » antes del texto del error, oculto con
.u-sr-onlysi quieres, y enumera la pista y el error enaria-describedby.
El contraste y el foco están en la pestaña Diseño.
Diseño
Cuándo usarlo
Usa una etiqueta en cada control, una pista cuando el lector necesite el formato o el motivo, y un error cuando falle una comprobación.
- La etiqueta siempre se ve: permanece en pantalla mientras el lector escribe.
- El error va junto al campo al que se refiere, con palabras.
Cuándo no usarlo
No sustituyas una de estas partes por otra ni ocultes ninguna.
- Un texto de ejemplo (placeholder) no es una etiqueta: desaparece cuando el lector escribe.
- Un color o un borde solos no son un error: di qué está mal. No muestres el error solo en un aviso emergente: desaparece.
Qué hacer y qué no
Cómo escribir el contenido
- La etiqueta es un sustantivo corto, con mayúscula solo al inicio: «Nombre del proyecto».
- La pista indica el formato o por qué lo pides.
- El error dice qué está mal y cómo corregirlo. Si marcas los campos obligatorios con «*», explica una vez, sobre el formulario, qué significa.
Contraste y foco
Compartido con las demás partes del campo: contraste y foco de las partes del campo.
Tokens que usa
Compartido con las demás partes del campo: tokens de las partes del campo.
El teclado y ARIA están en la pestaña Código.
Grupo de campos
Un grupo con borde de controles relacionados, con el nombre de su leyenda.
Código
Copiar el marcado
Un <fieldset> nativo cuyo primer hijo es un <legend>:
<fieldset class="luz-fieldset">
<legend>Shipping address</legend>
<div class="luz-field">
<label class="luz-field__label" for="street">Street</label>
<input class="luz-input" id="street" type="text">
</div>
<div class="luz-field">
<label class="luz-field__label" for="city">City</label>
<input class="luz-input" id="city" type="text">
</div>
</fieldset>
Variantes y opciones
disableden el grupo desactiva todos los controles que contiene.role="group"conaria-labelledbyen un<div>da nombre a un grupo sin borde, como hace el ejemplo de la casilla de verificación.
Cómo funciona
Un <fieldset> nativo estilizado por components/form.css: un borde de 1 px, esquinas suaves y el fondo del campo. El <legend> es un texto pequeño en mayúsculas.
Sin JavaScript
No cambia nada: el grupo y su leyenda son nativos y no necesitan script.
Teclado y ARIA
- Un grupo no recibe el foco; Tab recorre los controles que contiene.
- La leyenda da nombre al grupo: el navegador expone un fieldset como un grupo con el nombre de su leyenda.
El contraste y el foco están en la pestaña Diseño.
Diseño
Cuándo usarlo
Usa un grupo de campos para controles que responden juntos a una sola pregunta.
- Un conjunto de botones de opción o de casillas, o una dirección.
- Pon la leyenda primero y mantenla corta.
Cuándo no usarlo
Un grupo de campos es un grupo con nombre, no una caja para maquetar.
- Un solo control: su etiqueta basta.
- Espaciado o columnas: los objetos de maquetación,
o-stackuo-grid. No envuelvas cada sección de un formulario.
Qué hacer y qué no
Cómo escribir el contenido
- La leyenda es un sustantivo o una pregunta: «Dirección de envío», «Plan».
- Sin dos puntos al final: el estilo añade el espacio.
- No repitas la leyenda en cada etiqueta.
Contraste y foco
Compartido con las demás partes del campo: contraste y foco de las partes del campo.
Tokens que usa
Compartido con las demás partes del campo: tokens de las partes del campo.
El teclado y ARIA están en la pestaña Código.
Contraste y foco de las partes del campo
La etiqueta y la pista son texto secundario de la página; el error es texto de peligro.
| Parte | Color sobre el fondo | Claro | Oscuro | Alto contraste | Mínimo |
|---|---|---|---|---|---|
Etiqueta | --luz-text-secondary sobre --luz-surface-page | 6,2:1 | 7,5:1 | 19,3:1 | 4,5:1 |
Pista | --luz-text-secondary sobre --luz-surface-page | 6,2:1 | 7,5:1 | 19,3:1 | 4,5:1 |
Mensaje de error | --luz-color-danger sobre --luz-surface-page | 5,3:1 | 11,7:1 | 9,3:1 | 4,5:1 |
Asterisco de obligatorio | --luz-color-danger sobre --luz-surface-page | 5,3:1 | 11,7:1 | 9,3:1 | 4,5:1 |
Borde de error | --luz-color-danger sobre --luz-input-bg | 5,5:1 | 10,8:1 | 9,3:1 | 3:1 |
Leyenda | --luz-text-secondary sobre --luz-input-bg | 6,4:1 | 6,9:1 | 19,3:1 | 4,5:1 |
Medido a partir de los valores de los tokens de cada modo y redondeado hacia abajo. El mínimo requerido es el de WCAG 2.2 AA: 4,5:1 para texto y 3:1 para anillos de foco, bordes e iconos.
- Foco: una etiqueta, un mensaje y una leyenda no lo reciben; un clic en una etiqueta lleva el foco a su control.
- No depende solo del color: un campo no válido tiene un borde inferior de 2 px y un mensaje de error con palabras.
- Objetivo táctil: un clic en una etiqueta llega a su control.
Tokens de las partes del campo
Los 12 tokens que leen las reglas de estos controles, por familia de tokens. Cada familia enlaza a su página, con los valores de todos los modos.
- Espaciado y tamaños
--luz-space-2xs,--luz-space-lg,--luz-space-md,--luz-space-xs- Tipografía
--luz-font-sans,--luz-text-md,--luz-text-sm- Radio
--luz-radius-md
Problemas conocidos
Ninguno conocido.