Сделать чекбоксы input[type="checkbox"]
и радиокнопки input[type="radio"]
красивыми – задача не сложная. Однако, чаще всего, за этим следует добавление новых элементов, а следовательно и усложнение DOM-структуры документа.
Для современных мобильных браузеров, а также декстопных браузеров на основе WebKit и Blink (Chrome, Opera, Vivaldi и т.д.), для некоторых типов инпутов можо создавать псевдо-элементы after
и before
.
Что же написано в коде?
HTML:
<h2>Checkboxes</h2>
<label>
<input type="checkbox">
Checkbox
</label>
<label>
<input type="checkbox">
Checkbox 2
</label>
<label>
<input type="checkbox">
Checkbox 3
</label>
<h2>Radios</h2>
<label>
<input type="radio" name="name">
Radio 1
</label>
<label>
<input type="radio" name="name">
Radio 2
</label>
<label>
<input type="radio" name="name">
Radio 3
</label>
Ничего лишнего – только label
и input
.
CSS:
label
{
font: 16px helvetica;
line-height: 18px;
position: relative;
display: block;
margin-bottom: 20px;
cursor: pointer;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
/* CHECKBOXES */
input[type='checkbox']
{
margin-right: 20px;
display: inline-block;
vertical-align: middle;
}
input[type='checkbox']:after
{
font-size: 0;
font-family: 'times new roman';
line-height: 20px;
position: absolute;
top: 0;
left: 0;
display: block;
width: 22px;
height: 22px;
content: '\2714';
-webkit-transition: all .1s linear;
-moz-transition: all .1s linear;
transition: all .1s linear;
text-align: center;
color: #fff;
border: 1px solid #333;
border-radius: 2px;
background-color: #fff;
box-sizing: border-box;
}
input[type='checkbox']:checked:after
{
font-size: 18px;
background-color: #07b4d3;
text-shadow: 1px 1px 0 #05a4c1;
-webkit-text-shadow: 1px 1px 0 #05a4c1;
-moz-text-shadow: 1px 1px 0 #05a4c1;
}
/* RADIOS */
input[type='radio']
{
margin-right: 20px;
}
input[type='radio']:after
{
font-size: 0;
font-family: 'times new roman';
line-height: 18px;
position: absolute;
top: 0;
left: 0;
display: block;
width: 22px;
height: 22px;
content: '\25CF';
-webkit-transition: all .1s linear;
-moz-transition: all .1s linear;
transition: all .1s linear;
text-align: center;
color: #fff;
border: 1px solid #333;
border-radius: 50%;
background-color: #fff;
text-shadow: 1px 1px 0 #05a4c1;
-webkit-text-shadow: 1px 1px 0 #05a4c1;
-moz-text-shadow: 1px 1px 0 #05a4c1;
box-sizing: border-box;
}
input[type='radio']:checked:after
{
font-size: 24px;
background-color: #07b4d3;
}
Здесь тоже ничего трудного. Создается новый псевдо-элемент для каждого из инпутов, в контенте которого используются стандартные символы шрифта times new roman
.
Напомню, что пока из-за отсутствия поддержки псевдо-элементов для input
данный способ не работает в Firefox и IE.