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

如何在URL无锚点时显示默认内容?

纯CSS实现默认内容与锚点区块的切换

嘿,完全不用JavaScript就能搞定这个需求!纯CSS就可以实现默认内容和锚点区块的切换逻辑,我给你捋捋具体怎么做:

第一步:调整HTML结构

把所有锚点指向的区块放在前面,默认内容放在最后——这样我们可以用CSS的兄弟选择器来控制默认内容的显示状态:

<!-- 锚点区块 -->
<div id="a">这是#锚点a对应的内容,访问example.com/#a时显示</div>
<div id="b">这是#锚点b对应的内容,访问example.com/#b时显示</div>

<!-- 默认内容 -->
<div id="default">这是没有任何锚点时显示的默认内容</div>

第二步:编写CSS样式

通过:target伪类和兄弟选择器~来实现切换:

/* 默认状态:隐藏所有锚点区块,显示默认内容 */
#a, #b {
  display: none;
}
#default {
  display: block;
}

/* 当锚点a被激活时:显示a区块,隐藏默认内容 */
#a:target {
  display: block;
}
#a:target ~ #default {
  display: none;
}

/* 当锚点b被激活时:显示b区块,隐藏默认内容 */
#b:target {
  display: block;
}
#b:target ~ #default {
  display: none;
}

简化写法(适合多个锚点区块)

如果你的锚点区块很多,给它们统一加个类(比如.anchor-block),可以大幅简化CSS代码:

<div id="a" class="anchor-block">锚点a内容</div>
<div id="b" class="anchor-block">锚点b内容</div>
<div id="c" class="anchor-block">锚点c内容</div>
<div id="default">默认内容</div>
.anchor-block {
  display: none;
}
#default {
  display: block;
}

/* 任何锚点区块被激活时,显示它并隐藏默认内容 */
.anchor-block:target {
  display: block;
}
.anchor-block:target ~ #default {
  display: none;
}

原理说明

  • :target伪类只会匹配当前URL锚点对应的元素,当URL没有锚点时,没有元素会被:target选中,所以默认内容保持显示。
  • 兄弟选择器~可以选中当前元素之后的所有同级元素,所以当某个锚点区块被:target匹配时,我们可以用它来隐藏后面的默认内容。

这样就完全不需要用JavaScript截取URL做判断啦,纯CSS就能完美实现需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:11:44