La Etiqueta BUTTON

Permite crear botones interactivos en una página web para ejecutar acciones, enviar formularios o activar funciones de JavaScript.
La etiqueta <button> permite crear botones interactivos en una página web para ejecutar acciones, enviar formularios o activar funciones de JavaScript. Es fundamental para la interacción del usuario y debe usarse de manera semántica y accesible.
Sintaxis básica
<button type="button|submit|reset">Texto del botón</button>
Atributos clave:
-
type: Define el comportamiento del botón (obligatorio para evitar comportamientos inesperados).-
submit: Envía un formulario (valor por defecto si no se especifica). -
reset: Restablece los campos de un formulario. -
button: Acción personalizada (requiere JavaScript).
-
-
disabled: Desactiva el botón (<button disabled>).
Casos de uso comunes
Botón de acción genérica (JavaScript)
<button type="button" onclick="alert('¡Hola!')">Haz clic</button>
Envío de formularios
<form id="miFormulario"> <input type="text" name="email"> <button type="submit">Enviar</button> </form>
Botón de reinicio
<form> <input type="text" value="Texto inicial"> <button type="reset">Restablecer</button> </form>
Atributos avanzados
| Atributo | Descripción |
|---|---|
form |
Vincula el botón a un formulario externo por su id |
formaction |
URL alternativa para enviar el formulario (solo type="submit") |
formmethod |
Método HTTP alternativo (GET, POST, etc.) |
autofocus |
Enfoca el botón al cargar la página |
aria-label |
Texto descriptivo para accesibilidad (si el botón solo tiene iconos) |
Accesibilidad
Texto claro:
Evita textos ambiguos como "Hacer clic aquí".
Enfoque visual:
Asegura que el botón tenga un estilo de :focus visible.
Ejemplo accesible:
<button type="button" aria-label="Cerrar ventana"> <span aria-hidden="true">×</span> </button>
Estilización con CSS
Personaliza la apariencia:
button {
background: #3498db;
color: white;
border: none;
padding: 12px 24px;
border-radius: 4px;
cursor: pointer;
transition: background 0.3s;
}
button:hover {
background: #2980b9;
}
button:disabled {
background: #95a5a6;
cursor: not-allowed;
}
Errores comunes
Olvidar el atributo type
<!-- ¡Podría enviar un formulario accidentalmente! --> <button>Botón peligroso</button>
Usar <div> o <a> como botones
<!-- Incorrecto --> <div onclick="accion()">Falso botón</div> <a role="button">Enlace disfrazado</a>
<!-- Correcto --> <button type="button">Botón real</button>
Ignorar estados de interacción
<!-- Sin estilo para hover o focus --> <button style="background: blue;">Botón plano</button>
Ejemplos avanzados
Botón con icono y texto
<button type="button"> <img src="icono-descarga.svg" alt="" aria-hidden="true"> Descargar PDF </button>
Botón asociado a formulario externo
<form id="formExterno"></form> <!-- Botón fuera del formulario --> <button type="submit" form="formExterno">Guardar</button>
Botón de carga (spinner)
<button type="button" id="cargando">
<span class="texto">Enviar</span>
<span class="spinner" hidden></span>
</button>
<script>
document.getElementById('cargando').addEventListener('click', function() {
this.querySelector('.texto').hidden = true;
this.querySelector('.spinner').hidden = false;
this.disabled = true;
});
</script>
Buenas prácticas
-
Semántica: Usa
<button>para acciones,<a>para navegación. -
Seguridad: Valida datos antes de procesar acciones en el backend.
-
Rendimiento: Evita múltiples clics con
disableddurante procesos asíncronos. -
Internacionalización: Usa
langy traduce textos para sitios multilingües.
Comparación: <button> vs <input type="button">
| Característica | <button> |
<input type="button"> |
|---|---|---|
| Contenido interno | Permite HTML (texto, imágenes) | Solo texto (value) |
| Flexibilidad CSS | Mayor control de estilo | Limitado |
| Accesibilidad | Mejor soporte ARIA | Menos opciones |
| Uso recomendado | Acciones complejas | Casos simples sin formato especial |
Conclusión:
La etiqueta <button> es esencial para crear interfaces interactivas y accesibles. Recuerda:
- Definir siempre el
type. - Priorizar la accesibilidad con ARIA y texto descriptivo.
- Usar CSS para una experiencia visual coherente.
¡Transforma tus acciones web en experiencias intuitivas y profesionales!