etxt banner 468x60etxt banner 728x90etxt banner 930x180kwork banner 468x60kwork banner 728x90kwork banner 930x180skillbox banner 468x60skillbox banner 728x90skillbox banner 930x180

Как создать пользовательские радиокнопки в HTML с помощью CSS и jQuery

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

skillbox banner 480x320skillbox banner 728x90skillbox banner 120x600jivo banner 480x320jivo banner 728x90jivo banner 120x600kwork banner 480x320kwork banner 728x90kwork banner 120x600

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

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

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

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

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

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

Как на jQuery написать код, который при клике на кнопку будет копировать текущий url сайта?

Вот пример кода на jQuery, который копирует текущий URL сайта в буфер обмена при нажатии на кнопку с классом copy-current-url: Как это работает: Этот подход работает в большинстве браузеров. Однако, если вы используете современные методы, можно также заменить document.execCommand на API navigator.clipboard, если поддержка браузера это позволяет.
Подробнее

Как на jQuery отслеживать событие ввода символов?

Для отслеживания события ввода символов на jQuery можно использовать событие input. Оно срабатывает каждый раз, когда происходит изменение в поле ввода (например, при наборе текста или удалении символов). Вот пример: В этом примере: Если нужно отследить событие только при изменении текста (например, при нажатии клавиш), можно использовать событие keyup, но input более универсально, так как…
Подробнее

Как на jQuery можно отслеживать изменение текстового тега

В jQuery изменение текста внутри тега можно отслеживать несколькими способами, в зависимости от того, как это изменение происходит. Основной подход — это использовать MutationObserver, так как он позволяет отслеживать изменения в DOM. Вот пример: 1. Использование MutationObserver 2. Событие через пользовательское изменение Если текст изменяется через jQuery или JavaScript (например, с помощью .text() или .html()),…
Подробнее