How do I create a button item?

Guía Definitiva para Crear Botones de Interfaz

25/03/2015

Valoración: 4.48 (4012 votos)

Los botones son, sin lugar a dudas, uno de los elementos más fundamentales en cualquier interfaz de usuario (UI). Son el puente principal entre el usuario y la acción, el mecanismo que permite ejecutar comandos, tomar decisiones y navegar a través de una aplicación o un juego. Un botón bien diseñado no solo es funcional, sino que también guía al usuario de manera intuitiva, mejorando drásticamente la experiencia general. En este artículo, exploraremos a fondo el universo de los botones, desde su creación y tipos básicos hasta las personalizaciones más avanzadas que te permitirán construir interfaces verdaderamente efectivas y estéticamente agradables.

How do I create a button item?
Set it to "button" to create a button item. Specifies the item's identifier. Use this name to access the form item in the itemOption (id) and getButton (name) methods. Specifies the button's vertical alignment. Specifies whether the item is visible. Specifies the item's position regarding other items in a group, tab, or the whole UI component.
Índice de Contenido

¿Qué es un Botón y Dónde se Utiliza?

Un botón es un elemento de formulario que, como su nombre indica, consiste en un área clickeable que ejecuta una acción personalizada cuando el usuario interactúa con ella. Su apariencia y posición son completamente personalizables para adaptarse a las necesidades del diseño.

Los botones son omnipresentes en el diseño de interfaces modernas y los encontrarás en casi todas partes. Su ubicación estratégica es clave para una buena usabilidad. Generalmente se sitúan en lugares como:

  • Ventanas Modales: Para acciones de confirmación o cancelación (Ej: "Aceptar", "Cancelar").
  • Formularios: Para enviar datos (Ej: "Registrarse", "Enviar Mensaje").
  • Tarjetas (Cards): Ofreciendo acciones contextuales sobre un elemento específico (Ej: "Ver más", "Añadir al carrito").
  • Barras de Herramientas: Proporcionando acceso rápido a funciones comunes (Ej: "Guardar", "Imprimir").

Los Tres Tipos Fundamentales de Botones

La mayoría de las librerías de componentes de UI modernas, como Material-UI, ofrecen tres variantes principales de botones. Cada una tiene un nivel de énfasis visual diferente y se utiliza para distintos propósitos dentro de la jerarquía de una aplicación.

1. Botones de Texto (Text Buttons)

Estos botones tienen el menor énfasis visual. Se utilizan típicamente para acciones secundarias o menos pronunciadas, donde no se quiere distraer del contenido principal. Son ideales para diálogos y tarjetas, ya que ayudan a mantener el foco en la información presentada.

Ejemplo de código:

<Button variant="text">Texto</Button> <Button>Primario</Button> <Button disabled>Deshabilitado</Button> <Button href="#text-buttons">Enlace</Button>

2. Botones Contenidos (Contained Buttons)

Son botones de alto énfasis, distinguidos por el uso de un color de relleno y, a menudo, una sombra (elevación) para que destaquen. Se reservan para las acciones primarias y más importantes de tu aplicación, aquellas que quieres que el usuario vea y utilice con prioridad.

Ejemplo de código:

<Button variant="contained">Contenido</Button> <Button variant="contained" disabled>Deshabilitado</Button> <Button variant="contained" href="#contained-buttons">Enlace</Button>

Si deseas un aspecto más plano, puedes eliminar la sombra de elevación utilizando la propiedad `disableElevation`.

<Button variant="contained" disableElevation>Sin Elevación</Button>

3. Botones Delineados (Outlined Buttons)

Estos botones representan un punto intermedio de énfasis. Contienen acciones que son importantes, pero no son la acción principal de la pantalla. Son una alternativa de menor énfasis que los botones contenidos, pero con mayor jerarquía visual que los botones de texto.

Ejemplo de código:

<Button variant="outlined">Primario</Button> <Button variant="outlined" disabled>Deshabilitado</Button> <Button variant="outlined" href="#outlined-buttons">Enlace</Button>

Tabla Comparativa de Variantes de Botón

VarianteNivel de ÉnfasisCaso de Uso TípicoApariencia Visual
Texto (Text)BajoAcciones secundarias en diálogos, pie de tarjetas.Solo texto, sin borde ni fondo.
Contenido (Contained)AltoAcción principal de una vista (Ej: "Comprar ahora").Fondo de color sólido y elevación.
Delineado (Outlined)MedioAcciones importantes pero no primarias (Ej: "Aprender más").Borde de color, fondo transparente.

Personalización: Dando Forma y Función a tus Botones

Un botón no es solo su tipo. La verdadera potencia reside en la personalización para que se ajuste perfectamente a tus necesidades funcionales y de diseño.

Manejando Clics y Eventos

La función principal de un botón es ejecutar una acción. Esto se logra a través del manejador de eventos `onClick`. Todos los componentes de botón aceptan esta propiedad, que ejecuta una función cuando el usuario hace clic.

<Button onClick={() => { alert('¡Botón clickeado!'); }}> Haz clic aquí </Button>

Paleta de Colores

Puedes cambiar el color de los botones fácilmente usando la propiedad `color`. Las opciones comunes predefinidas suelen ser `primary`, `secondary`, `success`, `error`, entre otras, que se vinculan a la paleta de colores de tu tema de diseño.

