Ir al contenido

Botón

Usa .btn con un modificador de color. Funciona en <button>, <a> e <input type="submit">.

<button type="button" class="btn btn--primary">Primary</button>
<button type="button" class="btn btn--secondary">Secondary</button>
<button type="button" class="btn btn--success">Success</button>
<button type="button" class="btn btn--danger">Danger</button>
<button type="button" class="btn btn--warning">Warning</button>
<button type="button" class="btn btn--info">Info</button>
<button type="button" class="btn">Neutro</button>

btn--outline-{rol} deja el fondo transparente y se rellena en hover.

<button type="button" class="btn btn--outline-primary">Primary</button>
<button type="button" class="btn btn--outline-secondary">Secondary</button>
<button type="button" class="btn btn--outline-success">Success</button>
<button type="button" class="btn btn--outline-danger">Danger</button>
<button type="button" class="btn btn--outline-warning">Warning</button>
<button type="button" class="btn btn--outline-info">Info</button>

Para acciones secundarias: btn--ghost muestra un fondo suave en hover y btn--link se ve como un enlace.

<button type="button" class="btn btn--ghost">Ghost</button>
<button type="button" class="btn btn--link">Link</button>
<button type="button" class="btn btn--primary btn--sm">Pequeño</button>
<button type="button" class="btn btn--primary">Normal</button>
<button type="button" class="btn btn--primary btn--lg">Grande</button>

Los íconos SVG van dentro del botón, con aria-hidden="true". Miden 1.25em y toman el color del texto (currentColor). Para un botón con solo un ícono usa btn--icon y describe la acción con aria-label.

<button type="button" class="btn btn--primary">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 4v11M7 10l5 5 5-5M5 20h14" /></svg>
Descargar
</button>
<button type="button" class="btn btn--outline-primary">
Continuar
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6" /></svg>
</button>
<button type="button" class="btn btn--primary btn--icon" aria-label="Agregar">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14M5 12h14" /></svg>
</button>
<button type="button" class="btn btn--ghost btn--icon" aria-label="Cerrar">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18" /></svg>
</button>
<button type="button" class="btn btn--primary btn--block">Enviar mensaje</button>
  • Deshabilitado: atributo disabled (o la clase is-disabled).
  • Activo: aria-pressed="true" en botones que se activan y desactivan, aria-expanded="true" en botones que abren un menú, o la clase is-active.
<button type="button" class="btn btn--primary" disabled>Deshabilitado</button>
<button type="button" class="btn btn--outline-primary" aria-pressed="true">Activo</button>
<button type="button" class="btn btn--outline-primary" aria-pressed="false">Inactivo</button>

Usa <a> si el botón lleva a otra página y <button> si ejecuta una acción. Para deshabilitar un enlace, quita el href y agrega aria-disabled="true".

<a href="#" class="btn btn--primary">Enlace</a>
<input type="submit" class="btn btn--outline-primary" value="Enviar">
<a class="btn btn--primary" aria-disabled="true">Enlace deshabilitado</a>
  • Agrega type="button" a los botones que no envían un formulario (el tipo por defecto es submit).
  • El foco con teclado muestra un contorno de 2 px en el color primary.
  • Un botón con solo un ícono necesita aria-label.
  • Las transiciones se desactivan con prefers-reduced-motion.
  • Con los colores por defecto, estas variantes quedan bajo el contraste AA (4,5:1) para texto normal: btn--success (3,4:1), btn--outline-secondary y btn--outline-warning (1,6:1) y btn--outline-info (1,7:1). Evítalas para texto importante o ajusta los colores en el tema.
Clase Uso
btn Base. Sin modificador es un botón neutro.
btn--{rol} Sólido: primary, secondary, success, danger, warning, info.
btn--outline-{rol} Contorno, con los mismos roles.
btn--ghost Transparente, con fondo suave en hover.
btn--link Con aspecto de enlace.
btn--sm, btn--lg Tamaños.
btn--block Ocupa todo el ancho.
btn--icon Solo ícono (cuadrado). Requiere aria-label.
is-active, is-disabled Estados por clase.

Se cambian en el CSS del sitio con un selector que apunte al botón, como .hero .btn (definirlas en un contenedor no basta: .btn las redefine).

VariableValor por defectoUso
--ds-btn-bgcolor-mix(in srgb, var(--ds-color-text) 10%, var(--ds-color-surface))Fondo.
--ds-btn-colorvar(--ds-color-text)Color del texto y de los íconos.
--ds-btn-border-colortransparentColor del borde.
--ds-btn-hover-bgcolor-mix(in srgb, var(--ds-color-text) 18%, var(--ds-color-surface))Fondo en hover y estado activo.
--ds-btn-hover-colorvar(--ds-btn-color)Texto en hover y estado activo.
--ds-btn-hover-border-colorvar(--ds-btn-border-color)Borde en hover y estado activo.
--ds-btn-padding-y0.375remEspacio vertical interno.
--ds-btn-padding-x0.75remEspacio horizontal interno.
--ds-btn-gapvar(--ds-space-2)Separación entre ícono y texto.
--ds-btn-font-familyvar(--ds-font-family-base)
--ds-btn-font-sizevar(--ds-font-size-base)
--ds-btn-font-weightvar(--ds-font-weight-regular)
--ds-btn-line-heightvar(--ds-line-height-base)
--ds-btn-radiusvar(--ds-radius-full)Radio de las esquinas (píldora).
--ds-btn-focus-colorvar(--ds-color-primary)Color del contorno de foco.
--ds-btn-disabled-opacity0.5Opacidad cuando está deshabilitado.