CSS: Делаем radio инпут в виде кнопок. Изменение радио кнопок с помощью CSS Теги чекбокса и радиокнопки находятся перед тегом
Для того, чтобы оформить чекбоксы и радиокнопки, как того требует дизайн, сегодня не обязательно использовать JavaScript-решения (типа моего плагина ), т.к. для этого можно задействовать только CSS, причем с обратной совместимостью для старых браузеров (т.е. не в ущерб юзабилити), которые не поддерживают современные CSS-правила.
Другими словами — в современных браузерах чекбоксы и радиокнопки будут выглядеть красиво, в соответствии с задуманным дизайном, а в старых (это относится к Internet Explorer версии 8 и ниже
) они останутся с оформлением «по умолчанию», характерным для каждой конкретной операционной системы.
Кроме того, сохраняется возможность HTML5-валидации
стилизуемых элементов (чего может не быть при использовании JavaScript-плагинов). В современных браузерах ее поддержка — уже давно норма.
Важные особенности
Чтобы всё получилось, важно учитывать следующее:
Кроме, собственно, самого тега элемента, который мы хотим красиво оформить ( или ), понадобится тег
Тег должен находиться до тега
«Фокус» заключается в использовании псевдоселекторов:checked и:not . При этом сам чекбокс или радиокнопка делаются невидимыми, а их эмуляция осуществляется с помощью псевдоэлементов:before и:after для тега или вышеупомянутого тега-обертки.
Стилизация для современных браузеров
Рассмотрим оба вариант расположения стилизуемого элемента формы. Какой из них наиболее удобен — решать вам. Суть от этого не меняется.
Теги чекбокса и радиокнопки находятся перед тегом
В HTML-коде
это выглядит следующим образом:
Я переключаю чекбоксА я переключаю радиокнопку
Еще раз хочу заострить ваше внимание — тег обязательно
должен быть расположен перед
тегом . Если вы поменяете их местами, ничего работать не будет.
С помощью свойств position , z-index и opacity для классов.checkbox и.radio мы визуально прячем оригинальные элементы, при этом они остаются на том же самом месте, где будут стилизованные элементы. А с помощью margin немного смещаем их, чтобы сообщение валидации HTML5 смотрелось гармонично. В зависимости от дизайна чекбокса и радиокнопки этот отступ можно подогнать.
Теги чекбокса и радиокнопки находятся внутри тега
HTML-код
в данном случае будет следующим:
Я переключаю чекбокс
А я переключаю радиокнопку
По аналогии с предыдущим вариантом — тег обязательно
должен быть расположен перед
тегами с классом.checkbox__text и.radio__text .
Вот таким несложным образом это и делается. Благодаря данному способу, оформить чекбоксы и радиокнопки с помощью CSS можно так, как вам будет угодно.
Часто бывает нужно сделать так, что бы какие-то html элементы имели нестандартный вид.
Раньше для этого мастерили много JavaScript кода, который делал нужные подмены. Теперь же можно на чистом CSS это все организовать. Причем работоспособность гарантированна во всех современных браузерах.
Для чего это нам может понадобиться? Вариантов применения масса от красивого меню до выбора необходимых опций у товаров для подсчета цены. Например берем аренда авто Харьков и для каждой машины делаем возможность выбрать, необходимые в аренде авто, опции. И красиво и пользователю удобно как со стационарного компьютера так и с мобильного устройства.
Итак, нам необходимо сделать отображение стандартных input radio в виде стилизированных кнопок.
Таким простым способом мы добились нужного эффекта.
Последнее обновление: 08.04.2016
Флажок
Флажок представляет элемент, который может находиться в двух состояниях: отмеченном и неотмеченном. Флажок создается с помощью элемента input
с атрибутом type="checkbox"
:
Чекбокс в HTML5
Изучаемые технологии
Атрибут checked
позволяет установить флажок в отмеченное состояние.
Переключатели
Переключатели или радиокнопки похожи на флажки, они также могут находиться в отмеченном или неотмеченном состоянии. Только для переключателей можно создать
одну группу, в которой одновременно можно выбрать только один переключатель. Например:
Радиокнопки в HTML5
Для создания радиокнопки надо указать атрибут type="radio" . И теперь другой атрибут name указывает не на имя элемента, а на имя
группы, к которой принадлежит элемент-радиокнопка. В данном случае у нас две группы радиокнопок: gender и tech . Из каждой группы
мы можем выбрать только один переключатель. Опять же чтобы отметить радиокнопку, у нее устанавливается атрибут checked:
Важное значение играет атрибут value , который при отправке формы позволяет серверу определить, какой именно переключатель был отмечен.
В этой статье, по сути будут то же самое. но для радио кнопок. В итоге, после того как вы воспользуетесь материалом из этой статьи, то вы получите результат схожий с примером ниже.
Как и в случаи с чекбоксами, весь фокус делается с помощью тех же псевдоселекторов:checked и:not. Аналогично обычная радио кнопка скрывается, а новая на ее месте отображается, которая и имеет более презентабельный вид.
Обычно, radio кнопки идут по несколько штук сразу. С помощью них вы делаете выбор внутри формы перед отправкой. В примерах я тоже буду размещать по две кнопки. Если вам нужно больше или меньше, то без проблем добавляйте или удаляйте соблюдая некоторые правила о которых я напишу ниже.
К примеру, у нас будет две обычные кнопки, которые будут иметь вот такой код.
Первая кнопка
Вторая кнопка
К каждой кнопке мы с вами добавили метку с помощью label
. Если в старых можно обойтись без них, то в новых они понадобятся в любом случаи. Без них нельзя. В отличии от обычных radio кнопок, у новых так же должен быть указан класс. В итоге получится так:
Первая кнопка
Вторая кнопка
Как видите, добавлен класс myradio
. Именно этому классу и будут присвоены новые стили CSS. Так же не забудьте про другие стандартные параметры радиокнопок, которые нужно добавлять всем кнопкам.
id
- кнопкам добавляются айди, для того, чтобы было можно подвязать к ним метки label.
name
- имя кнопки. Его можно указывать одинаковым для нескольких радио кнопок, тогда будет возможность переключения между кнопками в форме. Если имена будут разными, то после активации такой кнопки, снять выделение с нее не получится.
for у метки label
- должен соответствовать id нужной кнопки. Важным является момент, что label должен располагаться сразу после радио кнопки.
Закончив с HTML разметкой кнопок, вы можете приступить к их внешним изменениям. Как и писал ранее, все стили мы добавим нашему классу - myradio
. Для этого в свой файл стилей, вы должны добавить вот такой кусок кода.
Если вы давно работаете с CSS, то на этом все и больше никаких шагов не будет. Можете смотреть результат и править стили под себя. Если же вам код не понятен, но вы хотите как то его разобрать, то попробую объяснить, что за что отвечает. Каждый параметр не буду расписывать, для этого существуют учебники по CSS, лишь объясню основы.
Немного ровняем кнопку для старых версий Internet Explorer.
Делаем наш label кликабельным. При наведении на него будет появляться рука вместо стрелки.
Myradio + label {
cursor: pointer;
}
С этого места начинается модернизация кнопок. Первым делом, делаем нашу стандартную кнопку невидимой.
Прозрачность кружка/точки при активации. Как видно в предыдущем пункте был параметр - opacity: 0;
Myradio:checked + label:after {
opacity: 1;
}
Этот параметр я выделил как опциональный. Его эффект - тень вокруг кнопки при фокусировке во время нажатия на нее. В примере это самые нижние кнопки. Если вам не нравится, можете его не добавлять.
Как и в прошлой статье, думаю, вы поняли смысл и заметили, что особо сложного, здесь ничего нет. Весь код можно менять в соответствии со своими идеями, но не допуская ошибок и придерживаясь советов.
На этом все, спасибо за внимание. 🙂
Всем доброго времени суток!
Кастомизация элементов форм наверное одно из самых увлекательных занятий в Веб-дизайне. Оправданное ли это занятие решает каждый для себя сам, хотя очевидно, что в наше время дизайнеры и верстальщики все же уделяют этому свои силы и время.
К сожалению, одного только CSS
частенько не достаточно, чтобы с легкостью оформить тот или иной элемент формы. Наверное поэтому многие используют штуки вроде Uniform для своих форм. Лично я всегда стараюсь сократить количество Javascript, используемого в подобных целях, поэтому хочу рассказать о совершенно нативном HTML+CSS
методе кастомизации радио-кнопок и чекбоксов.
Уверен, что на большая часть специалистов на Хабре, применяют схожие методы, для тех же, кто использует js-библиотеки, вроде Uniform
, надеюсь будет полезной эта статья.
Поехали!
Итак, сразу поставим цель:
оформить чекбоксы и радио-кнопки, чтобы внешне они были похожи на js-магию Uniform
, но сделать это максимально простым, нативным по отношению в HTML
и CSS
способом, а также избежать применения лишних тегов, сохраняя семантику.
Как-то так.
Основная идея строится на нативном «умении» HTML тега label
устанавливать связь с определенным элементом формы. Собственно и все, дальше только код.
Разметка
<ul
>
<li
>
<input
id
=
"cfirst"
type
=
"checkbox"
name
=
"first"
checked
hidden /
>
<label
for
=
"cfirst"
>
Checked checkbox</
label
>
</
li
>
<li
>
<input
id
=
"csecond"
type
=
"checkbox"
name
=
"second"
hidden /
>
<label
for
=
"csecond"
>
Unchecked checkbox</
label
>
</
li
>
<li
>
<input
id
=
"cthird"
type
=
"checkbox"
name
=
"third"
hidden disabled
/
>
<label
for
=
"cthird"
>
Disabled checkbox</
label
>
</
li
>
<li
>
<input
id
=
"clast"
type
=
"checkbox"
name
=
"last"
checked
hidden disabled
/
>
<label
for
=
"clast"
>
Disabled checked checkbox</
label
>
</
li
>
</
ul
>
<ul
>
<li
>
<input
id
=
"rfirst"
type
=
"radio"
name
=
"radio"
checked
hidden /
>
<label
for
=
"rfirst"
>
Checked radio</
label
>
</
li
>
<li
>
<input
id
=
"rsecond"
type
=
"radio"
name
=
"radio"
hidden /
>
<label
for
=
"rsecond"
>
Unchecked radio</
label
>
</
li
>
<li
>
<input
id
=
"rthird"
type
=
"radio"
name
=
"radio"
hidden disabled
/
>
<label
for
=
"rthird"
>
Disabled radio</
label
>
</
li
>
</
ul
>
Совершенно нативная разметка. Использование label
вместе с input
прям как из учебников. Важным моментом является только то, что нужно указывать id
для каждого input
и for
для label
, чтобы связать их.
Думаю все заметили использование атрибута hidden
, который скрывает сами input
элементы, однако благодаря связи с label
, мы все еще может манипулировать ими. В результате мы получаем что-то вроде:
Скучно совсем стало, но все работает. Теперь осталось оформить все это добро как надо. Для этого воспользуемся спрайтом , который применяется на сайте Uniform
.
Тут все так же максимально просто. Используем псевдо-элемент before
для того, чтобы показывать наши «виртуальные контролы» и пользователь не заметил подмены. Части спрайта, меняем в зависимости от состояния input
"а.