[选中复选框时更改其他标签的样式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[选中复选框时更改其他标签的样式相关的知识,希望对你有一定的参考价值。

我的复选框有问题。我正在尝试找到一种解决方案,即选中我当前的复选框以更改其他人的不透明度复选框。 CSS有可能吗?我用CSS输入和标签制作的。这是我的代码。

ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

li {
  margin-bottom: 10px;
  display: block;
}

.styled-checkbox {
  position: absolute;
  opacity: 0;
}
.styled-checkbox:checked + label {
  opacity: 1;
}
.styled-checkbox:checked + label label {
  opacity: 0.5;
}
.styled-checkbox + label {
  position: relative;
  cursor: pointer;
  padding: 0;
  display: flex;
  align-items: center;
  font-size: 0.875rem;
}
.styled-checkbox + label:before {
  content: '';
  margin-right: 10px;
  display: inline-block;
  width: 14px;
  height: 14px;
  vertical-align: text-top;
  border: 1px solid #000;
}
.styled-checkbox:checked + label:after {
  content: '';
  position: absolute;
  left: 1px;
  top: 7px;
  background: white;
  width: 2px;
  height: 2px;
  box-shadow: 2px 0 0 #000, 4px 0 0 #000, 4px -2px 0 #000, 4px -4px 0 #000, 4px -6px 0 #000, 4px -8px 0 #000;
  transform: rotate(45deg);
  transition: all 0.3s ease-out;
}
<ul>
  <li>
    <input type="checkbox" class="styled-checkbox" id="styled-checkbox-1" />
    <label for="styled-checkbox-1">Test one</label>
  </li>
  <li>
    <input type="checkbox" class="styled-checkbox" id="styled-checkbox-2" />
    <label for="styled-checkbox-2">Test Two</label>
  </li>
  <li>
    <input type="checkbox" class="styled-checkbox" id="styled-checkbox-3" />
    <label for="styled-checkbox-3">Test Three</label>
  </li>
  <li>
    <input type="checkbox" class="styled-checkbox" id="styled-checkbox-4" />
    <label for="styled-checkbox-4">Test Four</label>
  </li>
</ul>

`

期望的目标就是这样

enter image description here

希望你们能理解这个问题。在此先感谢

答案

只需删除此声明:.styled-checkbox:checked + label label并添加另一个.styled-checkbox.inactive + label以设置“非活动”复选框的不透明度。

  • 加载DOM之后,获取所有复选框并添加一个Click侦听器
  • 如果未选中任何复选框,请从所有这些人中删除“无效”类
  • 如果至少选中了一个复选框,则将“非活动”类别添加到所有未选中的类别中>
window.addEventListener('load', function() {
    let checks = document.querySelectorAll('.styled-checkbox');
    checks.forEach(function(check) {
        check.addEventListener('click', chkStyles);
    });
    function chkStyles() {
        // Verify if there's at least one checkbox checked
        let checked = document.querySelectorAll('.styled-checkbox:checked');
        if(checked.length == 0) {
            // No checked checkbox, remove all inactive
            checks.forEach(function(check) { check.classList.remove('inactive'); });
        } else {
            // At least 1 is checked
            checks.forEach(function(check) {
                if(check.checked) {
                    check.classList.remove('inactive');
                } else {
                    check.classList.add('inactive');
                }
            });
        }
    }
});
ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

li {
  margin-bottom: 10px;
  display: block;
}

.styled-checkbox {
  position: absolute;
  opacity: 0;
}
.styled-checkbox:checked + label {
  opacity: 1;
}
.styled-checkbox.inactive + label {
  opacity: 0.5;
}
.styled-checkbox + label {
  position: relative;
  cursor: pointer;
  padding: 0;
  display: flex;
  align-items: center;
  font-size: 0.875rem;
}
.styled-checkbox + label:before {
  content: '';
  margin-right: 10px;
  display: inline-block;
  width: 14px;
  height: 14px;
  vertical-align: text-top;
  border: 1px solid #000;
}
.styled-checkbox:checked + label:after {
  content: '';
  position: absolute;
  left: 1px;
  top: 7px;
  background: white;
  width: 2px;
  height: 2px;
  box-shadow: 2px 0 0 #000, 4px 0 0 #000, 4px -2px 0 #000, 4px -4px 0 #000, 4px -6px 0 #000, 4px -8px 0 #000;
  transform: rotate(45deg);
  transition: all 0.3s ease-out;
}
<ul>
  <li>
    <input type="checkbox" class="styled-checkbox" id="styled-checkbox-1" />
    <label for="styled-checkbox-1">Test one</label>
  </li>
  <li>
    <input type="checkbox" class="styled-checkbox" id="styled-checkbox-2" />
    <label for="styled-checkbox-2">Test Two</label>
  </li>
  <li>
    <input type="checkbox" class="styled-checkbox" id="styled-checkbox-3" />
    <label for="styled-checkbox-3">Test Three</label>
  </li>
  <li>
    <input type="checkbox" class="styled-checkbox" id="styled-checkbox-4" />
    <label for="styled-checkbox-4">Test Four</label>
  </li>
</ul>

以上是关于[选中复选框时更改其他标签的样式的主要内容,如果未能解决你的问题,请参考以下文章

防止在更改字体粗细时移动文本[重复]

当复选框兄弟姐妹更改为选中时显示警报

Javascript:更改复选框上的标签背景颜色

选中多选框时改变相对应的包裹复选框的元素样式

如何更改复选框输入样式,以便用户点击标签而不是实际框?

选中复选框时动态更改引导进度条值