Создаём красивый checkbox с минимум стилей и без JavaScript

В этом уроке мы сверстаем красивый переключатель на основе элемента checkbox.
JavaScript нам не понадобится, будут только стили и минимум вёрстки.
Сразу показываю, что в итоге должно получиться.


Вначале обозначим сам элемент:

<input class="checkbox" type="checkbox" id="golos"/>
<label for="golos"></label>

Вначале для всех элементов зададим свойство box-sizing, равное border-box. Оно заставит свойства width и height включать в себя значения полей и границ, но не отступов.

Теперь придадим лейблу форму прямоугольника с закруглёнными углами и сразу же подкрасим его:

.checkbox + label {
  display: inline-block;
  position: relative;
  width: 300px;
  height: 130px;
  background: linear-gradient(to right, #fd1a15 0, #fc8b34 45%, #7fd03e 55%, #007177 100%) 0 0;
  background-size: 650px 100%;
  border-radius: 70px;
  padding: 7px;
  cursor: pointer;
  transition: all 500ms ease;
  box-shadow: 0 0px 10px rgba(0, 0, 0, 0.2) inset;
}

Затем воспользуемся псевдоклассом before и добавим в лейбл кружок с надписью Off

.checkbox + label:before {
  content: "Off";
  width: 116px;
  height: 116px;
  position: absolute;
  left: 7px;
  top: 7px;
  border-radius: 100%;
  background: #fff;
  text-align: center;
  line-height: 116px;
  font-family: "Cabin", sans-serif;
  font-size: 35px;
  font-weight: bold;
  color: #fd1a15;
  letter-spacing: 3px;
  text-transform: uppercase;
  transition: left 500ms ease, color 500ms ease, -webkit-transform 150ms ease;
  transition: left 500ms ease, color 500ms ease, transform 150ms ease;
  transition: left 500ms ease, color 500ms ease, transform 150ms ease, -webkit-transform 150ms ease;
}

И буквально в две строки добавим псевдоэлементу before анимацию при нажатии:

.checkbox + label:active:before {
  -webkit-transform: scale(0.95);
          transform: scale(0.95);
}

Чтобы у отмеченного чекбокса был другой фон - достаточно его лишь подвинуть

.checkbox:checked + label {
  background-position-x: -350px;
}

В самом первом блоке стилей можете увидеть background-size: 650px 100%; - это значит, что размер фона 650px в ширину, который мы можем смело подвинуть на 350px.


Ну и осталось подвинуть содержимое before у лэйбла и поменять в нём текст.

.checkbox:checked + label:before {
  content: "On";
  color: #007177;
  left: 177px;
}


Последним штрихом прячем checbox

.checkbox {
  display: none;
}

Таким нехитрым образом мы сделали интерактивный элемент без использования JS.

vox-populicsshtmlвёрсткастили
25%
226
291
148.746 GOLOS
0
В избранное
Web Development
Тех, кто презирает программистов, программисты презирают сильнее, чем те, кто презирает тех программистов, которые презирают тех, кто их презирает.
291
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (3)
Сортировать по:
Сначала старые