Ir al contenido

Campos de texto

Cada campo va en un .form-field, que ordena y separa el form-label, el control y los textos de ayuda o validación. form-input sirve para <input> y <textarea>.

form-helper agrega un texto de ayuda. Conéctalo al campo con aria-describedby.

<div class="form-field">
<label class="form-label" for="nombre">Nombre</label>
<input class="form-input" type="text" id="nombre" name="nombre" placeholder="Ej.: Ana Pérez" autocomplete="name" aria-describedby="nombre-ayuda">
<p class="form-helper" id="nombre-ayuda">Como quieres que te llamemos.</p>
</div>

Agrega el atributo required al campo y marca el label con form-label__required. El asterisco va con aria-hidden="true": el lector de pantalla ya anuncia el campo como obligatorio por required.

<div class="form-field">
<label class="form-label" for="email">Email <span class="form-label__required" aria-hidden="true">*</span></label>
<input class="form-input" type="email" id="email" name="email" autocomplete="email" required>
</div>

Usa la misma clase form-input. El textarea tiene esquinas menos redondeadas, un alto mínimo de 120 px y solo cambia de tamaño en vertical.

<div class="form-field">
<label class="form-label" for="comentario">Comentario</label>
<textarea class="form-input" id="comentario" name="comentario" rows="4" placeholder="Cuéntanos qué necesitas"></textarea>
</div>

form-input--sm y form-input--lg tienen el mismo alto que btn--sm y btn--lg, así quedan alineados en una fila.

<input class="form-input form-input--sm" type="text" placeholder="Pequeño" aria-label="Ejemplo pequeño">
<input class="form-input" type="text" placeholder="Normal" aria-label="Ejemplo normal">
<input class="form-input form-input--lg" type="text" placeholder="Grande" aria-label="Ejemplo grande">
  • disabled: el campo se ve atenuado, no recibe foco y no se envía con el formulario.
  • readonly: se ve igual que un campo normal, recibe foco y se envía, pero no se puede editar.
<div class="form-field">
<label class="form-label" for="plan">Plan</label>
<input class="form-input" type="text" id="plan" value="Básico" disabled>
</div>
<div class="form-field">
<label class="form-label" for="cliente">Código de cliente</label>
<input class="form-input" type="text" id="cliente" value="DS-0042" readonly>
</div>

Para los estados de error y de campo válido, revisa Validación.

  • Todo campo necesita un label: <label for="…"> con el mismo valor del id del campo. Si no se muestra un label, usa aria-label. El placeholder no reemplaza al label.
  • Usa el type adecuado (email, tel, url, number) y autocomplete (name, email, tel…): en móvil se abre el teclado correcto y el navegador puede autocompletar.
  • El foco muestra el borde primary y un anillo de 4 px.
  • En iOS, un campo con letra menor a 16 px hace zoom al enfocarlo. Evita form-input--sm en formularios para móvil.
  • Con los colores por defecto, el borde del campo (--ds-color-border) tiene un contraste de 1,2:1, bajo el 3:1 que pide WCAG para los bordes de un control.
Clase Uso
form-field Agrupa label, control y textos. También sirve en <fieldset>.
form-label Label del campo (o <legend> de un grupo).
form-label__required Asterisco de campo obligatorio.
form-input Campo de texto en <input> y <textarea>.
form-input--sm, form-input--lg Tamaños.
form-helper Texto de ayuda.

form-input y form-select comparten estas variables:

VariableValor por defectoUso
--ds-form-input-bgvar(--ds-color-surface)Fondo.
--ds-form-input-colorvar(--ds-color-text)Color del texto.
--ds-form-input-border-colorvar(--ds-color-border)Color del borde.
--ds-form-input-placeholder-colorvar(--ds-color-text-muted)Color del texto de ejemplo (placeholder).
--ds-form-input-padding-y0.375remEspacio vertical interno.
--ds-form-input-padding-x0.75remEspacio horizontal interno.
--ds-form-input-font-sizevar(--ds-font-size-base)
--ds-form-input-line-heightvar(--ds-line-height-base)
--ds-form-input-radiusvar(--ds-radius-full)Radio de las esquinas (píldora).
--ds-form-input-multiline-radiusvar(--ds-radius-lg)Radio del textarea y del select múltiple.
--ds-form-input-textarea-min-height7.5remAlto mínimo del textarea.
--ds-form-input-focus-border-colorvar(--ds-color-primary)Borde con foco.
--ds-form-input-focus-ring-colorcolor-mix(in srgb, var(--ds-color-primary) 15%, transparent)Anillo de foco.
--ds-form-input-focus-ring-width4pxGrosor del anillo de foco.
--ds-form-input-invalid-colorvar(--ds-color-danger)Borde y anillo con error (is-invalid o aria-invalid).
--ds-form-input-valid-colorvar(--ds-color-success)Borde y anillo de un campo válido (is-valid).
--ds-form-input-disabled-opacity0.6Opacidad cuando está deshabilitado.
VariableValor por defectoUso
--ds-form-field-gapvar(--ds-space-2)Separación entre label, control y mensajes.
--ds-form-field-margin-bottomvar(--ds-space-4)Margen inferior (separa campos seguidos).
VariableValor por defectoUso
--ds-form-label-colorvar(--ds-color-text)Color del texto.
--ds-form-label-font-sizevar(--ds-font-size-sm)
--ds-form-label-font-weightvar(--ds-font-weight-regular)
--ds-form-label-required-colorvar(--ds-color-danger)Color del asterisco de campo obligatorio.
VariableValor por defectoUso
--ds-form-helper-colorvar(--ds-color-text-muted)Color del texto.
--ds-form-helper-font-sizevar(--ds-font-size-sm)