我想有一个标准复选框的替代方案-基本上我想使用图像,当用户单击图像时,淡出并覆盖一个勾选框。
本质上,我想做一些类似于Recaptcha 2的事情,当它让您点击符合特定标准的图像时。您可以在这里看到Recaptcha演示,但有时它可能会让您解决文本问题,而不是图像选择。下面是一个截图:
当您单击其中一个图像(在本例中,包含牛排图片)时,您单击的图像会缩小,并显示蓝色勾号,表示您已勾选该图像。
假设我想重现这个确切的例子。
我意识到我可以有9个隐藏复选框,并附加一些jQuery,这样当我单击图像时,它会选择/取消选择隐藏复选框。但是图像的缩小/覆盖勾号又如何呢?
查看这个jQuery插件:imgCheckbox(在npm和bower上)
免责声明:解决此问题不需要javascript。
使用非常简单的超文本标记语言(没有复选框和标签等的混乱):
<img class="checkable" src="http://lorempixel.com/100/100" />
您可以使用jQuery的toggleClass在单击
事件上打开/关闭选中的
或选中的
类:
$("img.checkable").click(function () {
$(this).toggleClass("checked");
});
选中的项目是使用
$(".checked")
您可以基于此设置图像样式,但一个大问题是没有其他DOM
$("img.checkable").wrap("<span class='fancychecks'>")
这使得你的html非常干净,你的js非常易读。看看这个片段...
/* Note that this js actually responds
to a click event on the wrapped element!
(not the image) */
$("img.checkable").wrap("<span class='fancychecks'>")
.parent().click(function() {
$(this).toggleClass("checked");
});
/* style the images */
span.fancychecks img {
display: block;
margin: 0;
padding: 0;
transition-duration: 300ms;
transform: scale(1);
filter: none;
-webkit-filter: grayscale(0);
}
span.fancychecks.checked img {
transform: scale(0.8);
filter: gray;
filter: grayscale(1);
-webkit-filter: grayscale(1);
}
/* style the parent spans */
span.fancychecks {
padding: 0;
margin: 5px;
display: inline-block;
border: 1px solid transparent;
transition-duration: 300ms;
}
span.fancychecks.checked {
border-color: #ccc;
}
/* Using conexo's fantastic CSS, make the checkmarks */
span.fancychecks::before {
background-color: rgba(50, 200, 50, 0.7);
color: white;
content: "✓";
font-weight: bold;
border-radius: 50%;
position: absolute;
margin: 2px;
top: 1;
left: 1;
z-index: 1;
width: 25px;
height: 25px;
text-align: center;
line-height: 28px;
transform: scale(0);
transition-duration: 300ms;
}
span.fancychecks.checked::before {
transform: scale(1);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<img class="checkable" src="http://lorempixel.com/100/100/city/1" />
<img class="checkable" src="http://lorempixel.com/100/100/city/2" />
<img class="checkable" src="http://lorempixel.com/100/100/city/3" />
调用了三个整洁的设备:
:选中的
选择器::在
伪选择器之前content
属性
label:before {
content: url("https://cdn1.iconfinder.com/data/icons/windows8_icons_iconpharm/26/unchecked_checkbox.png");
position: absolute;
z-index: 100;
}
:checked+label:before {
content: url("https://cdn1.iconfinder.com/data/icons/windows8_icons_iconpharm/26/checked_checkbox.png");
}
input[type=checkbox] {
display: none;
}
/*pure cosmetics:*/
img {
width: 150px;
height: 150px;
}
label {
margin: 10px;
}
<input type="checkbox" id="myCheckbox1" />
<label for="myCheckbox1">
<img src="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR0LkgDZRDTgnDrzhnXGDFRSItAzGCBEWEnkLMdnA_zkIH5Zg6oag">
</label>
<input type="checkbox" id="myCheckbox2" />
<label for="myCheckbox2">
<img src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRhJjGB3mQxjhI5lfS9SwXou06-2qT_0MjNAr0atu75trXIaR2d">
</label>
<input type="checkbox" id="myCheckbox3" />
<label for="myCheckbox3">
<img src="https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQuwWbUXC-lgzQHp-j1iw56PIgl_2eALrEENUP-ld72gq3s8cVo">
</label>
这很容易自行实现,不需要预先制定的解决方案。它还会教你很多,因为你看起来不太容易使用CSS。
您的复选框需要具有不同的id
属性。这允许您连接
示例:
<input type="checkbox" id="myCheckbox1" />
<label for="myCheckbox1"><img src="http://someurl" /></label>
将标签附加到复选框将触发浏览器行为:每当有人单击标签(或其中的图像)时,复选框将被切换。
接下来,通过应用例如
display:none来隐藏复选框
到它。
现在剩下要做的就是为
标签::before
伪元素(将用作可视复选框替换元素)设置所需的样式:
label::before {
background-image: url(../path/to/unchecked.png);
}
在最后一个棘手的步骤中,您使用CSS“
:checked
伪选择器在选中复选框时更改图像:
:checked + label::before {
background-image: url(../path/to/checked.png);
}
(相邻同级选择器)确保只更改标记中直接跟随隐藏复选框的标签。
您可以通过将两个图像放在spritemap中并仅在
背景位置中应用更改而不是交换图像来优化该设置。
当然,您需要正确定位标签并应用
show: block;
并设置正确的宽度
和高度
。
我在这些说明之后创建的coDepen示例和代码片段使用了相同的技术,但是没有为复选框使用图像,复选框替换纯粹是用CSS完成的,在标签上创建了一个
::before
选中,具有内容: "✓";
。添加一些圆润的边框和甜美的过渡,结果真的很可爱!
这里是一个工作代码,展示了这项技术,不需要复选框的图像:
http://codepen.io/anon/pen/wadwpx
以下是代码片段中的相同代码:
ul {
list-style-type: none;
}
li {
display: inline-block;
}
input[type="checkbox"][id^="cb"] {
display: none;
}
label {
border: 1px solid #fff;
padding: 10px;
display: block;
position: relative;
margin: 10px;
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
label::before {
background-color: white;
color: white;
content: " ";
display: block;
border-radius: 50%;
border: 1px solid grey;
position: absolute;
top: -5px;
left: -5px;
width: 25px;
height: 25px;
text-align: center;
line-height: 28px;
transition-duration: 0.4s;
transform: scale(0);
}
label img {
height: 100px;
width: 100px;
transition-duration: 0.2s;
transform-origin: 50% 50%;
}
:checked+label {
border-color: #ddd;
}
:checked+label::before {
content: "✓";
background-color: grey;
transform: scale(1);
}
:checked+label img {
transform: scale(0.9);
box-shadow: 0 0 5px #333;
z-index: -1;
}
<ul>
<li><input type="checkbox" id="cb1" />
<label for="cb1"><img src="https://picsum.photos/seed/1/100" /></label>
</li>
<li><input type="checkbox" id="cb2" />
<label for="cb2"><img src="https://picsum.photos/seed/2/100" /></label>
</li>
<li><input type="checkbox" id="cb3" />
<label for="cb3"><img src="https://picsum.photos/seed/3/100" /></label>
</li>
<li><input type="checkbox" id="cb4" />
<label for="cb4"><img src="https://picsum.photos/seed/4/100" /></label>
</li>
</ul>
问题内容: 所以我有一个带有复选框的JTable。我想让复选框 在“选中”时包含一个图像,而在“未选中”时包含另一个图像 (即,显示图像而不是选中或未选中的框)。是否 有办法做到这一点?我试着用TableCellRenderer愚弄它 返回带有ImageIcon的JLabel,但是它并不是非常有效。 更具体地说,当复选框处于选中状态或未选中状态时,右侧的图像 就会出现,但是当用户更改复选框状态(鼠
问题内容: 我在表中有一个复选框列表。(该行中的多个CB之一) 我想用一对自定义的开/关图像替换复选框图像,我想知道是否有人对如何使用CSS更好地了解? 我已经找到了这个“ CSS ninja”教程,但是我不得不承认发现它对我来说有点复杂。 据我所知,您可以使用伪类 我的期望是,通过添加上述CSS,该复选框至少将默认显示为处于OFF状态的图像,然后添加以下内容以使ON 不幸的是,似乎我在某处缺少关
问题内容: 好的,因此我在网络上看到了许多用于通过CSS设置复选框样式的解决方案。但是,我正在寻找更强大的功能,而且我想知道是否有人可以提供帮助。基本上,我想拥有这个解决方案,但是能够将CSS特定颜色覆盖在灰色复选框上。我需要这样做是因为我会有许多不同的复选框,每个复选框需要不同的颜色,而且我不想创建大量不同的图像来处理此问题。有人对如何实现这一目标有任何想法吗? 问题答案: 我创建了一个透明的p
问题内容: 我正在尝试使用CSS更改复选框的默认“框图像”,但是它不起作用。有没有办法解决? 问题答案: 尝试: jQuery
问题内容: 我正在尝试使用以下样式设置复选框: 但是没有应用样式。复选框仍显示其默认样式。如何给它指定的样式? 问题答案: 更新: 以下答案引用了CSS 3广泛使用之前的状态。在现代浏览器(包括InternetExplorer9和更高版本)中,使用首选样式创建复选框替换更为简单,而无需使用JavaScript。 值得注意的是,基本问题没有改变。您仍然不能直接将样式(边框等)应用于复选框元素,并使这
可以配置Vim将其用作IDE。在本节中,将讨论以下主题内容: 语法突出显示 智能缩进 跳转 执行shell命令 配置ctags和csope 自动完成和自动建议 1. 语法突出显示 语法突出显示是IDE的重要功能之一。要启用语法突出显示,请使用 - 例如,下图显示C代码的语法高亮显示 - 要禁用语法突出显示,请使用 - 禁用语法突出显示时,它将显示以下输出 - 2. 智能缩进 要执行自动和智能缩进,
问题内容: 如何在Firefox中设置复选框样式,并取消选中标记和边框? CSS: HTML: 问题答案: input[type=”checkbox”] {
问题内容: 任何样式都会影响每个输入元素。有没有一种方法可以指定仅应用于复选框的样式,而无需将类应用于每个复选框元素? 问题答案: 使用CSS 2,您可以执行以下操作: 到目前为止,这应该得到广泛的支持。