How to style a checkbox using CSS

In this post I’l show you exactly how to make awesome checkboxes with just CSS.

<div>
  <input id="first_name" type="checkbox" checked="checked">
  <label for="first_name">First Name</label>
</div>

Let’s take a few simple steps:

  • Hide the browser’s default checkbox.
  • Create a custom checkbox. We will use a pseudo-element :before for the substrate.
  • On mouse-over, add a darkly on 10% background color.
  • Style the checkmark/indicator, by pseudo-element :after
  • Show or hide the checkmark when checked.

Hide the browser’s default checkbox #

input {
  position: absolute;
  opacity: 0;
  height: 0;
  width: 0;
}

Create a custom checkbox #

label {
  position: relative;
  display: block;
  padding-left: 30px;
  cursor: pointer;
}
label:before {
  content: '';
  position: absolute;
  top: 50%;
  margin-top: -10px;
  left: 0;
  display: block;
  height: 20px;
  width: 20px;
  background-color: #50CDBE;
  border-radius: 3px;
}

On mouse-over, add a darkly on 10% background color #

label:hover:before {
  background-color: #1AE6E6;
}

Style the checkmark/indicator #

label:after {
  content: '';
  position: absolute;
  left: 7px;
  top: 1px;
  width: 5px;
  height: 10px;
  border: solid #333;
  border-width: 0 3px 3px 0;
  transform: rotate(45deg);
  opacity: 0;
}

Show or hide the checkmark when checked #

input:checked + label:after {
  opacity: 1;
}