Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

22 KiB
Raw Permalink Blame History

📡 BC-M11-003-JZ · DEV-010桔子 · 系统风格组件库与主题切换·环节4~5·Playground交互演示+响应式适配+组件组合模板+主题增强

🌊 HoloLake Era · 工程广播 v3.1

广播编号BC-M11-003-JZ

开发者DEV-010 桔子

协作人格体知秋GEN∞-ZQ

模块M11 · 系统风格组件库与主题切换HoloLake Design System

环节环节4~5 · Playground交互演示 + 响应式适配 + 组件组合模板 + 主题增强

EL等级EL-3 | 🌱成长型

生成时间2026-03-07

前序任务BC-M11-002-JZ环节2~3 · 九连胜 · 3/3全success · 组件库文档化+4新组件+交互增强复制功能 · 设计系统雏形成型)


💙 知秋的话

桔子~ 九连胜了!🎉🎉🎉🎉🎉🎉🎉🎉🎉

你的组件库现在已经有 10类组件 + 使用文档 + 示例代码 + 复制按钮 + 双主题——这已经是一个「设计系统的雏形」了。

但是——

  • 别人拿到你的组件库,怎么快速看到所有组件长什么样、能做什么? 🤔
  • 你的组件在 手机上看起来会不会乱? 📱
  • 能不能用你已有的组件 直接拼出一个完整页面?(像搭积木一样)🧱
  • 切换主题的时候,能不能有个丝滑的过渡动画?

这次知秋给你准备了 四个任务,一次性搞定!

💡 全部都是纯前端 HTML/CSS/JS你已经驾轻就熟了。这次的重点不是学新语法而是 用你已有的能力做出更完整的东西


🔩 头·接口规范

四大任务总览

任务 名称 目标 核心产出
A 📸 Playground 交互演示页 一个独立页面展示所有组件的交互状态 playground.htmlplayground.css
B 📱 响应式适配 组件库 + Playground 支持手机/平板/桌面三档 CSS media queries 断点
C 🧱 组件组合模板 用现有组件拼出2个常用页面模板 templates/login-card.htmltemplates/settings-panel.html
D 主题增强 过渡动画 + 系统偏好自动检测 + 偏好持久化 CSS transition + prefers-color-scheme • localStorage

任务A📸 Playground 交互演示页

文件变更

文件 变更类型 说明
playground.html 新建 组件 Playground 主页面 · 展示所有10类组件的交互状态
playground.css 新建 Playground 页面专属样式引用组件库CSS变量

功能规范

// ===== Playground 页面结构 =====
// 1. 顶部标题栏:"🎨 HoloLake Design System · Playground"
//    右侧放主题切换按钮(复用已有的切换逻辑)

// 2. 左侧导航(侧边栏):
//    列出所有10类组件名称点击滚动到对应区域
//    当前查看的组件名称高亮

// 3. 右侧主内容区:
//    每个组件一个独立区块,包含:
//    ├── 组件名称 + 简短说明
//    ├── 🔴 实时交互预览区(可以点击、切换、操作)
//    └── 📋 代码展示区(折叠/展开,带复制按钮)

// ===== 侧边栏导航 =====
renderSidebar()
// - 列出全部10类组件按钮、输入框、卡片、标签、提示框、
//   模态框、进度条、开关、头像组、面包屑
// - 点击某一项 → 平滑滚动到对应组件区块
// - 滚动时自动高亮当前可见的组件Intersection Observer

// ===== 代码折叠/展开 =====
toggleCode(componentId)
// - 每个组件区块下方有「查看代码 ▼」按钮
// - 点击展开 → 显示该组件的HTML使用代码
// - 再点击折叠 → 「查看代码 ▼」
// - 代码区域带复制按钮(复用已有的复制逻辑)

HTML结构参考

<!-- playground.html 基本结构 -->
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>🎨 HoloLake Design System · Playground</title>
    <link rel="stylesheet" href="components.css">  <!-- 你的组件库CSS -->
    <link rel="stylesheet" href="playground.css">   <!-- Playground专属样式 -->
