Выбранный ответ с 400+ ответами не работал для меня в Chrome 28 OSX, возможно, потому, что он не был протестирован в OSX или что он работал во всем, что было в 2008 году, когда на этот вопрос был дан ответ.
Времена изменились, и теперь возможны новые решения CSS3. Мое решение использует псевдоэлементы для создания пользовательского флажка . Таким образом, условия (плюсы или минусы, как ни крути) таковы:
- Работает только в современных браузерах (FF3.6 +, IE9 +, Chrome, Safari)
- Полагается на специально разработанный флажок, который будет отображаться одинаково в каждом браузере / ОС. Здесь я только что выбрал несколько простых цветов, но вы всегда можете добавить линейные градиенты и тому подобное, чтобы придать ему больше эффекта.
- Направлен на определенный шрифт / размер шрифта, который, если изменить его, вы просто измените расположение и размер флажка, чтобы он выглядел вертикально выровненным. При правильной настройке конечный результат должен быть практически одинаковым во всех браузерах / операционных системах.
- Нет свойств вертикального выравнивания, нет поплавков
- Должен использовать предоставленную разметку в моем примере, она не будет работать, если структурирована как вопрос, однако, по сути, раскладка будет выглядеть одинаково. Если вы хотите переместить вещи, вам также придется переместить связанный CSS
Ваш HTML:
<form>
<div class="checkbox">
<input id="check_me" type=checkbox />
<label for="check_me">Label for checkbox</label>
</div>
</form>
Ваш CSS:
div.checkbox {
position: relative;
font-family: Arial;
font-size: 13px;
}
label {
position: relative;
padding-left: 16px;
}
label::before {
content :"";
display: inline-block;
width: 10px;
height: 10px;
background-color: white;
border: solid 1px #9C9C9C;
position: absolute;
top: 1px;
left: 0px;
}
label::after {
content:"";
width: 8px;
height: 8px;
background-color: #666666;
position: absolute;
left: 2px;
top: 3px;
display: none;
}
input[type=checkbox] {
visibility: hidden;
position: absolute;
}
input[type=checkbox]:checked + label::after {
display: block;
}
input[type=checkbox]:active + label::before {
background-color: #DDDDDD;
}
Это решение скрывает флажок , добавляет и добавляет псевдоэлементы к стилю, чтобы создать видимый флажок. Поскольку метка привязана к скрытому флажку, поле ввода все равно будет обновлено, а значение будет отправлено вместе с формой.
jsFiddle: http://jsfiddle.net/SgXYY/6/
А если вам интересно, вот мое мнение о переключателях: http://jsfiddle.net/DtKrV/2/
Надеюсь, кто-нибудь найдет это полезным!