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

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

Похожие посты

Как обновить страницу с помощью jQuery

Вы можете просто использовать JavaScript-метод location.reload() для обновления или перезагрузки страницы. Этот метод дополнительно принимает логический параметр true или false. Если указан параметр true, это вызывает постоянную перезагрузку страницы с сервера. Но, если установлен false (по умолчанию) или не указан, браузер может перезагрузить страницу из своего кеша. Давайте посмотрим на пример, чтобы понять, как работает…

Как изменить CSS-свойство display на none или block с помощью jQuery

Вы можете использовать jQuery-метод css(), чтобы изменить значение свойства CSS display на none, block или любое другое значение. Метод css() применяет правила стиля непосредственно к элементам, то есть к встроенным. Следующий пример изменит отображение элемента DIV при нажатии кнопки: В качестве альтернативы, если вы беспокоитесь о начальном значении свойства display элемента, но хотите переключаться между…

Как отображать и скрывать элементы div на основе раскрывающегося списка <select> в jQuery

В следующем примере показано, как отображать и скрывать элементы <div> на основе раскрывающегося списка или выбранного параметра в поле <select> с помощью jQuery-метода change() в сочетании с методами show() и hide(). Блоки <div> в этом примере по умолчанию скрыты с помощью CSS-свойства display, для которого установлено значение none.

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

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

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

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