Take the native HTML checkboxes and jazz them up while still ensuring they are keyboard accessible. We use pseudo-elements and pseudo-classes to replicate the focus and the ability to tab to custom checkboxes.
/* hide native one */ input[type="checkbox"] + label { display: block; position: relative; padding-left: 2rem; } /* create a checkbox */ input[type="checkbox"] + label::before { content: ''; position: absolute; top: 4px; left: 0; width: 22px; height: 22px; background: #fff; } /* highlighted on checked */ input[type="checkbox"]:checked + label::before { background: #6505CC; } /* Create a checked mark */ input[type="checkbox"] + label::after { content: ''; position: absolute; top: 3px; left: 6px; width: 8px; height: 16px; border-width: 0 2px 2px 0; border-color: #fff; border-style: solid; transform: rotate(38deg); } /* Outline on focus */ input[type="checkbox"]:focus + label::before { outline: #5d9dd5 solid 1px; box-shadow: 0 0px 8px #5e9ed6; }