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