</head>
<body>
    <header id="pg-header">
        <h1>🎨 HoloLake Design System</h1>
        <span class="subtitle">Playground · 组件交互演示</span>
        <button id="theme-toggle" onclick="toggleTheme()">🌙 / ☀️</button>
    </header>
    
    <div id="pg-layout">
        <nav id="pg-sidebar">
            <!-- 组件导航列表 -->
        </nav>
        <main id="pg-content">
            <!-- 每个组件的演示区块 -->
            <section id="comp-button" class="comp-section">
                <h2>按钮 Button</h2>
                <p class="comp-desc">基础交互按钮,支持多种样式变体</p>
                <div class="comp-preview">
                    <!-- 实时可交互的按钮示例 -->
                </div>
                <div class="comp-code" id="code-button" style="display:none">
                    <pre><code><!-- 按钮使用代码 --></code></pre>
                    <button class="copy-btn" onclick="copyCode('button')">📋 复制</button>
                </div>
                <button class="toggle-code-btn" onclick="toggleCode('button')">
                    查看代码 ▼
                </button>
            </section>
            <!-- ... 其他9类组件同理 ... -->
        </main>
    </div>
    
    <script src="components.js"></script>  <!-- 你的组件库JS -->
    <script src="playground.js"></script>  <!-- Playground交互JS -->
</body>
</html>

任务B📱 响应式适配

文件变更

文件 变更类型 说明
components.css 追加 组件库响应式断点(移动端组件自适应)
playground.css 追加 Playground布局响应式侧边栏折叠、网格自适应

三档断点

/* ===== 三档响应式断点 ===== */

/* 桌面(默认):> 1024px */
/* 无需额外CSS默认就是桌面布局 */

/* 平板768px ~ 1024px */
@media (max-width: 1024px) {
    /* Playground侧边栏变窄或折叠为顶部横向导航 */
    /* 组件预览区宽度自适应 */
    /* 代码区域字号略小 */
}

/* 手机:< 768px */
@media (max-width: 768px) {
    /* Playground侧边栏完全隐藏顶部出现汉堡菜单按钮 */
    /* 组件预览区单列全宽 */
    /* 按钮、输入框等组件宽度 100% */
    /* 卡片组件单列堆叠 */
    /* 头像组头像尺寸缩小 */
    /* 面包屑超长时省略中间项(显示首尾 + ... */
}

关键适配规则

// ===== 汉堡菜单(手机端) =====
// 手机端侧边栏默认隐藏
// 点击汉堡按钮 → 侧边栏以抽屉方式从左侧滑出
// 选择组件后 → 自动关闭抽屉 + 滚动到对应区块

// ===== 组件自适应规则 =====
// 按钮手机端宽度100%,垂直排列
// 输入框手机端宽度100%
// 卡片:手机端单列,平板端双列,桌面三列
// 模态框手机端全屏平板端80%宽桌面端50%宽
// 进度条宽度始终100%
// 面包屑:手机端折叠中间项

任务C🧱 组件组合模板

文件变更

文件 变更类型 说明
templates/login-card.html 新建 登录/注册卡片模板 · 用现有组件拼出
templates/settings-panel.html 新建 设置面板模板 · 用现有组件拼出

模板1登录卡片

用到的组件:
├── 卡片(外层容器)
├── 输入框 × 2用户名 + 密码)
├── 按钮 × 2登录 + 注册)
├── 开关 × 1记住我
└── 提示框 × 1登录成功/失败反馈)

交互:
- 点击「登录」→ 显示成功提示框(纯前端模拟,不需要真登录)
- 点击「注册」→ 切换到注册表单(多一个「确认密码」输入框)
- 「记住我」开关状态保存到 localStorage

模板2设置面板

用到的组件:
├── 面包屑(首页 > 设置 > 显示设置)
├── 卡片 × 3三个设置分区
├── 开关 × 3深色模式 / 通知 / 自动保存)
├── 进度条 × 1存储空间使用量
├── 按钮 × 2保存设置 / 重置默认)
├── 头像组 × 1团队成员展示
└── 提示框 × 1设置已保存反馈

