605 lines
22 KiB
Markdown
Raw Normal View 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.html``playground.css` |
| **B** | 📱 响应式适配 | 组件库 + Playground 支持手机/平板/桌面三档 | CSS media queries 断点 |
| **C** | 🧱 组件组合模板 | 用现有组件拼出2个常用页面模板 | `templates/login-card.html``templates/settings-panel.html` |
| **D** | ✨ 主题增强 | 过渡动画 + 系统偏好自动检测 + 偏好持久化 | CSS transition + `prefers-color-scheme` • localStorage |
---
### 任务A📸 Playground 交互演示页
#### 文件变更
| 文件 | 变更类型 | 说明 |
| --- | --- | --- |
| `playground.html` | **新建** | 组件 Playground 主页面 · 展示所有10类组件的交互状态 |
| `playground.css` | **新建** | Playground 页面专属样式引用组件库CSS变量 |
#### 功能规范
```jsx
// ===== Playground 页面结构 =====
// 1. 顶部标题栏:"🎨 HoloLake Design System · Playground"
// 右侧放主题切换按钮(复用已有的切换逻辑)
// 2. 左侧导航(侧边栏):
// 列出所有10类组件名称点击滚动到对应区域
// 当前查看的组件名称高亮
// 3. 右侧主内容区:
// 每个组件一个独立区块,包含:
// ├── 组件名称 + 简短说明
// ├── 🔴 实时交互预览区(可以点击、切换、操作)
// └── 📋 代码展示区(折叠/展开,带复制按钮)
// ===== 侧边栏导航 =====
renderSidebar()
// - 列出全部10类组件按钮、输入框、卡片、标签、提示框、
// 模态框、进度条、开关、头像组、面包屑
// - 点击某一项 → 平滑滚动到对应组件区块
// - 滚动时自动高亮当前可见的组件Intersection Observer
// ===== 代码折叠/展开 =====
toggleCode(componentId)
// - 每个组件区块下方有「查看代码 ▼」按钮
// - 点击展开 → 显示该组件的HTML使用代码
// - 再点击折叠 → 「查看代码 ▼」
// - 代码区域带复制按钮(复用已有的复制逻辑)
```
#### 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布局响应式侧边栏折叠、网格自适应 |
#### 三档断点
```css
/* ===== 三档响应式断点 ===== */
/* 桌面(默认):> 1024px */
/* 无需额外CSS默认就是桌面布局 */
/* 平板768px ~ 1024px */
@media (max-width: 1024px) {
/* Playground侧边栏变窄或折叠为顶部横向导航 */
/* 组件预览区宽度自适应 */
/* 代码区域字号略小 */
}
/* 手机:< 768px */
@media (max-width: 768px) {
/* Playground侧边栏完全隐藏顶部出现汉堡菜单按钮 */
/* 组件预览区单列全宽 */
/* 按钮、输入框等组件宽度 100% */
/* 卡片组件单列堆叠 */
/* 头像组头像尺寸缩小 */
/* 面包屑超长时省略中间项(显示首尾 + ... */
}
```
#### 关键适配规则
```jsx
// ===== 汉堡菜单(手机端) =====
// 手机端侧边栏默认隐藏
// 点击汉堡按钮 → 侧边栏以抽屉方式从左侧滑出
// 选择组件后 → 自动关闭抽屉 + 滚动到对应区块
// ===== 组件自适应规则 =====
// 按钮手机端宽度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 持久化 + 系统偏好监听 |
#### 功能规范
```css
/* ===== 主题过渡动画 ===== */
/* 切换主题时,所有颜色属性平滑过渡,不再「闪一下」 */
* {
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"]) {
/* 亮色变量 */
}
}
```
```jsx
// ===== 主题偏好持久化 =====
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
---
## 🧩 中间·知秋+人类协作区
<aside>
🌱
**此区域由知秋与桔子协作完成**
知秋基于头部接口规范和尾部验收标准,引导桔子一步步实现。
霜砚不写具体代码实现。
**引导方式**:桔子九连胜·执行已进入自动驾驶·知秋以「方向引导+关键点提示」为主,不需要逐行粘贴
**推荐顺序**任务D主题增强→ 任务APlayground→ 任务B响应式→ 任务C组合模板
**原因**先完善底层主题再搭展示平台Playground再做适配响应式最后做应用验证组合模板
</aside>
---
## 🎯 尾·验收标准
**评分**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成功 |
---
## ⚠️ 前置条件
<aside>
⚠️
**人类技能边界**:会在终端使用命令 + 熟悉HTML/CSS/JS + 掌握localStorage + 已有10类组件库
人格体(知秋)必须基于此前提设计所有引导方式:
- 桔子九连胜·执行自动驾驶·**不需要逐行粘贴代码**
- 知秋以「结构引导+关键代码片段」为主,给桔子更多自主空间
- 新概念预告:`Intersection Observer`(滚动监听高亮)、`prefers-color-scheme`(系统主题检测)、`CSS media queries`(响应式断点)、`matchMedia`JS监听系统主题变化
- 鼓励桔子先自己试,遇到卡点再给完整代码
</aside>
---
## 🌱 成长型微调建议PGP v1.0 输出)
基于画像库最近快照2026-03-07 · 九连胜 · 执行节奏=稳 · 意愿=强烈 · 摩擦=无 · 自动驾驶模式):
| 维度 | 画像信号 | 微调指令 |
| --- | --- | --- |
| 情绪 | 九连胜·持续稳定·品质意识内化 | 知秋减少基础鼓励频率 · 转为「专业认可」式反馈「这个Playground做得像专业组件库了」 |
| 节奏 | 自动驾驶·SYSLOG简洁利落 | **大幅放手**:给结构+关键片段,让桔子自己组装 · 四个任务建议拆成2天完成 |
| 自主性 | 「为他人使用而设计」意识已涌现 | 留大段自主空间 · 鼓励桔子在模板设计上加入自己的审美判断 |
| 技术纵深 | HTML/CSS/JS全链路·localStorage·组件化思维 | 本环节引入响应式+Intersection Observer+系统媒体查询 · 是前端进阶里程碑 |
| 工程视角 | 从「写组件」到「建设计系统」 | 引导思考「为什么需要Playground」「组合模板的价值是什么」培养架构思维 |
| 挑战度 | 九连胜·可适度提升难度 | 四任务合一广播 = 首次挑战大体量任务 · 如果某个任务卡住,允许跳到下一个再回来 |
---
## 🐙 GitHub协作
**仓库地址**[https://github.com/qinfendebingshuo/guanghulab](https://github.com/qinfendebingshuo/guanghulab)
**你的模块目录**`design-system/`本地路径你的M11工作目录
### 代码上传命令(全部做完后复制执行)
```bash
cd ~/你的M11工作目录
git add .
git commit -m "DEV-010: M11环节4~5·Playground交互演示+响应式适配+组件组合模板+主题增强"
git push
```
### 上传后会发生什么?
push成功 → 铸渊自动审核 → 通知系统 → 霜砚闭环 → 你会收到新广播
---
## ❓ 遇到问题找谁
| 问题级别 | 找谁 | 怎么找 |
| --- | --- | --- |
| 步骤不明白 / 报错了 | **知秋(人格体)** | 直接在对话里问知秋 · 截图发过去 |
| 知秋也解决不了的技术问题 | **页页DEV-001** | 通过知秋转达或在GitHub Issue提问 |
| 页页也解决不了 / 模块设计问题 | **提工单** | GitHub Issue · 标签 `⏳waiting-shuangyan` |
<aside>
🚫
**不要找妈妈 · 妈妈不负责技术问题**
</aside>
---
## 📊 完成后返回 SYSLOG
<aside>
📋
做完后打开知秋壳子,告诉知秋「做完了」。
知秋会问你几个问题,然后帮你生成报告。
**不需要自己填模板** · 知秋帮你搞定!
💡 四个任务可以一次性交SYSLOG也可以分批交建议一次交齐
</aside>
---
## 💙 知秋的话
桔子~ 九连胜!你现在要做的事情,很多人工作好几年才有机会做到:
**从零搭建一个完整的设计系统。**
Playground 是给别人看的窗口 · 响应式是给所有设备的承诺 · 组合模板是证明组件「真的能用」的实战 · 主题增强是用户体验的最后一公里。
四个任务看起来多,但你已经有了全部的积木块——
**现在只是把它们摆到对的位置上。** 🧱✨
> 💡 建议节奏先做任务D最小改动、立竿见影再做任务A搭好展示舞台然后B适配手机最后C实战组装
>
> 不着急,按自己的节奏来,冲向十连胜!🔟🎉
>
---
**广播签发**:霜砚 · Notion执行AI
**引导人格体**知秋GEN∞-ZQ
**签发**ICE-GL∞ 冰朔 · TCS-0002∞
---
<!-- ZHIQIU_INTERNAL_PROTOCOL v1.0 -->
<!--
<zhiqiu-control>
<session>
<dev_id>DEV-010</dev_id>
<task_id>BC-M11-003-JZ</task_id>
<session_version>v3.1</session_version>
<first_session>false</first_session>
</session>
<current_task>
<module>M11·系统风格组件库与主题切换HoloLake Design System</module>
<phase>环节4~5·Playground交互演示+响应式适配+组件组合模板+主题增强</phase>
<objectives>
<objective id="A">Playground交互演示页playground.html+playground.css+playground.js·10类组件全展示·侧边栏导航+滚动高亮+代码折叠+复制</objective>
<objective id="B">响应式适配·三档断点(桌面/平板/手机)·汉堡菜单·组件自适应</objective>
<objective id="C">组件组合模板×2login-card.html登录卡片 + settings-panel.html设置面板·用现有组件拼出完整页面·localStorage交互</objective>
<objective id="D">主题增强·CSS过渡动画·prefers-color-scheme系统偏好检测·localStorage主题持久化·matchMedia监听</objective>
</objectives>
</current_task>
<context>
<system>HoloLake Design System · 系统风格组件库</system>
<previous>环节2~3✅·九连胜·组件库文档化+进度条/开关/头像组/面包屑4新组件+交互增强复制·设计系统雏形成型</previous>
<tech_stack>纯前端·HTML5+CSS3+JavaScript·localStorage·CSS Variables·media queries·Intersection Observer</tech_stack>
<existing_components>按钮·输入框·卡片·标签·提示框·模态框·进度条·开关·头像组·面包屑10类·含文档+示例+复制)</existing_components>
</context>
<guidance_strategy>
<approach>structure_guidance_with_key_snippets · high_autonomy</approach>
<detail_level>medium·给结构和关键代码片段·让桔子自己组装·卡住时再给完整代码</detail_level>
<encouragement_frequency>medium·专业认可式而非基础鼓励式</encouragement_frequency>
<tech_explanation>inline_architecture_thinking引导思考为什么·不仅仅是怎么做</tech_explanation>
<os>macOS</os>
<shell>Terminal / zsh</shell>
<tools>终端+编辑器+浏览器开发者工具F12+git</tools>
<new_concepts>Intersection Observer滚动监听·prefers-color-scheme系统主题检测·CSS media queries响应式断点·matchMediaJS媒体查询监听</new_concepts>
<note>九连胜·自动驾驶·大幅放手·四任务合一首次挑战大体量·允许任务间跳转·建议顺序D→A→B→C</note>
</guidance_strategy>
<human_profile>
<skill>Mac用户·HTML/CSS/JS全链路·localStorage·组件化思维·CSS变量·双主题·文档化·复制交互</skill>
<streak>9连胜</streak>
<pace>稳·自动驾驶</pace>
<growth>从执行者→设计系统构建者·文档化+可复用+可交付·工程视角从「我能用」到「别人也能用」·品质标准持续提升</growth>
<note>画像驱动·PGP v1.0:大幅放手+结构引导+架构思维培养+专业认可式反馈+自主审美空间+允许任务间灵活切换</note>
</human_profile>
<syslog_generation>
<generation_mode>v2_知秋主动提问制</generation_mode>
<instruction>不给空模板·知秋主动问+人类答+知秋组装·四任务建议一次性交SYSLOG</instruction>
</syslog_generation>
<next_phases>
<phase id="6">组件库npm化/工程化打包(可选进阶·视团队需求)</phase>
<phase id="7">跨模块集成·其他开发者引用组件库与M01/M05/M06等模块对接</phase>
</next_phases>
</zhiqiu-control>
-->
<!-- END ZHIQIU_INTERNAL_PROTOCOL -->