这可能无济于事(总是一个好的开始答案),但如果你控制 HTML,那么肯定有办法。我尝试了您期望的代码...
input[type="radio"]:not(:checked):hover {
/* styles */
}
...但这没有用。这是闪烁和垃圾。
所以,我能想到的唯一方法是拥有一个相对定位的容器,然后在其中绝对定位两个元素 alabel
和 the input
,然后在将鼠标悬停在标签上时更改输入样式。使用 z-index 我们可以将标签放在输入框上方。然后,由于该for
属性,我们可以确保在单击标签时仍然选中复选框。
我在悬停时更改的样式是顶部边距,它将向上拉单选按钮。
HTML
<span>
<label for="radio1">Click me</label>
<input id="radio1" type="radio" />
</span>
<span>
<label for="radio2">Click me</label>
<input id="radio2" type="radio" checked />
</span>
CSS
span {
position: relative;
display: inline-block;
min-width: 13px;
}
label, input {
position: absolute;
top: 0;
left: 0;
display: inline-block;
margin: 0;
}
label {
z-index: 2;
text-indent: -999em;
width: 13px;
height: 13px;
}
input {
z-index: 1;
}
label:hover + input[type="radio"]:not(:checked) {
margin-top: -10px;
}
演示
http://jsbin.com/ifArIn/3/edit