Where are buttons located in a UI?
Buttons communicate actions that users can take. They are typically placed throughout your UI, in places like: The Button comes with three variants: text (default), contained, and outlined. Text buttons are typically used for less-pronounced actions, including those located: in dialogs, in cards.
<Button color="secondary">Secundario</Button> <Button variant="contained" color="success">Éxito</Button> <Button variant="outlined" color="error">Error</Button>

Tamaños

Para botones más grandes o más pequeños, se utiliza la propiedad `size`. Los valores habituales son `small`, `medium` (por defecto) y `large`.

<Button variant="contained" size="small">Pequeño</Button> <Button variant="contained" size="medium">Mediano</Button> <Button variant="contained" size="large">Grande</Button>

Iconos: Un Recurso Visual Poderoso

Añadir iconos a los botones mejora enormemente la experiencia de usuario (UX), ya que los humanos reconocemos los símbolos más rápidamente que el texto. Por ejemplo, un icono de papelera junto a la palabra "Eliminar" no deja lugar a dudas sobre la acción.

Puedes añadir iconos al principio (`startIcon`) o al final (`endIcon`) de la etiqueta del botón.

<Button variant="outlined" startIcon={<DeleteIcon />}> Eliminar </Button> <Button variant="contained" endIcon={<SendIcon />}> Enviar </Button>

Botones Especializados para Tareas Avanzadas

Botones de Icono (Icon Buttons)

A veces, un icono es suficiente. Los botones de icono son comunes en barras de herramientas o para acciones compactas como "favorito" o "configuración". Son esencialmente iconos clickeables que deben tener una etiqueta de accesibilidad (`aria-label`) para los lectores de pantalla.

<IconButton aria-label="eliminar" color="primary"> <DeleteIcon /> </IconButton> <IconButton color="secondary" aria-label="añadir una alarma"> <AlarmIcon /> </IconButton>

Botón de Carga de Archivos

Crear un botón para subir archivos requiere un pequeño truco. El botón en sí se convierte en una etiqueta (`label`) para un campo de entrada (`input`) de tipo `file` que está visualmente oculto. Esto permite una personalización completa del botón mientras se mantiene la funcionalidad nativa del navegador para seleccionar archivos.

<Button component="label" role={undefined} variant="contained" tabIndex={-1} startIcon={<CloudUploadIcon />} > Subir archivo <VisuallyHiddenInput type="file" /> </Button>

Botones con Estado de Carga (Loading)

Es una excelente práctica de UX mostrar al usuario que una acción está en proceso. Usando la propiedad `loading`, el botón puede mostrar un indicador de carga (como un spinner) y se deshabilita automáticamente para evitar clics múltiples.

<Button loading variant="outlined"> Enviando... </Button>

Limitaciones y Soluciones Comunes

Una de las peculiaridades que puedes encontrar es el comportamiento del cursor en botones deshabilitados. Por defecto, un componente `ButtonBase` deshabilitado utiliza `pointer-events: none;` en CSS, lo que evita que aparezca el cursor `not-allowed` (el círculo tachado).

Si deseas mostrar ese cursor para mejorar la claridad, tienes dos opciones:

  1. Solución solo con CSS: Puedes sobrescribir los estilos para el estado deshabilitado.
.MuiButtonBase-root:disabled { cursor: not-allowed; pointer-events: auto; }

Sin embargo, esta solución tiene la desventaja de que puede interferir con tooltips en elementos deshabilitados y no funciona si el elemento renderizado no es una etiqueta `

  1. Cambio en el DOM: Envuelve el botón deshabilitado en otro elemento (como un ``) y aplica el estilo de cursor a ese contenedor.
<span style={{ cursor: 'not-allowed' }}> <Button component={Link} disabled> Botón deshabilitado </Button> </span>

Esta segunda opción es más robusta y funciona con cualquier tipo de elemento subyacente.

Preguntas Frecuentes (FAQ)

¿Cuál es la principal diferencia entre un botón "contenido" y uno "delineado"?
La diferencia principal es el nivel de énfasis visual. Un botón contenido tiene un fondo sólido y se usa para la acción más importante en una pantalla. Un botón delineado tiene solo un borde y se usa para acciones secundarias importantes que no deben competir con la acción principal.
¿Puedo usar mis propios colores personalizados en los botones?
¡Sí! La mayoría de los frameworks de UI permiten extender la paleta de colores del tema. Puedes definir tus propios colores personalizados (por ejemplo, "brand" o "warning") y luego usarlos en la propiedad `color` de tus botones para mantener una consistencia de marca en toda tu aplicación.
¿Es realmente necesario usar iconos en los botones?
No es estrictamente necesario, pero es muy recomendable para mejorar la UX. Los iconos proporcionan pistas visuales rápidas que reducen la carga cognitiva del usuario, haciendo que la interfaz sea más rápida de escanear y más intuitiva de usar, especialmente en aplicaciones con muchas acciones o en interfaces móviles con espacio limitado.
¿Qué hago si mi botón deshabilitado no muestra el cursor de "no permitido"?
Como se mencionó en la sección de limitaciones, esto se debe a la propiedad CSS `pointer-events: none;`. La solución más fiable es envolver tu botón deshabilitado en un `` al que le apliques el estilo `cursor: 'not-allowed';` para asegurar que el feedback visual sea el esperado por el usuario.

Si quieres conocer otros artículos parecidos a Guía Definitiva para Crear Botones de Interfaz puedes visitar la categoría Juegos.

Subir