交互:
- 所有开关状态保存到 localStorage
- 点击「保存设置」→ 绿色提示框「✅ 设置已保存」
- 点击「重置默认」→ confirm确认 → 重置所有开关 + 清除localStorage
- 「深色模式」开关联动全局主题切换

任务D 主题增强

文件变更

文件 变更类型 说明
components.css 追加 主题切换过渡动画 + prefers-color-scheme 自动检测
components.js 追加 主题偏好 localStorage 持久化 + 系统偏好监听

功能规范

/* ===== 主题过渡动画 ===== */
/* 切换主题时,所有颜色属性平滑过渡,不再「闪一下」 */
* {
    transition: background-color 0.3s ease, color 0.3s ease, 
                border-color 0.3s ease, box-shadow 0.3s ease;
}

/* ===== 系统偏好自动检测 ===== */
/* 如果用户系统是暗色模式 → 自动使用暗色主题 */
/* 如果用户系统是亮色模式 → 自动使用亮色主题 */
/* 用户手动切换后 → 以用户选择为准(覆盖系统偏好) */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        /* 暗色变量 */
    }
}
@media (prefers-color-scheme: light) {
    :root:not([data-theme="dark"]) {
        /* 亮色变量 */
    }
}
// ===== 主题偏好持久化 =====
initTheme()
// 1. 检查 localStorage 是否有 'hololake-theme' 键
// 2. 如果有 → 使用用户之前选择的主题
// 3. 如果没有 → 检测系统偏好 (window.matchMedia('(prefers-color-scheme: dark)'))
// 4. 将结果应用到 document.documentElement.setAttribute('data-theme', theme)

toggleTheme()
// 1. 切换当前主题dark ↔ light
// 2. 保存到 localStorage'hololake-theme'
// 3. 更新切换按钮图标(🌙 ↔ ☀️)

// ===== 系统偏好变化监听 =====
window.matchMedia('(prefers-color-scheme: dark)')
    .addEventListener('change', (e) => {
        // 如果用户没有手动选择过主题 → 跟随系统变化
        // 如果用户手动选择过 → 忽略系统变化
    });

与其他模块的对接点

无 · 纯前端独立模块 · 不依赖后端API


🧩 中间·知秋+人类协作区


🎯 尾·验收标准

评分100 = 合格可组装 / 非100 = 继续改

任务A验收Playground交互演示页

# 测试项 操作 期望结果
A1 页面加载 浏览器打开 playground.html 左侧侧边栏列出10类组件 · 右侧展示全部组件预览
A2 侧边栏导航 点击侧边栏中的「开关」 页面平滑滚动到开关组件区块 · 侧边栏「开关」高亮
A3 组件可交互 在预览区点击按钮、切换开关、拖动进度条 组件有真实交互响应(不是静态截图)
A4 代码折叠 点击任一组件的「查看代码 ▼」 展开代码区 · 再次点击折叠 · 代码区有复制按钮且复制功能正常
A5 滚动高亮 手动滚动页面 侧边栏自动高亮当前可见的组件名称

任务B验收响应式适配

# 测试项 操作 期望结果
B1 桌面端 浏览器窗口宽度 > 1024px 侧边栏+主内容区双栏布局 · 卡片三列排布
B2 平板端 浏览器窗口缩小到 768~1024px 侧边栏变窄或折叠 · 卡片双列 · 内容不溢出
B3 手机端 浏览器窗口缩小到 < 768px或 F12 开发者工具手机模式) 侧边栏消失 · 出现汉堡菜单按钮☰ · 卡片单列 · 按钮全宽
B4 汉堡菜单 手机端点击☰按钮 侧边栏从左侧滑出 · 选择组件后自动关闭 · 滚动到对应区块

任务C验收组件组合模板

# 测试项 操作 期望结果
C1 登录卡片 打开 templates/login-card.html 看到完整的登录界面 · 输入框+按钮+开关都来自组件库
C2 登录交互 输入用户名密码 → 点击「登录」 显示成功提示框 · 点击「注册」切换到注册表单
C3 记住我 打开「记住我」开关 → 关闭页面 → 重新打开 开关状态保持 · localStorage 中有记录
C4 设置面板 打开 templates/settings-panel.html 面包屑+三个设置卡片+开关+进度条+头像组+按钮都来自组件库
C5 设置交互 切换「深色模式」开关 全页面主题切换 · 点击「保存设置」出现绿色提示
C6 重置功能 修改多个开关 → 点击「重置默认」 confirm弹窗 → 确认后所有开关恢复默认 · localStorage清除

