通过调整 HTML 结构,并巧妙借助 :target 伪类与兄弟选择器的组合,可以在完全不依赖 JavaScript 的情况下,实现点击锚点后显示目标区块、同时隐藏其余所有内容(甚至包括触发点击的那个链接)的效果。 通常提到前端交互,很多人首先想到的就是 JavaScript。但有些需求,其实只需要
纯CSS点击锚点:显示内容,自动隐藏其他元素及触发链接
时间:2026-06-18
浏览:441
通过调整 HTML 结构,并巧妙借助 :target 伪类与兄弟选择器的组合,可以在完全不依赖 JavaScript 的情况下,实现点击锚点后显示目标区块、同时隐藏其余所有内容(甚至包括触发点击的那个链接)的效果。
通常提到前端交互,很多人首先想到的就是 JavaScript。但有些需求,其实只需要几行 CSS 就能优雅地解决。比如本文要讨论的场景:点击一个链接,显示对应的内容块,同时自动隐藏其他所有内容——包括被点击的链接本身。
实现这一效果的关键在于一个结构上的小调整:将作为锚点的 注意事项: 这套方案绕过了 JavaScript 操作 DOM 的繁琐,兼顾了可维护性、可访问性与性能,是实现纯 CSS 锚点式单页内容切换的一种非常理想的思路。 绿化、压缩、噪点和虚拟水印,自由调节做旧程度。 选择画质和输出格式,预览压缩前后的大小。 标签直接嵌套在目标 :target 伪类,配合相邻或后续兄弟选择器(例如 ~ 和 >),即可精准控制显示与隐藏。
推荐结构:语义化 + 可控性更强
对应 CSS:纯 CSS 驱动显示 / 隐藏逻辑
.page {
display: inline-block; /* 保持块级行为,避免换行干扰 */
}
.content {
display: none;
}
/* 当前目标页显示其 content,隐藏自身 anchor */
.page:target > .content {
display: block;
}
.page:target > a {
display: none;
}
/* 隐藏所有非目标 .page 元素(及其子元素) */
.page:target ~ :not(.page:target) {
display: none;
}
:target ~ :not(.page:target) 这个选择器依赖兄弟关系,所以所有的 .page 必须处于同一层级且顺序排列;扩展建议(可选增强)
.content {
opacity: 0;
transform: translateY(10px);
transition: opacity 0.3s ease, transform 0.3s ease;
}
.page:target > .content {
opacity: 1;
transform: translateY(0);
}
实用工具推荐