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

如何让列表项悬停高亮占满父列表全宽(模拟IDE文件树效果)

问题根源

滚动容器内的块级列表项默认宽度仅等于容器的可视宽度,内容超出产生横向滚动后,列表项本身的宽度不会跟着内容延伸,导致 hover 背景只能覆盖原可视区域范围。

解决方案

只需修改少量 CSS 即可解决,无需重构 HTML 结构:

body {
  font-size: 16px;
  font-family: monospace;
}

.tree {
  box-sizing: border-box;
  width: 200px;
  height: 400px;
  margin: 0;
  padding: 20px 0;
  overflow-x: scroll;
  background-color: #ebedef;
  /* 新增:清除默认列表样式 */
  list-style: none;
  /* 新增:grid单列布局,让子项宽度自动适配最长内容 */
  display: grid;
  grid-template-columns: 1fr;
}

.tree-node {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: flex-start;
  height: 18px;
  padding: 6px 0;
  cursor: pointer;
}

.tree-node:hover {
  background-color: #dbdde0;
}

.tree-node span {
  line-height: 18px;
  /* 新增:控制文件名不换行,原white-space从.tree移到这里 */
  white-space: nowrap;
}

.tree-node svg {
  margin-right: 7px;
}

说明

  • grid 布局会自动让所有列表项的宽度等于最长内容的总宽度,不管横向滚动到什么位置,hover 背景都会铺满整行
  • 无需调整你原来的padding-left缩进逻辑,原有层级展示效果完全保留
  • 如果需要兼容非常旧的浏览器,也可以给.tree内层加一个<div class="tree-inner">包裹所有li,给.tree-inner设置display: inline-block; min-width: 100%;,再给.tree-node设置width: 100%;,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:27:03