Теме кастомизации стандартных контроллов (радиокнопок и чекбоксов) посвящено огромное количество статей, но все они сводятся к подключению ненужных jQuery-плагинов, роль которых — полная замена нативных checkbox и radio на смесь непонятных структур HTML и JavaScript.
Я, обычно, пользуюсь «дедовским» способом, не ломающим стандартное поведение контроллов, не использующим ни капли JavaScript — только чистый CSS3.
Тут главное соблюдать структуру, чтобы работали соседние селекторы в CSS.
Структура HTML:
<div class="checkbox"> <input type="checkbox" id="foo-1" hidden /> <label for="foo-1">обычный чекбокс</label> </div> <div class="checkbox"> <input type="checkbox" id="foo-2" checked hidden /> <label for="foo-2">отмеченный чекбокс</label> </div>
Все пояснения есть в CSS-коде, если что-то не понятно — пишите в комментах, разберемся вместе.
Листинг CSS:
.checkbox,
.radio {
position: relative;
}
/**
* подгоняем размер чекбокса/радиокнопки под картинку,
* обнуляем отступы, вешаем поверх всего и скрываем
*/
.checkbox input[type="checkbox"],
.radio input[type="radio"] {
position: absolute;
width: 35px;
height: 23px;
overflow: hidden;
margin: 0;
padding: 0;
border: 0;
outline: 0;
opacity: 0;
}
/**
* Освобождаем место под картинку
*/
.checkbox input[type="checkbox"] + label,
.radio input[type="radio"] + label {
position: relative;
padding-left: 45px;
display: block;
cursor: pointer;
}
/**
* Вставляем пустой блок с картинкой
*/
.checkbox input[type="checkbox"] + label:before,
.radio input[type="radio"] + label:before {
display: block;
width: 35px;
height: 23px;
background: url('../images/sprites/forms.png');
content: " ";
vertical-align: middle;
position: absolute;
left: 0;
top: 0;
}
/**
* Позиционируем фоновую картинку в
* зависимости от состояния контролла
*/
.radio input[type="radio"] + label:before {
background-position: -35px 0;
}
.radio input[type="radio"]:checked + label:before {
background-position: 0 0;
}
.checkbox input[type="checkbox"] + label:before {
background-position: -35px 0;
}
.checkbox input[type="checkbox"]:checked + label:before {
background-position: 0 0;
}
По аналогии можно добавить обработку состояний контроллов hover и focus.
Поддежка браузерами
Судя по данным о поддержке CSS3 в браузерах — это: IE9+, FF 3.5, Chrome 4, Safari 3.2.
Живой пример
See the Pen RNGBzz by mihdan (@mihdan) on CodePen.0
Ссылки
Источник: https://www.kobzarev.com/makeup/dedovskiy-sposob-kastomizatsii-chekboksov-radioknopok-na-css/