Состояние у переключателя включено|выключено, можно усилить с помощью CSS кастомизации и смайлика.
Создание нативного чекбокса
Сначала создадим поле чекбокс в HTML-разметке и поставим его в центр страницы.
<label>
<input type="checkbox">
<span>
<i></i>
</span>
</label>
*{
margin: 0;/*обнуление отступов*/
padding: 0;/*обнуление полей*/
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
body {
display: flex;/*подключение сетки flexbox*/
justify-content: center;/*горизонтальное выравнивание*/
align-items: center;/*вертикальное выравнивание*/
min-height: 100vh;/*на всю высоту экрана*/
}
label {
position: relative;/*относительное позиционирование*/
width: 160px;/*ширина метки*/
height: 80px;/*высота метки*/
cursor: pointer;
}
Вот этот маленький дефолтный чекбокс обязательно должен быть, без этого красивый кастомный чекбокс не будет работать. Перед кастомизацией, нужно спрятать дефолтный чекбокс.
label input {
appearance: none;/*скрыть чекбокс*/
}
Стилизация нового чекбокса
Как раз таки мы стилизуем тег span под новый чекбокс. Без галочки, то есть неотмеченный чекбокс у нас красного цвета.
label span {
position: absolute;/*абсолютное позиционирование*/
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 80px;/*закругление углов*/
background: #fe0000;/*цвет чекбокса*/
transition: 0.5s;/*плавный переход состояния*/
box-shadow: 0 15px 25px #fe000066;/*тень*/
}
Отметим чекбокс — поставим в поле input галочку (для демонстрации временно сделаю дефолтный чекбокс видимым). Сделаем отмеченный чекбокс зеленым цветом.
label input:checked ~ span{
background: #05be05;/*цвет отмеченного чекбокса*/
box-shadow: 0 15px 25px #05be0566;/*тень*/
}
Рисуем смайлик
Тег i мы прописали для смайлика. Нарисуем окружность, куда в дальнейшем приделаем рожицу.
label span i{
position: absolute;
top: 4px;
left: 4px;
width: 72px;/*ширина круга*/
height: 72px;/*высота круга*/
background: #fff;/*цвет круга*/
border-radius: 50%;
transition: 0.5s;
}
Зададим состояние checked для окружности — сдвинем круг вправо на 84 пикселей.
label input:checked ~ span i{
left: 84px;/*сдвиг круга*/
}
Используя псевдоэлементы before и after, нарисуем глаза и рот.
label span i::before {
content: '';
position: absolute;
top: 22px;
left: 14px;
width: 12px;/*ширина глаз*/
height: 12px;
border-radius: 50%;
background: #fe0000;/*цвет глаз*/
box-shadow: 31px 0 0 #fe0000;
transition: 0.5s;
}
label span i::after {
content: '';
position: absolute;
bottom: 15px;
left: calc(50% - 15px);
width: 30px;/*ширина рта*/
height: 6px;/*высота рта*/
border-radius: 6px;
background: #fe0000;/*цвет рта*/
transition: 0.5s;
}
Для состояния checked, нарисуем улыбку у смайлика.
label input:checked ~ span i::before {
background: #05be05;
box-shadow: 31px 0 0 #05be05;
}
label input:checked ~ span i::after {
bottom: 12px;
height: 15px;
border-radius: 0;
border-bottom-left-radius: 15px;
border-bottom-right-radius: 15px;
background: #05be05;
}