如何在CSS中改变复选框的背景色

63lcw9qa  于 2023-10-21  发布在  其他
关注(0)|答案(2)|浏览(187)

我在div里面有一个复选框。div类名称是main。当我选中复选框时,我试图将背景颜色设置为main classname。但无法将背景颜色设置为.main classname。
如果我选中了复选框,它将看起来像下面。

如果我取消选中复选框,它将看起来像下面。

超文本标记语言:

<div class="main"> 
 <input type="checkbox" id="maincheck">{{item.title}}
 </div>

CSS:

.main input[id='maincheck']:checked:after{
  background-color: #ccc;
}

如何使用CSS实现?演示:https://stackblitz.com/edit/angular-checkbox-example-mhvnkb?file=app%2Fapp.component.html

7fhtutme

7fhtutme1#

听起来你想改变复选框的父元素的背景颜色。这可以重新表述为'*if .main contains a checked checkbox then..'。在CSS中,你可以使用:has()伪类来选择一个元素,该元素有一个特定的子元素:

.main:has(input[id='maincheck']:checked) {
  background-color: #ccc;
}
<div class="main">
  <input type="checkbox" id="maincheck">item title
</div>

但请注意,在撰写本文时,Firefox还不支持此功能。(见https://caniuse.com/css-has

另一种方法是将复选框移动到其父复选框之前。然后,您可以使用next-sibling combinator+)来选择直接跟随复选框的div:

.wrap {
  position: relative;
}

input[id='maincheck'] {
  position: absolute;
}

label[for='maincheck'] {
  margin-left: 1.5rem;
}

input[id='maincheck']:checked+.main {
  background-color: #ccc;
}
<div class="wrap">
  <input type="checkbox" id="maincheck" />
  <div class="main">
    <label for="maincheck">item title</label>
  </div>
</div>
axzmvihb

axzmvihb2#

你不能只使用CSS直接改变父元素的样式,所以你必须使用JavaScript或jQuery。
下面是一个JavaScript方法:

document.addEventListener('DOMContentLoaded', function() {
  // Grab the checkbox element
  const checkBox = document.getElementById("maincheck");

  // Grab the main div
  const mainDiv = document.querySelector(".main");

  // Add an event listener for checkbox changes
  checkBox.addEventListener("change", function() {
    if (this.checked) {
      // If checked, add the 'checked' class to the main div
      mainDiv.classList.add("checked");
    } else {
      // If unchecked, remove the 'checked' class from the main div
      mainDiv.classList.remove("checked");
    }
  });
});
.main {
  /* Default background color */
  background-color: transparent;
}

.main.checked {
  /* Background color when checkbox is checked */
  background-color: #ccc;
}
<div class="main"> 
  <input type="checkbox" id="maincheck">Item Title
</div>

当你选中这个复选框时,.main div的背景颜色将变为#ccc,当你取消选中它时,背景将恢复为透明。

相关问题