【发布时间】:2015-11-26 21:40:09
【问题描述】:
我有这个无法更改的 HTML:
<label for="accept">I accept.</label>
<input id="accept" type="checkbox">
现在,我必须使用 CSS 将复选框移到左侧并使用自定义图像设置样式。 我通常在 CSS 中做的事情是,当输入在标签之前时,让标签像复选框一样隐藏实际输入:
input[ type=checkbox ] {
display:none;
}
input[ type=checkbox ] + label {
display:inline-block;
padding-left: 25px;
cursor: pointer;
height: 25px;
background: url('image.png') 0 -5px no-repeat;
}
input[ type=checkbox ]:checked + label {
background: url('image.png') 0 -40px no-repeat;
}
但是,在这种情况下,当我尝试时:
input[ type=checkbox ] {
display:none;
}
label + input[ type=checkbox ] {
display:inline-block;
padding-left: 25px;
cursor: pointer;
height: 25px;
background: url('image.png') 0 -5px no-repeat;
}
label + input[ type=checkbox ]:checked {
background: url('image.png') 0 -40px no-repeat;
}
不仅不显示背景,甚至取消隐藏复选框,所以我最终在标签后添加了默认复选框。
如何在不使用 JavaScript 的情况下执行此操作?
【问题讨论】:
-
仅供参考:在您的第一个代码示例中,您正在设置 LABEL 元素而不是复选框的样式。 CSS 选择器从右到左读取。
-
感谢您的快速回复。是的,我知道。重点是设置标签的样式并将背景添加到它的左侧,因此它看起来和行为就像一个复选框
-
这些元素是否在另一个元素中?
-
它们是,但我不能直接设置它们的样式,因为有一大堆具有相同 id (p.form-row) 的元素,并且它们的数量会因为添加或删除某些字段而发生变化取决于用户输入。
-
在这种情况下,纯css是不可能的(跨浏览器),你要么需要使用js绑定一个change事件,要么交换dom中元素的顺序