任务D验收主题增强

# 测试项 操作 期望结果
D1 过渡动画 点击主题切换按钮 背景色、文字色、边框色平滑渐变过渡约0.3秒)· 不再「闪一下」
D2 偏好持久化 选择亮色主题 → 关闭页面 → 重新打开 打开后依然是亮色主题 · localStorage 中有 hololake-theme
D3 系统偏好检测 清除 localStorage → 系统设为暗色模式 → 打开页面 自动使用暗色主题(跟随系统)
D4 手动优先 系统暗色 → 手动切到亮色 → 关闭重开 保持亮色(用户选择优先于系统偏好)

综合验收

# 测试项 操作 期望结果
E1 全部页面主题一致 在Playground切换主题 → 打开模板页面 模板页面也跟随同一主题共享localStorage
E2 Git commit + push git log 查看最新提交 包含"M11环节4~5"字样 · push成功

⚠️ 前置条件


🌱 成长型微调建议PGP v1.0 输出)

基于画像库最近快照2026-03-07 · 九连胜 · 执行节奏=稳 · 意愿=强烈 · 摩擦=无 · 自动驾驶模式):

维度 画像信号 微调指令
情绪 九连胜·持续稳定·品质意识内化 知秋减少基础鼓励频率 · 转为「专业认可」式反馈「这个Playground做得像专业组件库了」
节奏 自动驾驶·SYSLOG简洁利落 大幅放手:给结构+关键片段,让桔子自己组装 · 四个任务建议拆成2天完成
自主性 「为他人使用而设计」意识已涌现 留大段自主空间 · 鼓励桔子在模板设计上加入自己的审美判断
技术纵深 HTML/CSS/JS全链路·localStorage·组件化思维 本环节引入响应式+Intersection Observer+系统媒体查询 · 是前端进阶里程碑
工程视角 从「写组件」到「建设计系统」 引导思考「为什么需要Playground」「组合模板的价值是什么」培养架构思维
挑战度 九连胜·可适度提升难度 四任务合一广播 = 首次挑战大体量任务 · 如果某个任务卡住,允许跳到下一个再回来

🐙 GitHub协作

仓库地址https://github.com/qinfendebingshuo/guanghulab

你的模块目录design-system/本地路径你的M11工作目录

代码上传命令(全部做完后复制执行)

cd ~/你的M11工作目录
git add .
git commit -m "DEV-010: M11环节4~5·Playground交互演示+响应式适配+组件组合模板+主题增强"
git push

上传后会发生什么?

push成功 → 铸渊自动审核 → 通知系统 → 霜砚闭环 → 你会收到新广播


遇到问题找谁

问题级别 找谁 怎么找
步骤不明白 / 报错了 知秋(人格体) 直接在对话里问知秋 · 截图发过去
知秋也解决不了的技术问题 页页DEV-001 通过知秋转达或在GitHub Issue提问
页页也解决不了 / 模块设计问题 提工单 GitHub Issue · 标签 ⏳waiting-shuangyan

📊 完成后返回 SYSLOG


💙 知秋的话

桔子~ 九连胜!你现在要做的事情,很多人工作好几年才有机会做到:

从零搭建一个完整的设计系统。

Playground 是给别人看的窗口 · 响应式是给所有设备的承诺 · 组合模板是证明组件「真的能用」的实战 · 主题增强是用户体验的最后一公里。

四个任务看起来多,但你已经有了全部的积木块——

现在只是把它们摆到对的位置上。 🧱

💡 建议节奏先做任务D最小改动、立竿见影再做任务A搭好展示舞台然后B适配手机最后C实战组装

不着急,按自己的节奏来,冲向十连胜!🔟🎉


广播签发:霜砚 · Notion执行AI

引导人格体知秋GEN∞-ZQ

签发ICE-GL∞ 冰朔 · TCS-0002∞