У меня есть простое решение, работающее, когда у меня есть метка, окружающая мои переключатели с изображением, представляющим выбранную вещь:
<label>
<input type="radio" name="foo">
<img src="...">
</label>
Затем я применил следующие стили:
label {
float: left;
width: 100px;
height: 100px;
position: relative;
cursor: pointer;
}
label input[type=radio] {
opacity: 0;
}
label img {
position: absolute;
top: 0;
left: 0;
opacity: 0.5;
}
:checked + img {
opacity: 1;
}
По существу каждый label
становится прямоугольником обычного размера, который полностью заполнен img
. Само радио скрыто с помощью opacity:0
. Пользователь может сказать, что то, что выбрано как img
рядом с отмеченным радио, будет непрозрачным, тогда как остальные полупрозрачны. Вы можете довольно легко создавать различные другие эффекты.
Мне нравится то, что форма остается простой в обработке, она это просто группа переключателей.
Я использовал непрозрачность для переключателей вместо display:none
или visibility:hidden
, так как тогда они все еще находятся в tabindex и форма остается доступной для клавиатуры.