Создание переключающейся кнопки в HTML: CSS и jQuery
Быстрый ответ
Создание кнопки-переключателя возможно реализовать с использованием HTML-элемента checkbox
, стилеобразующего CSS и управляющего состоянием JavaScript:
<label class="toggle-switch">
<input type="checkbox" onchange="toggleIt()">
<span class="slider"></span>
</label>
.toggle-switch { position: relative; width: 60px; height: 34px; }
.toggle-switch input { display: none; }
.slider {
position: absolute; width: 100%; height: 100%;
background-color: #ccc; border-radius: 34px;
transition: background-color 0.2s;
}
.slider::before {
content: ""; position: absolute; width: 26px; height: 26px;
left: 4px; bottom: 4px; background-color: white; border-radius: 50%;
transition: transform 0.2s;
}
input:checked + .slider { background-color: #2196F3; }
input:checked + .slider::before { transform: translateX(26px); }
function toggleIt() {
// Здесь мы меняем состояние переключателя...
}
Представленный выше код является простым и функциональным решением, которое готово к использованию.
Изучаем и улучшаем кнопку-переключатель
Добавляем функциональности с помощью jQuery
JavaScript-библиотека jQuery поможет облегчить управление состоянием переключателя:
$('input[type="checkbox"]').click(function(){
if($(this).is(":checked")){
$(this).addClass("checked");
} else {
$(this).removeClass("checked");
}
});
Создаем эффект 3D
Для создания эффекта трёхмерности на вашей кнопке используйте следующие стили CSS, которые не потребуют ношения 3D-очков:
input:not(:checked) + .slider {
box-shadow: inset 0px 0px 5px grey;
}
input:checked + .slider {
box-shadow: 0px 2px 5px grey;
}
Делаем маркировку элементов
Четкая маркировка элементов интерфейса поможет избежать путаницы при использовании:
<label class="toggle-switch" aria-label="Переключатель для Великого">
<!-- Здесь находятся элементы checkbox и slider -->
</label>
Прочие вариации
Оформление в стиле "soft UI"
Современный дизайн в стиле "мягкого UI" предложит вашему переключателю актуальный вид:
.slider {
/* ...предыдущие стили... */
background-color: #e0e0e0;
box-shadow: inset 6px 6px 12px #babecc,
inset -6px -6px 12px #ffffff;
}
Наглядные анимации
Сделайте переключатель более информативным с помощью анимации или иконок:
$("input[type='checkbox']").change(function(){
if($(this).is(":checked")) {
// Добавить анимацию для состояния "включено"
} else {
// Добавить анимацию для состояния "выключено"
}
});
Визуализация
Примерно как обычный выключатель света:
До переключения: 💡🔘---OFF
После переключения: 💡🔘---ON
Кнопка-переключатель в HTML действует по аналогичному принципу:
<button onclick="this.classList.toggle('active')">Переключить</button>
При активации:
До: [Кнопка: Неактивна 🔘]
После: [Кнопка: Активна 🔘✨]
Схоже с включением режима "Ночной свет" в редакторе кода!
Частые проблемы и сложности
Не забываем о "Mobile First"
Убедитесь, что переключатель приспособлен для использования на мобильных устройствах:
@media screen and (max-width: 600px) {
.toggle-switch {
width: 80px;
}
}
Ограничиваем использование JavaScript
Если нет необходимости, приоритет отдайте решениям на CSS:
input:checked + .slider::after {
content: '✔';
color: white;
}
Проблемы совместимости браузеров 💔
Не забывайте тестировать ваш код в различных браузерах, поскольку они могут отображать один и тот же код по-разному.
Полезные материалы
- Элемент
<button>
– HTML — полная информация о кнопках в HTML. - Как создать переключатель – W3Schools — руководство по созданию переключателей.
- Трюк с checkbox | CSS-Tricks — неожиданные применения элемента checkbox.
- Обзор WAI-ARIA | W3C — учебник по созданию доступных пользовательских интерфейсов.
- Кнопки-переключатели – Инклюзивные компоненты — основы создания включателей, доступных для широкого круга пользователей.