I have a Label and an Checkbox Input after it JS Fiddle Example:
<label for="accept">Accept</label>
<input id="accept" type="checkbox">
I need to style the checkbox so I tried the following:
<label for="accept">Accept</label>
<input id="accept" type="checkbox">
In this case the checkbox stops working and I am able to style it.
Then I swapped the position of Label and Checkbox Input:
<input id="accept" type="checkbox">
<label for="accept">Accept</label>
In this case it is working, styled, but the input and label appear in same line.
I would like to style the checkbox input and have the label and checkbox in different lines.
The CSS is the following:
input[type="checkbox"] {
  opacity: 0;
}
label {
  position: relative;
  display: block;
  padding-left: 22px;
}
label::before, label::after {
  position: absolute;
  content: "";
  display: block;
}
label::before{
  height: 16px;
  width: 16px;
  border: 1px solid;
  left: 0px;
  top: 3px;
}
label::after {
  height: 5px;
  width: 9px;
  border-left: 2px solid;
  border-bottom: 2px solid;
  transform: rotate(-45deg);
  left: 4px;
  top: 7px;
}
input[type="checkbox"] + label::after {
  content: none;
}
input[type="checkbox"]:checked + label::after {
  content: "";
}
input[type="checkbox"]:focus + label::before {
  outline: rgb(59, 153, 252) auto 5px;
}
Note: On my examples I also wasn't able to vertically align the checkbox with the label.
 
     
    