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

仅用HTML/CSS开发掷骰子游戏:点击锚点无法隐藏div元素

问题原因

你使用的CSS通用兄弟选择器~只能选中目标元素之后的同级元素,而#dice1在#dice2的前面,所以#dice2:target~#dice1这个选择器无法匹配到任何元素,自然无法隐藏#dice1。

解决方案

推荐采用「默认隐藏所有骰子,仅显示被锚点选中的骰子」的逻辑,无需单独隐藏其他骰子,代码修改如下:

修改后的CSS

/* 默认隐藏所有骰子 */
#dice1, #dice2, #dice3 {
  display: none;
}

/* 显示被选中的骰子1 */
#dice1:target {
  display: block;
  /* 可添加骰子1的滚动动画 */
}

/* 显示被选中的骰子2并播放动画 */
#dice2:target {
  display: block;
  animation: roll2 5s ease-in-out;
  animation-delay: 0.3s;
  animation-fill-mode: forwards;
}

/* 链接显示隐藏逻辑 */
#dice2:target~#dice2-link,
#dice2:target~#dice1-link {
  display: none;
}

#dice2:target~#dice3-link {
  display: block;
}

原HTML结构保持不变

你的HTML结构无需调整,继续使用原有代码即可:

<div class="container">
  <div class="dice1" id="dice1">
    <div class="face face1">
    </div>
  </div>
  <div class="dice2" id="dice2">
    <div class="face face1">
    </div>
  </div>
  <a href="#dice1" id="dice1-link">Roll Dice 1</a>
  <a href="#dice2" id="dice2-link">Roll Dice 2</a>
  <a href="#dice3" id="dice3-link">Roll Dice 3</a>
</div>
备选方案(兼容性稍差)

如果不想修改原有逻辑,也可以使用CSS的:has()选择器直接选中包含#dice2:target的容器内的#dice1,但该选择器在旧浏览器中不支持:

.container:has(#dice2:target) #dice1 {
  display: none;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:55:32