La etiqueta HTML <button>

Botones personalizados


Hasta ahora, hemos visto botones de tipo <input>, que suelen ser los botones apropiados para utilizar en formularios. Sin embargo, también existe otro tipo de botón, que puede ser útil incluso para usar fuera de formularios. Por defecto, este tipo de botones no tiene ninguna funcionalidad, pero podemos darsela mediante Javascript, como veremos más adelante.

La etiqueta <button>

La etiqueta <button> es muy similar a las que ya hemos visto, pero aún más simple. Recordemos que no tiene ninguna funcionalidad por defecto, por lo que sin Javascript sólo podemos hacer lo siguiente:

<button>Saludar</button>

Se trata de un botón «Saludar», que es pulsable, pero que no tiene ninguna funcionalidad, ya que de momento no hemos añadido ningún fragmento de código Javascript.

Este botón sólo podría tener funcionalidad sin Javascript si lo añadimos como último botón en una etiqueta <form>. De esta forma, automágicamente asumirá el rol de botón para enviar formulario.

Funcionalidad con Javascript

Veamos ahora como podemos añadir un fragmento de Javascript, asociado a ese botón. Normalmente, se le asocia una función Javascript cuando realicemos una acción con el botón, generalmente un click:

<button class="greet">Saludar</button>
const greetButton = document.querySelector(".greet");

function hello() {
  alert("Hello!!");
};

greetButton.addEventListener("click", hello);

Hemos establecido una función hello() que se ejecutará cada vez que hagas click en el botón. De esta forma, puedes asignar acciones mediante funciones a eventos especificos (no sólo a clicks de ratón).

Botón desactivado

Añadiendo el atributo disabled podemos indicar al navegador que ese botón debería encontrarse desactivado. Observa los dos botones del fragmento de código siguiente:

<button>Botón activado</button>
<button disabled>Botón desactivado</button>

Intenta evitar añadir clases disabled redundantes, ya que tenemos el atributo estándar con el funcionamiento implementado por defecto. Si quieres cambiarle el estilo, lo explicamos en el siguiente apartado.

Personalizar apariencia

Un botón HTML es un elemento de navegador normal y corriente, por lo que podemos darle estilo simplemente aplicando las propiedades CSS apropiadas para modificar su apariencia.

A continuación tienes un ejemplo donde hemos creado un botón normal, redondeado y un botón desactivado:

<button>
  <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
    <path fill="var(--fill, white)"
      d="M18.1 15.3c-.1.1-.3.2-.4.3l-2.4.4l1.7 3.6c.2.4 0 .8-.4
          1l-2.8 1.3c-.1.1-.2.1-.3.1c-.3 0-.6-.2-.7-.4L11.2
          18l-1.9 1.5c-.1.1-.3.2-.5.2c-.4 0-.8-.3-.8-.8V7.5c0-.5.3-.8.8-.8c.2 0
          .4.1.5.2l8.7 7.4c.3.2.4.7.1 1M6 12H4V4h16v8h-1.6l2.2 1.9c.8-.3 1.3-1
          1.3-1.9V4c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h2z" />
  </svg>
  Botón activado
</button>
<button disabled>Estoy desactivado</button>
<button class="rounded">Botón redondeado</button>
button {
  --color: #1283d1;
  --dark-color: color-mix(in srgb, var(--color), black 20%);
  --gradient-color: linear-gradient(var(--dark-color), var(--color));
  --darker-gradient: linear-gradient(to bottom, #0006, #0008);
  --border-color: var(--dark-color);

  display: flex;
  place-items: center;
  padding: 1rem 1.5rem;
  margin: 1.5rem;
  border: 0;

  font-family: Montserrat, sans-serif;
  text-shadow: 0 0 6px #0007;
  font-size: 1rem;
  color: #eee;

  background: var(--gradient-color);
  box-shadow:
    0 7px 0 var(--border-color),
    0 8px 3px #0004;
  transition: transform 0.25s, box-shadow 0.25s;

  & svg {
    --size: 24px;

    margin-right: 0.5rem;
    width: var(--size);
    height: var(--size);

    button:not([disabled]):active & path {
      --fill: #888;
    }
  }

  &.rounded {
    border-radius: 10px;
  }

  &:active:not([disabled]) {
    --fill: #888;

    color: #888;
    background: var(--darker-gradient), var(--gradient-color);
    box-shadow: 0 2px 0 var(--border-color), 0 3px 3px #0000004d;
    transform: translateY(5px);
  }

  &[disabled] {
    filter: grayscale(1);
    cursor: not-allowed;
  }
}

Observa que en el código CSS utilizamos características interesantes como CSS Nesting, variables CSS o gradientes CSS.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev