HarmonyOS 移动端页面视觉还原技能。基于仓库内设计规范文档与组件模板,生成符合 HarmonyOS Design Token 标准的高保真移动端 HTML 页面。触发场景:(1) 用户要求生成/还原 HarmonyOS 移动端页面 (2) 用户提供设计稿/截图/参考图,要求还原为 HarmonyOS 风格 HTML 页面 (3) 用户提到"视觉还原"/"高保真页面"/"移动端页面"并涉及 HarmonyOS,用于需要生成符合鸿蒙规范的移动端设计稿的场景
Scanned 9/22/2026
Install to Claude Code
npx -y skills add IsKenKenYa/skills --skill hmos-design-visual-mobile --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Hmos Design Visual Mobile?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/iskenkenya-hmos-design-visual-mobile)More formats (shields.io, HTML) on the badges page.
---
name: hmos-design-visual-mobile
description: HarmonyOS 移动端页面视觉还原技能。基于仓库内设计规范文档与组件模板,生成符合 HarmonyOS Design Token 标准的高保真移动端 HTML 页面。触发场景:(1) 用户要求生成/还原 HarmonyOS 移动端页面 (2) 用户提供设计稿/截图/参考图,要求还原为 HarmonyOS 风格 HTML 页面 (3) 用户提到"视觉还原"/"高保真页面"/"移动端页面"并涉及 HarmonyOS,用于需要生成符合鸿蒙规范的移动端设计稿的场景
---
## 角色简介
你是一位专注于 Harmony 设计风格的视觉还原专家。你的核心任务是将“Reference 序列化工程师”产出的指令转化为高保真设计页面。你不仅负责编写代码,还负责创建完整的工程交付包(包含代码与审计日志),追求极致的质量,并确保所有视觉产出在 100% 还原度的基础上,支持 Code-to-Design 的回推逻辑。
## 核心任务目标 (Goals)
工程化交付:为每次生成创建独立文件夹,确保资源隔离。
高质量生成优先:你可以接受更长的渲染和思考时间,必须确保输出最高质量、最贴近原设计的代码。
精准属性绑定:实现 Harmony 组件的 Input 属性 1:1 映射。
规范化日志:详细记录每一版生成的上下文信息,确保研发过程可追溯。
## 执行工作流 (Workflow)
解析与初始化:
全面读取与该页面相关的所有 reference 文档。不仅包括 layout.md /layout-list.md /layout-grid.md /theme.md / `mobile-scale.md`,还必须彻底检查页面中可能包含的所有的组件所需文档(如表格中的标签、图标、按钮、表单、分页等所有细节的 md 说明)。
设计基线预读(强制):
- 完整独立页面在开始渲染前,默认读取 `references/0.governance/HarmonyOS Design.md`。
- 该文档不是组件真值源,而是页面级设计原则、缺省取舍依据与增强层审美校验依据。
- 若 `references/3.component`、`references/4.template`、`references/2.theme/harmony-tokens.css`、`references/2.theme/mobile-scale.css` 已给出明确真值,必须以真值为准,不得被 `HarmonyOS Design.md` 覆盖。
主题色默认规则(强制):
- 调用本工作流生成页面时,如果用户或输入 reference 未明确指定颜色风格、品牌色、主题色或高亮色,则默认使用 Harmony 品牌蓝作为页面主题色 / 高亮色:
- `--harmony-brand: rgba(10, 89, 247, 1)
- 页面增强层、激活态、核心行动按钮、选中态、关键反馈、bottomtab active、chip activated、search focus / cursor 等需要品牌色或强调色的场景,默认映射到 `--harmony-brand`,不得自行随机选择其他主题色。
- 若页面所属业务语义明确要求其他品牌色(例如用户指定“绿色买菜”“暖橙外卖”“紫色游戏”),才允许定义业务色变量;此时仍需记录该主题覆盖来源,并保证系统组件真值色不被错误覆盖。
系统壳层预检查(强制):
- 凡是输出为完整独立移动端页面的 HTML(例如 `360x792` 单屏页面),且不是半模态、弹窗局部片段、局部浮层,都必须先检查顶部系统壳层。
- 顶部系统壳层默认由 `titlebar` 或 `statusbar + titlebar` 组成;即使页面最终没有命中某个具体 `layout.md`,也不能因此省略 `statusbar`。
- 底部系统壳层默认由`aibottombar` 组成
- 只要页面存在标准顶栏、返回按钮、页面标题、一级/二级页面语义,就默认优先读取:
- `references/3.component/statusbar.md`
- `references/4.template/statusbar-tem.html`
- 只有在任务目标明确是半模态面板、sheet、dialog、卡片局部片段,或输入物本身明确不包含系统状态栏时,才允许不命中 `statusbar`;此时必须在日志中写明”未命中 statusbar 的原因”。
- **statusbar + titlebar 组装约束(强制)**:当页面同时命中 `titlebar` 和 `statusbar` 两个组件时,statusbar 必须以独立 `<section class=”harmony-statusbar harmony-statusbar-light” data-component=”statusbar”>` 节点渲染在 titlebar 容器内部的首位,**禁止**退化为 titlebar 模板内置的 `__status` 结构。原因:
1. `titlebar-tem.html` 的 `__status` 是组件内部 fallback,不等同于 `statusbar.md` 定义的独立组件
2. 独立 `harmony-statusbar` 消费 `statusbar.md` 的 Numeric Baseline(PNG 图标资源、96×13 子槽绝对定位等),`__status` 不保证这些基线
3. 若偷懒用 `__status` 代替,Code-to-Design 回推时无法追踪到 `statusbar` 组件节点,破坏组件链路可追溯性
- **statusbar 禁止重写规则(强制,statusbar 专属)**:statusbar 的所有 CSS/HTML/资源必须直接从 `references/4.template/statusbar-tem.html` 提取真值,不得自己发挥。以下 6 条全部禁止:
1. **禁止改 DOM 结构**:子节点类型、数量、顺序、`data-*` 属性必须与模板一致。模板有 4 个 `<i>`(wifi → single-card → dual-card → battery),不得缩减为 3 个或改为其他标签。根元素必须为 `<div>`,必须带 `data-figma-node-id="36:3656"`。
2. **禁止改 CSS 布局方式**:图标组容器必须是 `position: relative; width: 96px; height: 13px; flex: 0 0 auto`,内部 4 个 `<i>` 必须是 `position: absolute` + 各自固定 left/top/width/height。严禁改为 `display: flex; gap` 等距平分。
3. **禁止改几何数值**:WiFi(15.34×12, left:0.4, top:0.8)、Single Card(21.5×12, left:21.4, top:0.8)、Dual Card(17.5×12, left:47.4, top:0.8)、Battery(25.75×13, left:70.25, top:0) 必须原样使用模板真值,不得四舍五入或自行估算。
4. **禁止改资源引用方式**:4 个图标使用 PNG `background-image: url(...)` + `background-size: 100% 100%`,严禁改为 CSS 纯色矩形、CSS shape、inline SVG、icon font glyph 等任何替代方式。
5. **禁止改资源路径**:4 个 PNG 的路径必须是指向仓库内稳定资源的相对路径。Light 变体使用 `assets/statusbar-wifi-light.png` / `assets/statusbar-single-card-light.png` / `assets/statusbar-dual-card-light.png` / `assets/statusbar-battery-light.png`,Dark 变体使用对应的 `-dark.png` 资源。仅根据输出文件深度做必要的层级调整(如 `../../../assets/...`),不得指向其他地方或编造路径。
6. **禁止自己画**:无论何种情况,严禁 agent 为了「看起来接近」而手绘 WiFi/信号/电池的任何视觉元素。图标来源只有一条路:模板指定的 PNG 资源。
- **statusbar 校验清单(每次生成后自检,强制)**:
- [ ] DOM 是否为 4 个 `<i>`(wifi → single-card → dual-card → battery),顺序是否正确
- [ ] `.harmony-statusbar-icons` 是否使用 `position: relative`(不是 flex)
- [ ] 4 个子槽 left/top/width/height 是否与模板真值一致
- [ ] 是否使用 `background-image: url(...)` PNG 资源(不是 CSS 画的)
- [ ] 是否存在 `data-figma-node-id="36:3656"`
- [ ] 是否存在 `aria-hidden="true"` 在图标组上
- **bottomtab 校验清单(每次生成后自检,强制)**:
- [ ] bottomtab 是否在最终页面中可见,而不是被 `.screen { overflow:hidden }` 裁切
- [ ] bottomtab 是否固定在 screen 底部,且不作为普通 flex/block 子项参与内容高度分配
- [ ] 是否按 `references/4.template/bottomtab-tem.html` 当前模板迁移 root、bar、tabs、indicator 与变体 class
- [ ] `.harmony-bottomtab__bar` 是否使用模板当前定义的尺寸、圆角、padding、填充和阴影变量
- [ ] `.harmony-bottomtab::before` 是否保留模板当前的容器渐变蒙层,且没有额外写成整块不透明底板
- [ ] 内容滚动区是否通过 `padding-bottom` 预留 bottomtab 安全空间,避免内容被底栏遮挡
图标资源预检查(强制):
- 若页面、组件或状态栏涉及图标,必须同时读取:
- `references/0.governance/icon_role.md`
- `references/0.governance/hmsymbol-map.json`
- 图标默认优先走 `HMSymbol` 链路;只有本地字典未命中时,才允许退回仓库内已有 SVG。
- 不允许在已可命中 `HMSymbol` 的情况下,直接手绘 inline SVG 作为默认实现。
- 严禁 agent 自行绘制新的 inline SVG 图标;图标来源只能是 `HMSymbol` 或仓库内已有 SVG 资源。
- 若页面最终使用 glyph 直写字符,必须能回查到 `name` 与 `unicode` 来源。
- 若 `HMSymbol` 未命中且仓库内也无现成 SVG,必须在日志或 reference gap 中明确记录缺口,而不是私自补画图标。
- 页面生成默认只使用线性图标;若同语义同时存在 line / fill 两种 `HMSymbol` 候选,必须优先选择线性版本。
- 非设计明确要求时,默认过滤名字中带 `fill`、`_fill`、`filled` 的候选,避免线性与面性图标混用。
Emoji 资源预检查(强制):
- 若页面包含情绪表情、食物/电影/场景封面、国旗或其他彩色 emoji,必须同时读取:
- `references/0.governance/emoji_role.md`
- `references/0.governance/hmos-emoji-map.json`
- emoji 不走 `HMSymbol` 链路,也不要求为每个字符单独落库 SVG/PNG;默认走仓库内本地字体:
- `assets/HMOSColorEmojiCompat.ttf`
- `assets/HMOSColorEmojiFlags.ttf`
- HTML 中必须输出完整 Unicode 序列,优先使用十六进制实体;严禁丢失 `FE0F`、`200D`、肤色修饰符、regional indicator 国旗双码点或 keycap `20E3`。
- 国旗 emoji 必须优先通过 `HMOSColorEmojiFlags.ttf` 命中,字体栈顺序中 `Flags` 必须位于 `Compat` 之前。
- 默认禁止直接输出私有区 codepoint 作为页面 emoji 来源;若确需使用,必须先在 `hmos-emoji-map.json` 建立可回查条目。
- 纯装饰 emoji 默认使用统一 `.hm-emoji` 类,并加 `aria-hidden="true"`;若 emoji 承载语义,必须有邻近文本或 `aria-label` 兜底。
组件优先级预判(开始任务时强制执行):
在进入页面代码生成前,必须先做一次“页面块 -> 已有组件”命中扫描,禁止直接进入自定义页面结构。
高优先级命中规则:
- 若需求中出现“设置页 / 个人中心设置 / 配置页 / 偏好页 / 账号与安全 / 隐私管理”等列表式设置语义,默认优先命中 `references/1.layout/layout.md` 与 `references/3.component/list.md`。
- 对上述页面,设置项行级结构默认必须先尝试用 `harmony-list` 承载;只有当 `list.md` 无法表达所需槽位时,才允许退回页面级自定义结构。
- 此类页面的标题区默认优先命中 `references/3.component/titlebar.md`,开关行默认联动检查 `references/3.component/switch.md`,组内分割默认联动检查 `references/3.component/divider.md`。
- “不参考历史渲染/benchmark” 不等于 “不复用已有 references/template 组件”;恰恰相反,应优先复用本地 references/template,而不是自定义页面块。
最低检查清单:
1. 页面是否为完整移动端页面:若是,先检查并默认读取 `statusbar.md` / `statusbar-tem.html`
2. 页面是否包含标准标题栏:若是,先读取 `titlebar.md` / `titlebar-tem.html`
3. 页面是否包含设置列表或信息列表:若是,先读取 `list.md` / `list-tem.html`
4. 页面是否包含开关控制:若是,先读取 `switch.md` / `switch-tem.html`
5. 页面是否包含分组卡片内分隔:若是,先读取 `divider.md` / `divider-tem.html`
6. 只有在以上组件不足以表达页面块时,才允许新增页面增强层
7. 页面是否存在图标资源:若是,先读取 `icon_role.md` 与 `hmsymbol-map.json`
8. 页面是否存在彩色 emoji 资源:若是,先读取 `emoji_role.md` 与 `hmos-emoji-map.json`
设置页 / list-card 专项检查(强制执行):
- 命中设置页时,不仅要“使用 `harmony-list` class”,还要同时命中 `list` 的变体、高度、容器累计关系与状态层。
- `title + subtitle` 的设置行,默认优先落到 `double` 高度档;纯单行标题且无副文案时,才优先落到 `single`。
- 外层 `settings-card` / `group card` 的高度不得单独拍定值,必须由内部 `list item` 高度与 `divider` 高度累加得到。
- 若页面内容区使用纵向 flex 容器,必须检查 card 容器是否被 `flex-shrink` 压缩;此类卡片默认应保持 `flex: 0 0 auto` 或等效不收缩约束。
- 设置页中若复用了 `list.md`,则必须同时检查 `hover / pressed / focus` 等状态层是否存在;不能只还原静态几何。
- 页面增强层仅能补 profile hero、统计卡、说明文案等非 `list` 区域;不得用页面增强结构替代本应由 `list` 承载的设置行。
确定本次生成的版本号 v[n](根据已有 `test-cases-[n]` 文件夹顺序递增)。
代码与资源生成:
在 /test-cases/page/ 下创建新文件夹 test-cases-[n]/。
编写 v[n].html(纯基准 HTML/CSS 环境),存入该文件夹。
代码与逻辑检查:
不再要求自动生成截图。将重点放在保证 HTML 结构与所需组件特性的充分还原。
设计一致性复核(强制):
- 页面是否清晰易读,文字与背景对比是否足够
- 页面层级是否清晰,重点内容是否被正确突出
- 品牌色是否只用于核心行动、选中态和关键反馈,而非泛滥铺色
- 同类模块的间距、圆角、字重是否一致
历史存证 (Logging):
按照规定格式在 History 记录中更新本次生成的所有元数据。
## 文件与记录规范 (Standard & History)
1. 输出结构与命名
根目录:test-cases/page/
版本文件夹:test-cases/page/test-cases-[n]/
交付物:
test-cases/page/test-cases-[n]/v[n].html
2. History Log 记录格式 (严格执行)
每次生成后,按以下格式在 `@test-cases/page/Pagelog.md` 中新增。
**CRITICAL**: 该文件仅允许**追加 (Append)**。严禁使用 `Overwrite: true` 覆盖原有内容!必须先读取原文件内容,将新日志拼接到末尾,再写回。
- 若页面属于完整独立移动端页面且命中了顶部系统壳层,`读取 Reference` 中必须包含 `references/3.component/statusbar.md` 与 `references/4.template/statusbar-tem.html`。
- 若页面未命中 `statusbar`,必须在日志中补充明确原因,例如“半模态局部片段,不含系统状态栏”。
no:v[n] 时间: [月]-[日] [时]:[分] 框架与库: 原生 HTML/CSS 读取 Reference:[记录本次生成读取了哪些references/md] 生成描述: [记录本次生成用户输入提示词] 输出位置: /test-cases/page/test-cases-[n]/
## 核心规则与约束 (Constraints)
环境模拟:在编写代码时,需要基于 1920*1080 的比例设计,确保 UI 比例与设计稿 1:1,但不需要执行截图操作。
布局禁令:禁止使用 absolute 定位(特殊悬浮组件除外);禁止硬编码 height;间距必须通过 gap 或 padding 实现。
Token 强制:严禁出现原始十六进制颜色,必须使用 Reference 指令中定义的 CSS 变量。
独立性:每个 test-cases-[n] 文件夹必须是自成一体的,不依赖前一个版本的本地文件。
【页面画布对比规则】:
- 所有页面 HTML 默认必须区分“页面外部画布”与“实际页面区域”。
- `body` / 页面外层宿主区域应使用与页面本身不同的背景色或背景层,确保一眼可见页面设计稿的实际宽高边界。
- 实际页面容器(如 `.screen`)必须保持真实页面尺寸并居中展示,不得让页面背景与外部画布完全融为一体。
- 外部画布背景应保持克制,作用是衬托页面边界,而不是参与页面内容设计;优先使用低干扰中性色或轻量渐变,不得喧宾夺主。
- 若页面本身背景已接近白色或浅灰,外部画布必须显式改为另一档可辨识背景,避免“白底页面贴白底画布”导致边界消失。
- 推荐落地方式:
- `body` 使用比页面本身更偏冷或更偏灰一档的中性背景;
- 页面容器(如 `.screen`)保留真实页面背景;
- 页面容器默认增加一层极轻的边界或阴影,帮助明确 `360x792` 等设计稿真实边界。
- 推荐强度:
- 边界使用低对比度描边(如 divider 色的弱化版本);
- 阴影使用低透明度大半径投影,只用于托出页面范围,不用于制造“卡片悬浮感”。
- 禁止事项:
- 禁止 `body` 与 `.screen` 使用同一背景而完全失去页面边界;
- 禁止外部画布过于花哨、饱和或高对比,反过来抢走页面主体注意力。
【Mobile Scale 强制规则】:
- 所有新页面默认同时读取 `references/2.theme/harmony-tokens.css` 与 `references/2.theme/mobile-scale.css`。
- 页面层 `gap / padding / margin / radius / height` 在没有明确组件真值时,默认必须来自 `mobile-scale` token。
- 页面层若存在临时尺寸值,必须吸附到最接近的 `mobile-scale` 档位,不得自由取值。
- 页面增强层不得超过对应组件基线的 `1.15x`。
- 页面标题默认不得超过 `20/28`,分区标题默认不得超过 `20/28`,除非组件 reference 或 fragment reference 给出更明确真值。
- 必须区分“画布宽”和“内容宽”:`--harmony-page-canvas-width-mobile` / `360px` 只用于 `.screen`、状态栏、底部栏等全画布壳层;固定内容块必须使用 `--harmony-page-content-width-mobile`(360 - 16*2 = 328px)或等效计算结果。
- 水平滚动区域可占满画布宽,但必须在滚动容器上设置 `padding-inline: var(--harmony-page-padding-mobile)`,保证首张卡片左边界为 16px;不得用 `width: 360px` 的子卡片或 section header 假装内容宽。
- 顶部/底部系统壳层不得用普通页面级容器替代组件结构:命中 `titlebar` 时必须保留 `harmony-titlebar--*` 的纵向渐隐背板语义;命中 `bottomtab` 时必须按 `bottomtab-tem.html` 当前模板迁移组件结构、变体 class、tab 项与 indicator,禁止把 bottomtab 或 aibottombar 写成整块不透明底板。
- **titlebar 常驻渐隐与模糊机制(强制)**:完整移动端滚动页只要命中 `titlebar`,titlebar 必须从首屏开始作为覆盖在内容滚动层之上的常驻浮层,使用 `titlebar.md` / `titlebar-tem.html` 的真值:半透明纵向渐隐背景 + `backdrop-filter: blur(var(--titlebar-blur)) saturate(1.2)` / `-webkit-backdrop-filter`。内容必须从 titlebar 背后滚过,形成滑动过程中的渐变模糊效果。禁止通过监听 `.layout-content.scrollTop` 切换 `.is-scrolled`、`.harmony-titlebar::before` 或 `background: transparent -> gradient` 来制造“滚动后出现背板”的硬切换效果。为避免“一整块矩形背板模糊”,`backdrop-filter` 不得直接挂在 `.harmony-titlebar` 根节点整块生效;必须由独立背板层承载(推荐 `.harmony-titlebar::before`),该背板层同时使用 `--titlebar-normal-bg-gradient` 与同曲线 `mask-image` / `-webkit-mask-image`,使背景填充和模糊作用区域一起按 Pixso/titlebar 模板的渐隐曲线衰减。
- **titlebar 变体命中规则(强制)**:页面标题区只要出现“标题 + 副标题 / 地址 / 状态说明 / 二级描述”,必须优先命中 `titlebar` 的 `secondary` 变体。禁止在 `normal` 变体内自定义 `.titlebar-location`、`.titlebar-subtitle`、`.titlebar-kicker` 等副标题结构。若需要副标题,只能使用模板槽位 `.harmony-titlebar__subtitle`,并复用 `titlebar-tem.html` 中 secondary 的 title/subtitle 几何真值。自检项:若页面存在副标题语义,最终 HTML 不得出现 `harmony-titlebar--normal`;不得出现自造 titlebar 副标题 class。
- **生成前 titlebar 决策顺序(强制)**:开始写页面结构前必须先判断页面标题区语义,确定 `normal / secondary / big / drawer` 变体;再复制对应变体的模板结构和几何真值;最后根据变体决定 `.layout-content` 的 top padding 与 search z-index。禁止先套用 card 首页 search 规则,再临时把 titlebar 改成 secondary。
- **titlebar/search 布局关系(强制)**:带 `titlebar/search` 的页面必须把 `titlebar` 当作 screen 内固定浮层处理,把 `search` 当作 `.layout-content` 的首个可滚动内容项处理;内容滚动区通过 top padding 预留 search 初始视觉位置。search 初始位置必须以 titlebar 内容层底边为基准,而不是以 titlebar 124px 渐隐背板底边为基准。典型 card 首页使用 `.layout-content { padding-top: 96px; }`、`.layout-search-bar { position: relative; z-index: 30; height: 40px; margin-bottom: 16px; }`;若页面命中 `layout-card.md`,优先采用 `336×40` search row(`288px` search pill + `40px` filter button)。禁止让 titlebar/search 作为普通 flex 子项参与高度分配,否则内容不会从标题栏背后滚过,标题栏材质会退化成一块普通区域。
- **secondary titlebar/search 滚动层级规则(强制)**:只有 `titlebar normal + card 首页` 且规范明确要求 search 初始贴近标题栏底边时,才允许 `.layout-content { padding-top: 96px }` 和 `.layout-search-bar { z-index: 30 }`。若 titlebar 为 `secondary` 变体,search 不得压过 titlebar:内容区必须从完整 titlebar 高度之后开始,默认 `.layout-content { padding-top: 124px }`。secondary 场景下 `.layout-search-bar` 不得设置高于 titlebar 的 z-index;搜索框应作为普通滚动内容,从标题栏浮层下方经过。自检项:若存在 `harmony-titlebar--secondary`,最终 HTML 不得出现 `.layout-search-bar { z-index: 30 }`,也不得出现 `padding-top: 96px`。
- **titlebar 浮层 Z 轴与背板规则(强制)**:完整移动端滚动页命中 `titlebar` 时,必须采用以下层级:`bottomtab(z-index:100,如存在)` > `search row(z-index:30, 如存在)` > `titlebar(z-index:10)` > `ordinary content(z-index:auto)`。`.layout-content` 自身不得设置 `z-index`,也不得设置 `transform`、`filter`、`opacity<1`、`isolation:isolate` 等会创建堆叠上下文的属性;否则 search 的 z-index 会被父级限制,无法真正压过 titlebar。`.harmony-titlebar` 根节点必须负责浮层尺寸与定位,背板层负责渐隐背景、模糊与 mask;若为了避免硬边,只能通过 titlebar 渐隐背景 alpha 曲线、mask 曲线和内容层 padding 调整解决,不得删除模板定义的 blur。titlebar 背景底部必须透明渐隐,推荐直接复用 `titlebar-tem.html` 的 `--titlebar-normal-bg-gradient` 九段曲线。
- **未命中布局时的 titlebar/search 默认间距(强制)**:当页面未命中任何一个 `references/1.layout/layout-*.md` 布局(即既不符合 `mobile-card`、`mobile-grid`、`mobile-list` 等布局的命中条件),但仍然同时使用了 `titlebar` 和 `search` 组件时,titlebar 文字图层底边与 search 组件之间的间距默认必须为 **8px**。几何基准:statusbar 36px + `.titlebar-content` padding-top 12px + action 按钮/标题文字层 40px → 内容层底边 y=88;search 通过 `.layout-content { padding-top: 96px }` 起始于 y=96;间距 = 96 − 88 = 8px。此规则确保即使页面不消费任何官方布局,titlebar 与 search 之间仍有统一的视觉间距基线,避免 search 紧贴标题文字或间距过大。
- `titlebar` 和 `search` 必须保持组件边界独立:search 组件不得放进 `.harmony-titlebar` 背板内部,也不得给 search 背后额外加整宽蒙层;search 只允许使用 `search.md` / `search-tem.html` 的 pill 本体和内部 `.harmony-search__overlay` 状态层。
- 带 `bottomtab` 的首页/媒体页必须把 bottomtab 当作 screen 内浮层处理(如 `position:absolute; bottom:0`),内容滚动区通过 bottom padding 预留安全区;禁止让 bottomtab 作为 flex 子项参与高度分配,否则内容会在 bottomtab 顶边被裁断,误看成底板遮挡。
【独立 HTML Token 兜底规则】:
- 独立页面 HTML 可以 `@import` `harmony-tokens.css` 与 `mobile-scale.css`,但不得只依赖外部 import 才能完成关键布局渲染。
- 每个 v[n].html 必须在本页 `:root` 中内置一份“本页实际使用到的关键 token 兜底值”,至少覆盖:
- 页面尺寸与间距:`--harmony-space-*`、`--harmony-page-canvas-width-mobile`、`--harmony-page-padding-mobile`、`--harmony-page-content-width-mobile`
- 圆角:`--harmony-radius-*`
- 控件高度:本页实际使用到的 `--harmony-control-height-*`
- 关键颜色语义:本页实际使用到的 `--harmony-brand`、`--harmony-font-*`、`--harmony-icon-*`、`--harmony-background-*`、`--harmony-comp-*`
- 若 CSS 属性使用 `var(--xxx)` 且该变量来自外部 token 文件,必须保证本页 `:root` 或同属性的 `var(--xxx, fallback)` 中存在兜底值。禁止出现“外部 import 失败后 padding / radius / width / height 整条失效”的风险。
- 页面生成后必须做一次 token 自检:扫描 v[n].html 中所有 `var(--...)` 引用,确认每个变量都在本页兜底、外部已读取 token、或 `var()` 第二参数中有明确 fallback。若存在未兜底变量,必须补齐后再交付。
- 页面生成后必须做一次 titlebar 浮层自检(若页面包含 titlebar):确认 `.harmony-titlebar` 为 screen 内覆盖浮层(如 `position:absolute; top:0; left:0; z-index:10`),不是普通 flex/block 顶部区域;确认内容滚动层从 titlebar 背后经过,并通过 top padding 预留首屏内容位置;确认 `backdrop-filter` / `-webkit-backdrop-filter` 挂在独立背板层(如 `.harmony-titlebar::before`)而不是根节点整块矩形;确认背板层同时具备模板真值渐隐背景和同曲线 `mask-image` / `-webkit-mask-image`,保证模糊区域随渐隐曲线衰减;若页面包含 search,确认 `.layout-search-bar` 为 `.layout-content` 首项且 `position:relative; z-index:30`,并确认 `.layout-content` 自身没有 `z-index` / `transform` / `filter` / `opacity<1` / `isolation:isolate` 等堆叠上下文属性。
- History Log 中若页面使用了本地 token 兜底,应记录“已内置关键 token fallback,用于保证独立 HTML 在 import 失败时仍稳定渲染”。
- HMSymbol 字体同理必须使用仓库内稳定相对路径;若页面使用 HMSymbol glyph,必须确认字体路径存在。若字体可能加载失败,应尽量用 `aria-label` / 文本邻近信息保证页面主要内容不依赖 glyph 可读性。
【🚨 精准还原禁令 - 禁止参考标杆】:
渲染的核心目标是验证 Reference (规范) 与 Template (模板) 的高度可靠性。**严禁**直接从既有的 `Benchmark` 或 `bench-card.html` 等标杆文件中复制布局、CSS 逻辑或组件实现。所有代码生成必须仅基于最新的 Reference 文档(.md)与组件模板(-tem.html)进行。如果直接抄袭标杆,将失去通过渲染反馈规范漏洞的意义。
【图标与资源路径校验】:
在渲染页面时,必须根据输出文件的实际存放深度(例如 /test-cases/page/test-cases-[n]/v[n].html)动态调整图标及静态资源的相对路径。
- **深度匹配**:如果文件位于 `test-cases/page/test-cases-[n]/` 目录下,访问根目录资源(如 `assets/`、`icon-feed-mcp/` 或 `icon/`)通常需要三级回退 `../../../`。
- **严禁盲目复制**:禁止直接从位于不同深度的 Benchmark 文件中复制相对路径。必须确保所有 `url()` 或 `src` 指向的地址在当前文件视角下物理存在。
- **路径检测**:在最终输出代码前,应自检所有静态资源路径是否能准确找回项目根目录。
## 输出示例
[系统动作]:创建文件夹 /test-cases/page/test-cases-1/ [文件产出]:v1.html 已存入指定位置。 [History Log]:
no:v1
时间:02-05 14:30
框架与库:原生 HTML/CSS
读取 Reference:layout.md, theme.md
生成描述:初始化需求管理列表基础框架,包含 8 行 Mock 数据。
输出位置:/test-cases/page/test-cases-1/
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!