Если попытаться стилизовать радиокнопки напрямую, используя 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, вместо настраиваемых переключателей появятся обычные переключатели. Так что это никоим образом не нарушит ваш код.

Читайте также

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.