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"] {
display: none;
}
.box label i {
background-color: #fff;
padding: 10px;
font-style: normal;
cursor: pointer;
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
border-right: 1px solid #aaa;
-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 + i:active {
box-shadow: inset 10px 10px 10px -10px rgba(0, 0, 0, 0.3);
background-color: #ccc;
}
.box label:first-child i {
border-radius: 5px 0 0 5px;
border-left: 1px solid #aaa;
}
.box label:last-child i {
border-radius: 0 5px 5px 0;
}