纯语义 HTML/CSS 解决方案
这很容易自己实现,不需要预先制定的解决方案。此外,它会教你很多东西,因为你对 CSS 似乎不太容易。
这是你需要做的:
您的复选框需要具有不同的id属性。这允许您<label>使用标签的 -for属性将 a 连接到它。
例子:
<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);
}
该+(相邻兄弟选择器)可确保您只更改标签直接按照标记隐藏复选框。
您可以通过将两个图像放入 spritemap 并仅应用更改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>