纯语义 HTML/CSS 解决方案
这很容易自己实现,不需要预先制作的解决方案。此外,它也会教你很多东西,因为你似乎不太容易使用CSS。
这是您需要做的:
您的复选框需要具有不同的属性。这允许您使用标签的 -属性将 连接到它。id
<label>
for
例:
<input type="checkbox" id="myCheckbox1" />
<label for="myCheckbox1"><img src="http://someurl" /></label>
将标签附加到复选框将触发浏览器行为:每当有人单击标签(或其中的图像)时,复选框都会被切换。
接下来,通过应用复选框来隐藏复选框。display: none;
现在剩下要做的就是为伪元素设置所需的样式(将用作可视复选框替换元素):label::before
label::before {
background-image: url(../path/to/unchecked.png);
}
在最后一个棘手的步骤中,当选中复选框时,您可以使用CSS的伪选择器来更改图像::checked
:checked + label::before {
background-image: url(../path/to/checked.png);
}
(相邻的同级选择器)确保您仅更改标记中隐藏复选框后面的标签。+
您可以通过将两个图像都放在子画面贴图中并仅应用更改而不是交换图像来优化这一点。background-position
当然,您需要正确定位标签,然后应用并设置正确和。display: block;
width
height
编辑:
我在这些说明之后创建的codepen示例和代码段使用相同的技术,但不是为复选框使用图像,而是纯粹使用CSS替换复选框,在标签上创建一个,一旦选中,就有.添加一些圆角边框和甜蜜的过渡,结果真的很讨人喜欢!::before
content: "✓";
下面是一个工作代码笔,它展示了该技术,并且不需要为复选框提供图像:
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>