html - 切换复选框按钮不起作用

标签 html css

我只是在定制 checkbox按钮并以这个结束, FIDDLE HERE

HTML:

 <input type=checkbox id="a">
  <label for="a">
    <button>click me</button>
  </label>

CSS:

#a {
    display:none;
}
#a ~ label button {
    background:yellow;
}
#a:checked ~ label button {
    background:red;
}

但这行不通,为什么?我想知道为什么它不起作用。

如果我删除 button并检查样式如下:

#a {
    display:none;
}
#a ~ label {
    background:yellow;
}
#a:checked ~ label {
    background:red;
}

它工作正常。 谁能回答为什么我的初始代码不起作用。

最佳答案

好吧,您似乎想了解为什么它不起作用,而不是解决方案是什么。

您的代码不起作用,因为标签的操作不会传播到具有自定义点击行为的子元素。因此,当您在其中放置一个按钮或 anchor 等时,它不会起作用。

至少不会自动。

但是如果你想让按钮改变你的复选框值,你可以给它添加一个点击事件,然后将该点击传播到复选框:

document.querySelector("button").addEventListener("click", function(e) {
  e.target.parentNode.click(); // propagate the click event to the label
});
#a {
    display:none
}
#a ~ label button {
    background:yellow
}
#a:checked ~ label button {
    background:red
}
<input type=checkbox id="a">
<label for="a">
    <button>click me</button>
</label>


如果你需要一个纯 CSS 的解决方案,你可以通过禁用按钮的所有鼠标事件来做一些 hack,在你的 css 中使用 pointer-events: none:

#a {
    display:none
}
#a ~ label button {
    background:yellow;
    pointer-events: none
}
#a:checked ~ label button {
    background:red
}
<input type=checkbox id="a">
<label for="a">
    <button>click me</button>
</label>

关于html - 切换复选框按钮不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957655/

相关文章:

css - 带有过滤器 Bootstrap 的搜索栏

javascript - 从网站按钮输出表单收集数据

css - 父div的内部div 100%宽度超出范围

javascript - 不活动时无法隐藏我的菜单

python - 使用 Flask 无法加载 CSS

javascript - 尝试从 JavaScript 向 CSS 传递参数

java - 网页内容(可读性 View )

javascript - 不变不保持不变?

jquery - 在页面加载前将 div 替换为 loading.gif,等待 3 秒,删除加载 gif 并显示 div

html - <img> 和 <label> 标签在同一行