我想有一个标准复选框的替代品-基本上我想使用图像,当用户单击图像时,将其淡出并覆盖一个复选框。
本质上,我想做像 Recaptcha 2 那样让你点击满足特定标准的图像时所做的事情。您可以 在此处查看 Recaptcha 演示, 但有时它可能会让您解决文本问题,而不是图像选择。所以这里有一个截图:
当您单击其中一个图像(在本例中,包含一张牛排图片)时,您单击的图像会缩小并出现蓝色勾号,表示您已勾选它。
假设我想重现这个确切的例子。
我意识到我可以有 9 个隐藏的复选框,并附加一些 jQuery,这样当我单击图像时,它会选择/取消选择隐藏的复选框。但是图像的缩小/覆盖刻度呢?
原文由 bgs264 发布,翻译遵循 CC BY-SA 4.0 许可协议
纯语义 HTML/CSS 解决方案
这很容易自行实施,无需预先制定的解决方案。它还会教你很多东西,因为你似乎不太容易使用 CSS。
这是你需要做的:
您的复选框需要具有不同的
id
属性。这允许您使用标签的for
属性将<label>
连接到它。例子:
将标签附加到复选框将触发浏览器行为:每当有人单击标签(或其中的图像)时,复选框将被切换。
接下来,通过应用
display: none;
来隐藏复选框。现在剩下要做的就是为您的
label::before
伪元素(将用作可视复选框替换元素)设置您想要的样式:在最后一个棘手的步骤中,您使用 CSS’
:checked
伪选择器在选中复选框时更改图像:+
( _相邻兄弟选择器_)确保您只更改直接跟随标记中隐藏复选框的标签。您可以通过将两个图像放在 spritemap 中并仅在
background-position
中应用更改而不是交换图像来优化它。当然,您需要正确定位标签并应用
display: block;
并正确设置width
和height
。编辑:
我在这些说明之后创建的 codepen 示例和代码片段使用相同的技术, 但不是使用复选框的图像,而是纯粹使用 CSS 完成复选框替换,在标签上创建一个
::before
,一旦检查,有content: "✓";
。添加一些圆形边框和甜美的过渡,结果真的很讨人喜欢!这是一个展示该技术的工作代码笔,并且不需要复选框的图像:
这是片段中的相同代码: