Skip to content

feat: 优化代码折叠逻辑,引入行数阈值检测与极简 S1 UI#3767

Open
RHZHZ wants to merge 4 commits intotangly1024:mainfrom
RHZHZ:smart-code-collapse
Open

feat: 优化代码折叠逻辑,引入行数阈值检测与极简 S1 UI#3767
RHZHZ wants to merge 4 commits intotangly1024:mainfrom
RHZHZ:smart-code-collapse

Conversation

@RHZHZ
Copy link

@RHZHZ RHZHZ commented Feb 9, 2026

已知问题

  1. 代码折叠体验不佳(全量折叠/全不折叠)

    • 当前折叠功能只按开关启用,对所有代码块一视同仁
    • 对于只有几行的短代码片段也显示折叠条,增加视觉噪音
    • 长文中多处代码折叠会打断阅读节奏
  2. 代码块视觉表现不统一

    • 不同主题下代码块样式差异较大
    • 暗色模式下可读性和对比度不够稳定
    • Mac 样式代码块仅在部分主题中有实现,难以复用

解决方案

  1. 基于行数的智能代码折叠(Scheme C)

    • PrismMac 中为每个代码块统计行数
    • 引入配置项 CODE_COLLAPSE_MIN_LINES(默认 18 行)
    • 仅当代码行数 ≥ 阈值时才注入折叠控件
    • 支持原有 CODE_COLLAPSE 开关,保持向后兼容
  2. 通用化的 Mac 风代码块与 S1 极简折叠 UI

    • 将 Mac 窗口风代码块和极简折叠条样式沉淀到 public/css/prism-mac-style.css
    • 使用 .code-toolbar / .collapse-* 作为通用选择器,不依赖具体主题 ID
    • 通过 html.dark 适配全站暗色模式
    • 为 Prism token 提供一套暗底优化配色,保证代码在暗底上的可读性

改动收益

  1. 更智能的代码折叠体验

    • 短代码不再显示折叠条,阅读更连贯
    • 长代码可按需折叠,减少页面占用
    • 用户可以通过 CODE_COLLAPSE_MIN_LINES 自定义阈值
  2. 更统一的视觉样式

    • 代码块在不同主题下拥有一致的 Mac 窗口风体验
    • 折叠条使用极简灰条(S1),在浅/深色模式下都足够克制
    • Prism token 配色在暗底上对比度更合理,长时间阅读更舒适
  3. 更利于维护与扩展

    • 折叠逻辑集中在 PrismMac,样式集中在 prism-mac-style.css
    • 各个主题只需关注自己的配色与排版,不必重复实现折叠 UI
    • 未来如需增加其他折叠方案也可以在此基础上扩展

具体改动

  1. components/PrismMac.js

    • 增加 CODE_COLLAPSE_MIN_LINES 配置读取,默认值为 20
    • renderCollapseCode 中统计每个代码块的行数,并只对超过阈值的块注入折叠 UI
    • 将折叠头部统一改为极简样式:显示语言名与行数,例如 TS · 42 lines
    • 保持向后兼容:CODE_COLLAPSE 关闭时完全不影响现有行为
  2. public/css/prism-mac-style.css

    • 定义通用的 Mac 窗口风代码块样式:
      • .code-toolbar 容器
      • .pre-mac 三色点
      • pre.notion-code 代码排版与内边距
    • 定义通用的折叠 UI 样式:
      • .collapse-wrapper / .collapse-panel-wrapper / .collapse-header / .collapse-label / .collapse-chevron / .collapse-panel
    • 使用 html.dark 为暗色模式增加背景、边框和阴影适配
    • 为 Prism token 类型提供暗底优化配色
  3. (可选)blog.config.js

    • 新增 CODE_COLLAPSE_MIN_LINES 配置项与注释
    • 示例:
      // 只有超过该行数的代码块才显示折叠条,默认 20
      CODE_COLLAPSE_MIN_LINES: 20,

测试确认

  • 本地开发环境测试通过
  • 启用/关闭 CODE_COLLAPSE 行为符合预期
  • 不同长度代码块在阈值上下表现正确(短代码不折叠,长代码折叠)
  • 浅色/暗色模式下代码块与折叠条样式正常
  • 多个主题下代码块样式一致,无主题特定依赖

@vercel
Copy link

vercel bot commented Feb 9, 2026

@RHZHZ is attempting to deploy a commit to the tangly1024's projects Team on Vercel.

A member of the Team first needs to authorize it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant