我想有一个替代标准的复选框-基本上我想使用图像,当用户点击图像,淡出它,并覆盖一个复选框。
从本质上讲,我想做一些类似Recaptcha 2的事情,当它让你点击符合一定条件的图片时。你可以see a Recaptcha demo here,但它有时可能会让你解决文本问题,而不是图片选择。所以这里有一个截图:
当您点按其中一个图像(在本例中,包含牛排图片)时,您点按的图像会缩小大小并显示蓝色勾号,表示您已勾选了它。
假设我想重现这个例子。
我意识到我可以有9个隐藏的复选框,并附加一些jQuery,这样当我点击图像时,它会选择/取消选择隐藏的复选框。但是图像的缩小/覆盖勾号怎么办?
8条答案
按热度按时间9w11ddsr1#
纯语义HTML/CSS解决方案
这是很容易实现自己,没有预先作出的解决方案的必要。而且它会教你很多,因为你似乎不太容易与CSS。
这是您需要做的:
你的复选框需要有不同的
id
属性,这样你就可以使用标签的for
-属性来连接<label>
。示例:
将标签附加到复选框将触发浏览器行为:每当有人点击标签(或标签内的图像)时,复选框将被切换。
接下来,通过应用例如
display: none;
来隐藏复选框。现在剩下要做的就是为
label::before
伪元素(将用作可视复选框替换元素)设置所需的样式:在最后一个棘手的步骤中,当复选框被选中时,使用CSS的
:checked
伪选择器来更改图像:+
(* adjacent sibling selector *)确保只更改标记中隐藏复选框后面的标签。您可以通过将两个图像都放在一个spritemap中,并且只在
background-position
中应用一个更改,而不是交换图像来优化这一点。当然,您需要正确定位标签并应用
display: block;
,设置正确的width
和height
。编辑:
我在这些说明之后创建的codepen示例和代码片段使用了相同的技术,但不是使用图像来替换复选框,而是纯粹使用CSS来替换复选框,在标签上创建一个
::before
,一旦选中,它将具有content: "✓";
。下面是一个工作代码,展示了该技术,并且不需要复选框的图像:
http://codepen.io/anon/pen/wadwpx
下面是相同代码的片段:
一个三个三个一个
yhuiod9q2#
纯CSS解决方案
有三种巧妙的方法被调用:
:checked
选择器::before
伪选择器content
属性。6pp0gazn3#
查看此jQuery插件:imgCheckbox(位于**npm和bower**上)
**免责声明:**解决这个问题不需要javascript。问题在于代码的可维护性和效率之间。虽然不需要插件(或任何javascript),但它确实使构建更快,通常更容易修改。
准系统解决方案:
使用非常简单的HTML(没有复选框和标签等混乱):
您可以使用jQuery的toggleClass来打开/关闭
selected
或checked
事件上的click
类:提取选中的项目时使用
加上凉爽:
你可以以此为基础设计图像的样式,但一个大问题是,如果没有其他DOM元素,你甚至不能使用
::before
和::after
来添加像复选标记这样的东西。解决方案是用另一个元素 Package 你的图像(也可以将click侦听器附加到 Package 的元素上)。这使得你的html非常干净,js的可读性令人难以置信。看看这个片段...
使用imgCheckbox jQuery插件:
受上面的解决方案的启发,我已经建立了一个插件,可以很容易地使用:
查看**in action**(以及see the source)
kmb7vmvb4#
我会用
position: relative;
和class="checked"
附加一个额外的div,它的宽度/高度与图像的宽度/高度相同,并且在包含图标的left: 0; top: 0;
中的位置相同,它以display: none;
开头。现在您可以收听
click
-event:这样你就可以得到图标,也可以调整图像的大小,以一个更小的方式。
注意:我只是想告诉你我的想法背后的“逻辑”,这个例子可能不起作用,或者有一些bug。
w8ntj3qf5#
我举了一个例子**"Angular -使用复选框和收音机之类的图像"**
Link to Stackblitz
在app.component.html文件中:
在应用程序组件. scss文件中:
在应用程序组件. ts文件中:
一个三个三个一个
o3imoua46#
我注意到其他的答案要么不使用
<label>
(为什么不呢?),要么要求匹配for
和id
属性,这意味着如果你有冲突的ID,你的代码将无法工作,你必须记住每次都要创建唯一的ID。此外,如果您使用
display:none
或visibility:hidden
隐藏input
,浏览器将不会关注它。复选框及其文本(在本例中为图像)可以包含在标签中:
lf3rwulv7#
下面是一个选择类似复选框的图像的快速示例
pcww981p8#
要扩展任何人使用WordPress & GravityForms生成他们的表单并希望自动填充复选框字段的帖子列表及其相关的特色缩略图的可接受答案
以及CSS: