Стилизация checkbox и radio
HTML формы имеют множество элементов. Среди них особенно выделяются checkbox и radio кнопки. В данной статье я покажу как легко можно изменить их внешний вид применив возможности одного лишь CSS.
Оглавление
Стилизация checkbox и radio кнопок является очень распространенной практикой в web-дизайне. В этой статье я покажу как применив CSS, стилизовать данные элементы кроссбраузерно.
Для начала определимся с логикой, что нам нужно учитывать при стилизации чекбоксов и радио-кнопок:
- Помимо самих элементов которые мы будем стилизовать (
<input type="checkbox">
и<input type="radio">
), нам понадобится тег<label>
, благодаря которому переключать элемент можно будет кликая на текст, а не только на сам элемент. - Тег
<input>
должен находиться до тега<label>
. В этом случае состояние элемента формы переключается с помощью атрибутаfor.
«Магия» заключается в использовании псевдоселекторов :checked
и :not
. При этом сам чекбокс или радио-кнопка делаются невидимыми, а их эмуляция осуществляется с помощью псевдоэлементов :before
и :after
для тега <label>
.
Оформление чекбокса
HTML разметка для чекбокса будет выглядеть следующим образом:
<!-- Стилизация checkbox -->
<div class="element-wrapper">
<input type="checkbox" class="checkbox" id="checkbox1" />
<label for="checkbox1">Checkbox 1</label>
</div>
<div class="element-wrapper">
<input type="checkbox" class="checkbox" id="checkbox2" />
<label for="checkbox2">Checkbox 2</label>
</div>
Еще раз — тег <input>
обязательно должен быть расположен перед тегом <label>
. Если вы поменяете их местами, ничего работать не будет.
CSS-стили для чекбокса:
.element-wrapper {
padding: 10px;
}
/*
//////////////////////
Стилизация checkbox
//////////////////////
*/
.checkbox {
position: absolute;
z-index: -1;
opacity: 0;
}
.checkbox + label {
position: relative;
vertical-align: middle;
padding: 0 0 0 30px;
cursor: pointer;
}
/* Чекбокс в состоянии неактивен */
.checkbox + label:before {
content: '';
position: absolute;
top: -1px;
left: 0;
width: 19px;
height: 18px;
border: 2px solid #ccc;
border-radius: 3px;
}
/* Чекбокс в состоянии активен */
.checkbox + label:after {
content: '';
position: absolute;
}
/* Фон чекбокса в состоянии активен */
.checkbox:checked + label:after {
position: absolute;
top: 2px;
left: 3.2px;
border: 1px solid white;
background: #413548;
height: 14px;
width: 14px;
}
Результат:
Смотреть пример Оформление чекбокса от webinmind.ru (@webinmind).
Оформление radio-кнопки
HTML разметка для радио-кнопок будет выглядеть следующим образом:
<!-- Стилизация radio -->
<div class="element-wrapper">
<input type="radio" class="radio" name="radio" id="radio1" />
<label for="radio1">Radio 1</label>
</div>
<div class="element-wrapper">
<input type="radio" class="radio" name="radio" id="radio2" />
<label for="radio2">Radio 1</label>
</div>
И опять — тег <input>
обязательно должен быть расположен перед тегом <label>
.
CSS-стили для радио-кнопки:
.element-wrapper {
padding: 10px;
}
/*
//////////////////////
Стилизация radio
//////////////////////
*/
.radio {
position: absolute;
z-index: -1;
opacity: 0;
margin: 10px 0 0 7px;
}
.radio + label {
position: relative;
padding: 0 0 0 30px;
cursor: pointer;
}
/* Оформление радио-кнопки */
.radio + label:before {
content: '';
position: absolute;
top: -1px;
left: 0;
width: 18px;
height: 18px;
border: 2px solid #ccc;
border-radius: 50%;
background: #FFF;
}
/* Радио в состоянии неактивен */
.radio + label:after {
content: '';
position: absolute;
top: 2.5px;
left: 3.5px;
width: 15px;
height: 15px;
border-radius: 50%;
background: #413548;
opacity: 0;
transition: .2s;
}
.radio:checked + label:after {
opacity: 1;
}
Результат:
Смотреть пример Оформление radio-кнопки от webinmind.ru (@webinmind).
Вот таким образом можно кроссбраузерно стилизовать стандартный вид чекбоксов и радио-кнопок, применив при этом только лишь инструмент CSS. Кстати, рекомендую прочитать статью про кастомизацию скроллбара браузеров на движке WebKit.
Время запросов: 0,1023 s
Количество запросов: 25
Источник: cache