Checkbox estilizado com HTML e CSS puro

Checkbox (caixa de seleção) estilizado com personalização de cores e tamanho

A tag de <input type="checkbox">, ou caixa de seleção, original do HTML é meio... pequena e feia

Podemos personalizar todos os checkboxes da nossa página para deixar com a estética mais próxima dos outros componentes

Lembrando que podemos indicar um rótulo <label> para o checkbox <input type="checkbox"> para contextualizar o recebimento de dados, apenas informando

<input id="banana" type="checkbox" /><label for="banana">Banana</label>

Aplicando seguinte estilo para todos os checkbox da página

/* Caixa para o marcador */
input[type="checkbox"] {
  appearance: none;
  position: relative;
  /* Tamanho */
  width: 1.125rem;
  height: 1.125rem;
  /* Cor do fundo e borda */
  background-color: #fff;
  border: 0.125rem solid #ccc;
  border-radius: 0.25rem;
}

/* Características do marcador */
input[type="checkbox"]::before {
  content: "";
  /* Posicionar no meio */
  position: absolute;
  top: 50%;
  left: 50%;
  /* Tamanho do marcador */
  width: 0.75rem;
  height: 0.75rem;
  /* Formato do marcador */
  clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
  /* Posicionar no meio */
  transform: translate(-50%, -50%) scale(0);
  transform-origin: center;
  transition: 0.125s transform ease-in-out;
  /* Cor do marcador */
  box-shadow: inset 1rem 1rem #fff;
}

/* Cor da caixa para o marcador */
input[type="checkbox"]:checked {
  background-color: #e0138c;
  border-color: #e0138c;
}

/* Características do marcador quando selecionado */
input[type="checkbox"]:checked::before {
  transform: translate(-50%, -50%) scale(1);
}

/* Características do marcador quando selecionado */
input[type="checkbox"]:disabled {
  opacity: 0.25;
}

input[type="checkbox"]:focus {
  border-color: #e0138c;
}

input[type="checkbox"]:focus + label {
  color: #e0138c;
}

Aplicando o CSS Nest que está com grande aceitação pelos navegadores

input[type="checkbox"] {
  appearance: none;
  position: relative;
  width: 1.125rem;
  height: 1.125rem;
  background-color: #fff;
  border: 0.125rem solid #ccc;
  border-radius: 0.25rem;

  &::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 0.75rem;
    height: 0.75rem;
    clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
    transform: translate(-50%, -50%) scale(0);
    transform-origin: center;
    transition: 0.125s transform ease-in-out;
    box-shadow: inset 1rem 1rem #fff;
  }

  &:checked {
    background-color: #e0138c;
    border-color: #e0138c;

    &::before {
      transform: translate(-50%, -50%) scale(1);
    }
  }

  &:disabled {
    opacity: 0.25;
  }

  &:focus {
    border-color: #e0138c;

    & + label {
      color: #e0138c;
    }
  }
}

Ou substituindo [type="checkbox"] pelo seletor de classe, como input.custom-checkout, e aplicando no atributo class na tag

Compartilhe:

Algumas recomendações

{JWA}

Johny W. Alves | Web Developer