JSFiddle - React, Tailwind, and code Playground
by David_Knowles
HTML
<div class="toggle">
<input id="toggle-1" class="toggle-checkbox" type="checkbox">
<label for="toggle-1">
<span class="toggle-label toggle-label-on">aan</span>
<span class="toggle-label toggle-label-off">uit</span> </label>
</div>
CSS
.toggle {
display: table-cell;
vertical-align: middle;
padding: 10px 60px;
}
.toggle-checkbox {
/* position: absolute; */
/* margin-left: -9999px; */
/* visibility: hidden; */
}
.toggle-checkbox + label {
padding: 2px;
width: 120px;
height: 60px;
background-color: #ddd;
border-radius: 60px;
display: block;
position: relative;
cursor: pointer;
outline: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.toggle-checkbox:checked + label:before {
background-color: #8ce196;
}
.toggle-checkbox + label:before {
right: 1px;
background-color: #f1f1f1;
-webkit-border-radius: 60px;
-moz-border-radius: 60px;
-ms-border-radius: 60px;
-o-border-radius: 60px;
border-radius: 60px;
-webkit-transition: background 0.4s;
-moz-transition: background 0.4s;
-o-transition: background 0.4s;
transition: background 0.4s;
}
input.toggle-checkbox + label:before,
input.toggle-checkbox + label:after {
display: block;
position: absolute;
top: 1px;
left: 1px;
bottom: 1px;
content: "";
}
.toggle-checkbox:checked + label:after {
margin-left: 60px;
}
.toggle-checkbox + label:after {
width: 58px;
background-color: #fff;
border-radius: 100%;
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
-webkit-transition: margin 0.4s;
-moz-transition: margin 0.4s;
-o-transition: margin 0.4s;
transition: margin 0.4s;
}
input.toggle-checkbox + label:before,
input.toggle-checkbox + label:after {
display: block;
position: absolute;
top: 1px;
left: 1px;
bottom: 1px;
content: "";
}
.toggle-label {
z-index: 1;
position: absolute;
display: table-cell;
vertical-align:middle;
background-color: #eee;
height: 100%;
line-height: 60px;
width: 60px;
}
.toggle-label-on {
left:-60px;
text-align: right;
}
.toggle-label-off {
right:-60px;
}
JavaScript
// toggle switch - CSS only