纯CSS复选框图像替换


78

我在表中有一个复选框列表。(该行中的多个CB之一)

 <tr><td><input type="checkbox" class="custom_image" value="1" id="CB1" /><label for='CB1'>&nbsp;</label></td></tr>
 <tr><td><input type="checkbox" class="custom_image" value="2" id="CB2" /><label for='CB2'>&nbsp;</label></td></tr>
 <tr><td><input type="checkbox" class="custom_image" value="3" id="CB3" /><label for='CB3'>&nbsp;</label></td></tr>
 <tr><td><input type="checkbox" class="custom_image" value="4" id="CB4" /><label for='CB4'>&nbsp;</label></td></tr>

我想用一对自定义的开/关图像替换复选框图像,我想知道是否有人对如何使用CSS更好地了解?

我已经找到了这个“ CSS ninja”教程,但是我不得不承认发现它对我来说有点复杂。 http://www.thecssninja.com/css/custom-inputs-using-css

据我所知,您可以使用伪类

 td:not(#foo) > input[type=checkbox] + label
 {
     background: url('/images/off.png') 0 0px no-repeat;
     height: 16px;
     padding: 0 0 0 0px;
 }

我的期望是,通过添加上述CSS,该复选框至少将默认显示为处于OFF状态的图像,然后添加以下内容以使ON

 td:not(#foo) > input[type=checkbox]:checked + label {
     background: url('/images/on.png') 0 0px no-repeat;
 }

不幸的是,似乎我在某处缺少关键步骤。我尝试使用自定义CSS3选择器语法来匹配我当前的设置-但必须丢失一些内容(如果这样的话,图像尺寸为16x16)

http://www.w3.org/TR/css3-selectors/#checked

编辑:我在本教程中丢失了一些内容,在该内容中,他将图像更改应用于标签而不是输入本身。我仍然没有在页面上得到复选框结果的预期交换图像,但是我想离得更近了。


有一个名为Uniform的jQuery插件,可以很好地完成此工作。
马特·谢尔曼

遗憾的是,我们使用的是原型,我无法改变这一点(效果的下降将是残酷的)。我会寻找一个原型插件(漂亮的表单)...但是我的“个人”目标的一部分是使用non-js方法使其工作。我知道它可以完成(请参阅教程),我感觉自己已经接近……而且我认为知道如何做到这一点将提高我处理未来类似任务的能力。显然,如果不可能实现方形钉圆孔,我会放弃并转向某种JS技巧。
Alex C

1
等待-像没有图像的CSS或没有Java脚本的CSS中的“纯CSS”?
arbales 2010年

哦-我的意思是“半纯正”,我现在肯定在使用图像,但是我想可以使用“ data / mime”标签将图像放入CSS中。(我最近看到了一篇有关该文章的文章,尽管目前我仍无法找到确切的位置)
Alex C 2010年

3
等一下,“纯CSS”(如带有JavaScript和/或多余dom节点的CSS)?
2012年

Answers:


124

您已经关闭了。只需确保隐藏复选框,并将其与您通过样式设置的标签相关联即可input[checkbox] + label

完整代码:http//gist.github.com/592332

JSFiddle:http : //jsfiddle.net/4huzr/


3
这取决于label可能丢失的元素。请参阅下面的答案。
Mo Valipour

我认为,如果将不透明度设置为0,您仍然可以实现制表位停止行为。并非如此。
gdbj

没有名称,对于大型表使用jsfiddle.net/ajshres/4huzr/2486时,使用ajax可能会很方便
Ajay Gopal Shrestha

@Valipour异议被拒绝。如果您的复选框没有标签,请在您的复选框上放置一个标签。这样可以一举解决您的UI和WAG问题。
j4k3

40

如果选择CSS3,似乎不需要使用javascript。

通过使用:before选择器,您可以在两行CSS中完成此操作。(不涉及脚本)。

这种方法的另一个优点是它不依赖<label>标签,即使丢失也可以使用。

注意:在不支持CSS3的浏览器中,复选框看起来很正常。(向下兼容)。

input[type=checkbox]:before { content:""; display:inline-block; width:12px; height:12px; background:red; }
input[type=checkbox]:checked:before { background:green; }​

您可以在此处查看演示:http : //jsfiddle.net/hqZt6/1/

还有一张带有图片的图片:

http://jsfiddle.net/hqZt6/6/


8
这看起来很有希望,但是,可惜的是,它似乎无法在Firefox 14.0.1 Mac上运行
Murray Smith

对图像进行了尝试,它仍然显示图像后面的原始复选框,因此对于较小或形状奇异的图像不是很好。
Jimbali 2013年

7
好的,我刚刚发现可以通过将复选框设置为visibility: hidden:before来解决此问题visibility: visible。我认为这会破坏向后兼容性。
Jimbali 2013年

3
jsfiddles,他们什么也不做。显示为普通复选框。火狐27
raveren

3
同样与Windows(对不起,在工作中使用它):作品在Chrome 35,但在Firefox中没有30
迈克尔Scheper

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.