如何使整个自定义复选框/Div可点击——不仅仅是标签+输入框

14

我有自定义的复选框,样式类似按钮。当你点击标签或输入时,周围的div会改变颜色。但是,只有标签和输入是可点击的。

有没有办法使整个div/按钮可点击(即边框内的所有内容)?

这是我的代码:

div.label {  
    border:solid 1px gray;
    line-height:40px;
    height:40px;
    width: 250px;
    border-radius:40px;
    -webkit-font-smoothing: antialiased; 
    margin-top:10px;
    font-family:Arial,Helvetica,sans-serif;
    color:gray;
    text-align:center;
}

label {
    display:inline;
    text-align:center;
}

input[type=checkbox] {
    display: none;
}

input:checked + div {
    border: solid 1px red;
    color: #F00;
}

input:checked + div:before {
    content: "\2713";
}
<input id="lists[Travel]" type="checkbox" name="lists[Travel]" />
<div class="label">
    <label for="lists[Travel]">Travel</label> <br>
</div>

2个回答

21
答案很简单:您不需要额外的
元素。实际上,您可以将

你好,抱歉评论有点过时了,但是你能解释一下为什么只有label标签可以产生这种效果吗?我为什么不能用div来代替呢?编辑 我在MDN页面上找到了原因:“当单击或点击与表单控件相关联的<label>时,也会为关联的控件引发相应的单击事件。”链接:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label - João Victor
@JoãoVictor非常感谢您提供的额外权威参考。我刚刚在我的答案中添加了一句引用。所以感谢您帮助增强内容。 - Axel

5

以下是一种实现方法:

<div onclick="this.querySelector('input[type=checkbox]').click()">
  <input type="checkbox" style="pointer-events:none">
  <span>Label</span>
</div>

或者如果您给复选框设置了 id

<div onclick="abc.click()">
  <input id="abc" type="checkbox" style="pointer-events:none">
  <span>Label</span>
</div>

你需要在这个方法中使用 pointer-events:none ,否则当你直接点击复选框时会发生双击(导致选中和取消选中)。

1
"pointer-events: none" 对于自定义的 Bootstrap 复选框无效。在 onclick 中,使用 "if (event.target == this) { this.querySelector('input[type=checkbox]').click(); }" 解决了问题。 - e-frank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接