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

如何在元素隐藏但保留文档流时实现正确的div间分隔线?

问题

我希望在div之间显示分隔线,即除第一个可见div外,其余每个可见div的顶部都添加一条线。我编写的CSS在无隐藏元素时效果正常,但当部分div被隐藏后,:not(:first-child)选择器无法实现预期效果。

无法使用display: none隐藏div的原因:

  • 元素支持折叠功能
  • 元素需保留在文档流中以支持文本搜索

当前代码如下:
CSS:

.item {
  height: 50px;
  text-align: center;
  vertical-align: middle;
  line-height: 50px;
}

.item:not(:first-child) {
  border-top: 1px solid red;
}

.item.hide {
  overflow: hidden;
  height: 0;
}

HTML:

<div class="container">
  <div class="item hide">Item 1</div>
  <div class="item hide">Item 1</div>
  <div class="item ">Item 1</div>
  <div class="item hide">Item 1</div>
  <div class="item hide">Item 1</div>
</div>

请问能否仅用纯CSS解决该问题?

解决方案

可以用纯CSS解决,核心是用相邻兄弟选择器替代基于DOM结构的:first-child判断,只针对可见元素之间的关系添加边框:

修改后的CSS代码:

.item {
  height: 50px;
  text-align: center;
  vertical-align: middle;
  line-height: 50px;
}

/* 仅给紧跟在可见.item后的可见.item添加顶部边框 */
.item:not(.hide) + .item:not(.hide) {
  border-top: 1px solid red;
}

.item.hide {
  overflow: hidden;
  height: 0;
}

原理说明

原来的:not(:first-child)是基于DOM结构的子元素顺序,哪怕第一个子元素是隐藏的,第二个子元素(不管是否可见)都会被选中添加边框,导致第一个可见元素顶部出现多余的线。

而+相邻兄弟选择器只会匹配直接紧跟在可见元素之后的可见元素,这样第一个可见元素的顶部不会有边框,后续所有可见元素的顶部都会自动添加分隔线,完全不受隐藏元素的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:35:26