Если попытаться стилизовать радиокнопки напрямую, используя CSS-свойства, такие как background или border, они не сработают, потому что большинство элементов формы являются встроенной частью браузеров и не допускают такого визуального форматирования. Поэтому нам нужно найти другой способ стилизации переключателей.
В этом уроке мы создадим настраиваемые радиокнопки с помощью CSS и немного jQuery. Доступно множество других решений, например, подключаемые модули jQuery для настройки радиокнопок, но они излишне сложны и не так просты в реализации. Здесь мы с минимальными усилиями смоделируем эффект настраиваемых переключателей, который очень легко реализуется в любом проекте. Он хорошо совместим со всеми браузерами, даже отлично работает в Internet Explorer 7.
HTML-код
Создадим радиокнопки, как в обычном HTML, укажем атрибут name, потому что это решение напрямую зависит от этого атрибута.
<form action="action.php" method="post">
<h3>Какой ваш любимый веб-браузер</h3>
<label><input type="radio" name="browser" checked="checked" value="firefox"> Firefox</label>
<label><input type="radio" name="browser" value="chrome"> Chrome</label>
<label><input type="radio" name="browser" value="safari"> Safari</label>
</form>
Примеры изображений настраиваемой радиокнопки
Для простоты мы использовали отдельные изображения, чтобы указать различные состояния переключателя, но рекомендуется объединить все эти изображения в спрайт изображений перед использованием этого решения в реальном проекте для повышения производительности и минимизации HTTP-запросов.

CSS-код
Что мы пытаемся сделать с помощью CSS, так это скрыть переключатели по умолчанию с помощью CSS-свойства opacity и показать наши настраиваемые переключатели вместо них.
Теперь поместите следующие стили в заголовок вашего HTML-документа.
<style>
.custom-radio{
width: 16px;
height: 16px;
display: inline-block;
position: relative;
z-index: 1;
top: 3px;
background: url("radio.png") no-repeat;
}
.custom-radio:hover{
background: url("radio-hover.png") no-repeat;
}
.custom-radio.selected{
background: url("radio-selected.png") no-repeat;
}
.custom-radio input[type="radio"]{
margin: 1px;
position: absolute;
z-index: 2;
cursor: pointer;
outline: none;
opacity: 0;
/* CSS-хаки для добавления непрозрачности в старых браузерах */
_noFocusLine: expression(this.hideFocus=true);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
-khtml-opacity: 0;
-moz-opacity: 0;
}
</style>
Вы можете подумать, что мы нигде не использовали эти классы в HTML-коде; на самом деле эти классы будут добавлены в DOM jQuery во время выполнения.
jQuery-код
Наша функция customRadio() просто оборачивает радиокнопки по умолчанию в элемент <span> и добавляет к нему класс .custom-radio. После того, как класс .custom-radio будет добавлен к элементам <span>, с помощью CSS наше изображение настраиваемой радиокнопки будет отображаться вместо радиокнопок по умолчанию. Не забудьте включить jQuery в свой документ перед этим скриптом.
<script>
function customRadio(radioName){
var radioButton = $('input[name="'+ radioName +'"]');
$(radioButton).each(function(){
$(this).wrap( "<span class='custom-radio'></span>" );
if($(this).is(':checked')){
$(this).parent().addClass("selected");
}
});
$(radioButton).click(function(){
if($(this).is(':checked')){
$(this).parent().addClass("selected");
}
$(radioButton).not(this).each(function(){
$(this).parent().removeClass("selected");
});
});
}
// Вызов функции customRadio
$(document).ready(function (){
customRadio("browser");
})
</script>
Если в браузере отключен JavaScript, вместо настраиваемых переключателей появятся обычные переключатели. Так что это никоим образом не нарушит ваш код.
















