JSFiddle - React, Tailwind, and code Playground
HTML
<p>Radio:</p>
<div class="box">
<label><input type="radio" name="box"><i>Left</i></label>
<label><input type="radio" name="box"><i>Middle</i></label>
<label><input type="radio" name="box"><i>Middle</i></label>
<label><input type="radio" name="box"><i>Right</i></label>
</div>
<p>Checkbox:</p>
<div class="box">
<label><input type="checkbox" name="box"><i>Left</i></label>
<label><input type="checkbox" name="box"><i>Middle</i></label>
<label><input type="checkbox" name="box"><i>Middle</i></label>
<label><input type="checkbox" name="box"><i>Right</i></label>
</div>
<p>Single:</p>
<div class="box">
<label><input type="checkbox" name="box"><i>Left</i></label>
</div>
CSS
.box {
margin-top: 20px;
font-family: Arial, sans-serif;
font-size: 0;
}
.box input[type="radio"],
.box input[type="checkbox"] {
position: absolute;
top: -100px;
}
.box label i {
background-color: #fff;
padding: 10px;
font-style: normal;
cursor: pointer;
border-style: solid;
border-color: #aaa;
border-width: 1px 1px 1px 0;
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Chrome and Opera */
font-size: 16px;
}
.box input:checked + i {
background-color: #e6e6e6;
}
.box input:focus + i {
box-shadow: 0 0 5px rgba(81, 203, 238, 1);
}
.box input + i:active {
box-shadow: inset 10px 10px 10px -10px rgba(0, 0, 0, 0.3);
background-color: #ccc;
}
.box label:first-child i {
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
border-left: 1px solid #aaa;
}
.box label:last-child i {
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
}