火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

details 深色模式适配:四处要改的位置

发布于 17小时前
2

深色主题上线后,折叠面板的标题文字经常整块消失。原因不在 details 本身,而在它默认继承系统控件样式,不跟随页面主题切换,背景变深而文字色未变。

夜间环境下笔记本电脑屏幕上显示界面,用于说明深色主题下的样式适配
深色主题下需要显式接管折叠面板的配色

四处必须显式声明

  1. 文字色与背景色。summary 与内容区各自给出明确取值,不依赖继承。
  2. marker 颜色。展开标记由 summary::marker 或 ::-webkit-details-marker 渲染,颜色跟随文字而非背景,需要单独设置。
  3. hover 与 focus 状态。系统控件的悬停与焦点反馈在自定义配色后失效,要手写。
  4. 子元素的背景与边框。内容区里的卡片、表格沿用浅色底色时会出现视觉断裂。

主题变量联动

:root {
  --panel-bg: #ffffff;
  --panel-fg: #1f2328;
  --panel-border: #d0d7de;
}

:root[data-theme="dark"] {
  --panel-bg: #161b22;
  --panel-fg: #e6edf3;
  --panel-border: #30363d;
}

details {
  background: var(--panel-bg);
  color: var(--panel-fg);
  border: 1px solid var(--panel-border);
}

summary::marker { color: var(--panel-fg); }
summary:hover { background: color-mix(in srgb, var(--panel-fg) 8%, transparent); }
summary:focus-visible { outline: 2px solid #58a6ff; outline-offset: 2px; }

颜色全部走变量,主题切换时只改根节点的一组取值,不需要为每个组件写两套规则。

两个细节

  • 去掉默认三角时不要顺手删掉 focus 样式,键盘可达性依赖这一条;
  • 自定义标记用 list-style: none 隐藏原有符号后,另加旋转图标表示展开状态,图标颜色同样走变量。

检查清单

  • 两套主题下都能读清 summary 文字;
  • 展开标记颜色与文字一致;
  • 键盘 Tab 到 summary 时有可见焦点框;
  • 内容区里的表格与卡片不留浅色底;
  • 打印样式不继承深色取值。

常见问题(FAQ)

深色模式下折叠标题看不见怎么办?
显式声明 summary 的 color 与 background-color,并把取值接到主题变量上。系统控件样式不会自动适配深色背景。
展开三角的颜色怎么改?
通过 summary::marker 设置,WebKit 内核还需处理 ::-webkit-details-marker。两个选择器都写上覆盖面最广。
自定义图标后还能用键盘操作吗?
可以。键盘可达性来自 details 与 summary 的原生行为,与图标无关。替换图标时保留 focus-visible 样式即可。
为什么 hover 效果消失了?
自定义配色后系统控件的悬停反馈不再生效。需要自行写 summary:hover 规则,配色建议由主题变量推导。
内容区的表格在深色主题下很突兀怎么办?
子元素同样走主题变量。背景色、边框色、文字色统一取自根节点的一组变量,避免局部沿用浅色底色。
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026