css 实现 复选框样式 全选 半选不选三种样式
时间: 2024-01-30 07:08:50 浏览: 154
可以使用 CSS 伪类和伪元素来实现复选框的样式,以下是一个简单的示例代码,实现全选、半选、不选三种状态:
```html
<!DOCTYPE html>
<html>
<head>
<title>复选框样式示例</title>
<style>
input[type="checkbox"] {
display: none; /* 隐藏原生复选框 */
}
label.checkbox {
position: relative;
display: inline-block;
width: 20px;
height: 20px;
margin-right: 10px;
border: 1px solid #ccc;
border-radius: 3px;
cursor: pointer;
}
label.checkbox::before {
content: "";
position: absolute;
top: 2px;
left: 2px;
width: 16px;
height: 16px;
background-color: #fff;
border-radius: 2px;
box-shadow: inset 0 1px 3px rgba(0,0,0,.1);
transition: all .2s;
}
input[type="checkbox"]:checked + label.checkbox::before {
background-color: #007bff;
}
input[type="checkbox"]:checked + label.checkbox::after {
content: "\2713";
position: absolute;
top: 1px;
left: 4px;
font-size: 14px;
color: #fff;
}
input[type="checkbox"]:indeterminate + label.checkbox::before {
background-color: #ffc107;
}
input[type="checkbox"]:indeterminate + label.checkbox::after {
content: "\2212";
position: absolute;
top: 1px;
left: 5px;
font-size: 14px;
color: #fff;
}
</style>
</head>
<body>
<input type="checkbox" id="checkAll">
<label class="checkbox" for="checkAll"></label>
<input type="checkbox" id="check1">
<label class="checkbox" for="check1"></label>
<input type="checkbox" id="check2">
<label class="checkbox" for="check2"></label>
<script>
const checkAll = document.getElementById("checkAll");
const checkboxes = document.querySelectorAll("input[type='checkbox']");
checkAll.addEventListener("click", function() {
for (let i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = checkAll.checked;
}
});
checkboxes.forEach(function(checkbox) {
checkbox.addEventListener("click", function() {
let checkedCount = document.querySelectorAll("input[type='checkbox']:checked").length;
if (checkedCount === 0) {
checkAll.checked = false;
checkAll.indeterminate = false;
} else if (checkedCount === checkboxes.length) {
checkAll.checked = true;
checkAll.indeterminate = false;
} else {
checkAll.checked = false;
checkAll.indeterminate = true;
}
});
});
</script>
</body>
</html>
```
在这个示例中,我们首先使用 CSS 样式来定义了复选框的样式,包括未选中、选中和半选中三种状态。我们使用了 `::before` 和 `::after` 伪元素来实现复选框的外观,并使用了 `:checked` 和 `:indeterminate` 伪类来控制选中和半选中状态下复选框的样式。
在 HTML 中,我们定义了三个复选框和一个全选复选框,并使用了 `label` 元素来包裹复选框。我们在 JavaScript 中添加了点击事件监听器,当全选复选框被选中或取消选中时,我们遍历所有的复选框,并将它们的 `checked` 属性设置为全选复选框的状态。当任意一个复选框被选中或取消选中时,我们计算当前被选中的复选框数量,并根据数量来设置全选复选框的状态。这样就可以实现复选框的全选、半选和不选三种样式了。
阅读全文