You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么复选框选中状态无法影响后续div内的span元素样式?

问题原因

CSS 中的~是后续兄弟选择器,仅能匹配与当前元素同层级、且在当前元素之后出现的元素。你的span被div包裹,属于div的子元素,和.check类的复选框不是同级元素,所以原来的选择器规则无法命中span,样式不会生效。

修复方案

修改CSS的选择器规则,先选中.check后续的同级div,再选中div内部的对应span即可,调整后的代码如下:

:root {
  --main-color: red;
  --secondary-color: blue;
  --dark-color: #444;
  --light-color: #fafafa;
}

body {
  font-family: 'Montserrat', sans-serif;
  text-align: justify;
  margin: 0px;
  display: grid;
  place-items: center;
  font-size: 18px;
}

input {
  box-sizing: border-box;
}

.toggle {
  height: 100px;
  width: 100px;
  border: 1px solid black;
}

span {
  height: 20px;
  width: 100px;
  display: grid;
  place-items: center;
  background-color: blue;
  margin: 5px 0;
  transition: 400ms; /* 把transition提出来,未选中状态也会有过渡效果 */
}

.check:checked ~ div span {
  background: red;
}

.check:checked ~ div .span-one {
  position: relative;
  top: 25px;
  transform: rotate(45deg);
}

.check:checked ~ div .span-two {
  position: relative;
  opacity: 0;
}

.check:checked ~ div .span-three {
  position: relative;
  bottom: 25px;
  transform: rotate(-45deg);
}

优化建议

如果担心页面内其他div被误匹配,可以给包裹span的div添加专属类名,示例如下:

<input class="check" type="checkbox">
<div class="toggle-wrapper">
  <span class="span-one"></span>
  <span class="span-two"></span>
  <span class="span-three"></span>
</div>

之后把CSS选择器中的div替换为.toggle-wrapper即可,规则更精准。


内容的提问来源于stack exchange,提问作者niyojet344

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:54:02