Regression / regression (push) Canceled after 0s
## 品牌标识(本次会话) 起因:品牌此前没有任何图形标识 —— 唯一 favicon 是内联 data-URI 里的字母「A」, 那是 v2.0.0「Aurora Admin → Kole UI」改名漏掉的一处(PC 顶栏也是「A」, 移动端站已是「K」;移动端文档站则完全没有 favicon)。 - 几何:24 网格三个互不接触的笔画(竖 + 两斜),圆头描边; 描边 2.25 → 16px 标签页尺寸下正好 1.5px = 规范原文「描边1.5px」 - 取色分两套(刻意):favicon 硬编码品牌蓝/白(渲染在浏览器标签栏,不继承 kole-dark); 顶栏标记走 currentColor(实测暗色下自动转 rgb(20,22,28)) - 新增 theme-color 双条(light #FFFFFF / dark #1C1F26,取 --kole-color-card-bg) - 修 site/app.js hero 标语 KOLE ADMIN → KOLE UI(改名变形残留) - 移动端 7 个模板补 favicon(此前计数 0) 验收:门禁 9 条全 OK(site-routing/site-routes/mobile-docs/mobile-site/isolation/ theme/nav/i18n/icons);PC 回归 1464/1464 · 移动端 807/807,各连跑 8 次一致; 两端 favicon 405 字节逐字节一致;PC 站控制台错误 1→0。 ## 并行会话成果(本次一并入库) - 图标系统:2576 图标(TDesign/Element Plus,MIT)+ 11 端注入 + 5 个构建门禁工具 + IconPreview 预览页 + ICON-SPEC.md 冻结规格 - 移动端平台:47 组件 × 6 端 + 文档站 53 页 + 隔离门禁 - PC 组件:103 个大后台组件 / 组件11 批次 - uni-app:PC 端试点 + 移动端端实现 + 真实编译验证 ## 工程 - .gitignore 补 .scratch/ 与 .zcode-preexisting-*.txt(会话中间产物,实测 9.1MB,不入库) - CHANGELOG 补品牌标识条目 - ROADMAP 登 S8-P4(品牌标识任务包 + og:image/apple-touch-icon 未做部分)
267 lines
7.8 KiB
JSON
267 lines
7.8 KiB
JSON
{
|
||
"schemaVersion": 1,
|
||
"sourceKind": "authored-spec",
|
||
"provenance": "authored-in-repo",
|
||
"specFile": "spec/移动端规格.md",
|
||
"specSection": "20 · 布局 Layout",
|
||
"confidence": "high",
|
||
"slug": "mobile-layout",
|
||
"name": "布局 Layout",
|
||
"semanticTypeCandidates": [
|
||
"layout",
|
||
"grid"
|
||
],
|
||
"variantDimensions": [
|
||
{
|
||
"name": "gutter",
|
||
"values": [
|
||
"0",
|
||
"8",
|
||
"16",
|
||
"24"
|
||
]
|
||
},
|
||
{
|
||
"name": "columns",
|
||
"values": [
|
||
"0",
|
||
"2",
|
||
"3",
|
||
"4"
|
||
]
|
||
},
|
||
{
|
||
"name": "align",
|
||
"values": [
|
||
"start",
|
||
"center",
|
||
"end",
|
||
"stretch"
|
||
]
|
||
},
|
||
{
|
||
"name": "wrap",
|
||
"values": [
|
||
"true",
|
||
"false"
|
||
]
|
||
}
|
||
],
|
||
"representativeVariants": [
|
||
{
|
||
"columns": "2",
|
||
"gutter": "8",
|
||
"label": "两等分(左右对照)"
|
||
},
|
||
{
|
||
"columns": "3",
|
||
"gutter": "16",
|
||
"label": "三等分(短字段)"
|
||
},
|
||
{
|
||
"columns": "4",
|
||
"gutter": "8",
|
||
"label": "四等分(指标卡 / 入口)"
|
||
},
|
||
{
|
||
"columns": "0",
|
||
"gutter": "16",
|
||
"label": "不等宽(列级 span 主次分栏)"
|
||
}
|
||
],
|
||
"anatomy": {
|
||
"layout": "行容器,display: flex + 换行,承载列间距变量",
|
||
"col": "列,默认占满一行(flex-basis: 100%),由行级等分或列级 span 类决定实际宽度",
|
||
"panel": "列内容的可选包壳,提供内边距与最小高度,业务也可直接放自己的卡片",
|
||
"gutter": "列间距,四档(0 / 8 / 16 / 24),由行级类写到 CSS 变量上",
|
||
"span": "列级权重类(12 栅格取值),可覆盖行级等分"
|
||
},
|
||
"structurePatterns": {
|
||
"gutter": "0 无缝 / 8 紧凑 / 16 常规 / 24 宽松,由 --kole-m-layout-gutter 承载",
|
||
"columns": "0 不启用等分 / 2 / 3 / 4 等分(行级)",
|
||
"align": "start / center / end / stretch(交叉轴)",
|
||
"wrap": "true 换行(默认)/ false 横向滚动"
|
||
},
|
||
"usageHints": [
|
||
"把一行内容按比例切成若干列(等分或按 12 栅格取值)",
|
||
"布局容器不绑点击,不设 cursor: pointer,热区始终由列内的业务元素提供",
|
||
"列内若是可点区域,其热区不小于 44×44(见 §19.5 与 §6.5)",
|
||
"gutter 由 CSS 变量承载,同一行内所有列的宽度计算共用该变量,避免手工算宽",
|
||
"列宽使用 flex-basis: calc(...),窄屏下不产生横向溢出(列内文本默认 min-width: 0)"
|
||
],
|
||
"doNotInvent": [
|
||
"响应式断点(移动端只有一档列数,不为大屏定义断点)",
|
||
"列的排序 / 拖拽",
|
||
"栅格嵌套的层级规则"
|
||
],
|
||
"unknowns": [
|
||
"列内推荐的最大列数(本实现提供 2 / 3 / 4 三档)",
|
||
"列高等分(stretch 之外的等高策略)"
|
||
],
|
||
"interaction": [
|
||
"布局容器不绑点击,不设 cursor: pointer,热区始终由列内的业务元素提供",
|
||
"列内若是可点区域,其热区不小于 44×44(见 §19.5 与 §6.5)",
|
||
"gutter 由 CSS 变量承载,同一行内所有列的宽度计算共用该变量,避免手工算宽",
|
||
"wrap=false 时容器横向滚动,纵向页面滚动不受影响"
|
||
],
|
||
"accessibility": [
|
||
"布局是纯视觉分组:不添加 role、不添加 aria-*",
|
||
"不要为了布局把语义节点(列表 / 按钮)拆到不相邻的列里,否则读屏顺序会错乱",
|
||
"视觉顺序必须与 DOM 顺序一致(不用 order 重排)"
|
||
],
|
||
"api": {
|
||
"source": "implementation",
|
||
"note": "props / events / slots 为 6 端实现的公共接口(说明文字取自规格对应小节)。字段名与各端源码逐名核对:node tools/verify-mobile-docs.mjs",
|
||
"requiredNote": "「必传」按严格定义:实现里**没有默认值**时才为 Y(本门禁逐条核对 props 与各端源码的默认值,防止契约与实现脱节)。",
|
||
"props": [
|
||
{
|
||
"name": "gutter",
|
||
"type": "0 | 8 | 16 | 24",
|
||
"default": "8",
|
||
"desc": "变体 gutter:列间距四档,由 CSS 变量承载(规格 §20.3)",
|
||
"required": false
|
||
},
|
||
{
|
||
"name": "columns",
|
||
"type": "0 | 2 | 3 | 4",
|
||
"default": "0",
|
||
"desc": "变体 columns:行级等分列数,0 表示不启用等分(规格 §20.3)",
|
||
"required": false
|
||
},
|
||
{
|
||
"name": "align",
|
||
"type": "'start' | 'center' | 'end' | 'stretch'",
|
||
"default": "'start'",
|
||
"desc": "变体 align:交叉轴对齐(规格 §20.3)",
|
||
"required": false
|
||
},
|
||
{
|
||
"name": "wrap",
|
||
"type": "boolean",
|
||
"default": "true",
|
||
"desc": "变体 wrap:false 时不换行、横向滚动(规格 §20.3)",
|
||
"required": false
|
||
}
|
||
],
|
||
"events": [],
|
||
"slots": [
|
||
{
|
||
"name": "default",
|
||
"desc": "列(.kole-m-layout__col)或任意业务内容(规格 §20.2)"
|
||
}
|
||
]
|
||
},
|
||
"variantClasses": {
|
||
"gutter": {
|
||
"0": [
|
||
".kole-m-layout--gutter-0"
|
||
],
|
||
"8": [
|
||
".kole-m-layout--gutter-8",
|
||
"--kole-m-layout-gutter"
|
||
],
|
||
"16": [
|
||
".kole-m-layout--gutter-16"
|
||
],
|
||
"24": [
|
||
".kole-m-layout--gutter-24"
|
||
]
|
||
},
|
||
"columns": {
|
||
"0": [],
|
||
"2": [
|
||
".kole-m-layout--cols-2"
|
||
],
|
||
"3": [
|
||
".kole-m-layout--cols-3"
|
||
],
|
||
"4": [
|
||
".kole-m-layout--cols-4"
|
||
]
|
||
},
|
||
"align": {
|
||
"start": [],
|
||
"center": [
|
||
".kole-m-layout--align-center"
|
||
],
|
||
"end": [
|
||
".kole-m-layout--align-end"
|
||
],
|
||
"stretch": [
|
||
".kole-m-layout--align-stretch"
|
||
]
|
||
},
|
||
"wrap": {
|
||
"true": [],
|
||
"false": [
|
||
".is-nowrap"
|
||
]
|
||
}
|
||
},
|
||
"demos": [
|
||
{
|
||
"id": "cols-2",
|
||
"group": "01 组件类型",
|
||
"title": "两等分",
|
||
"desc": "左右对照型信息(待付款 / 待发货)用两等分,列宽自动均分不手算。",
|
||
"variant": "columns=2 / gutter=8"
|
||
},
|
||
{
|
||
"id": "cols-3",
|
||
"group": "01 组件类型",
|
||
"title": "三等分",
|
||
"desc": "金额、数量、优惠这类短字段用三等分;列内文字过长会换行而不是撑破列宽。",
|
||
"variant": "columns=3 / gutter=16"
|
||
},
|
||
{
|
||
"id": "cols-4",
|
||
"group": "01 组件类型",
|
||
"title": "四等分",
|
||
"desc": "指标卡与图标入口最常用的档位;窄屏下保持四列,不折行。",
|
||
"variant": "columns=4 / gutter=8"
|
||
},
|
||
{
|
||
"id": "gutter",
|
||
"group": "02 组件状态",
|
||
"title": "列间距",
|
||
"desc": "0 无缝只用于靠分割线或底色分栏的场景;常规内容用 8 或 16。",
|
||
"variant": "gutter=0 | 24"
|
||
},
|
||
{
|
||
"id": "span",
|
||
"group": "02 组件状态",
|
||
"title": "不等宽",
|
||
"desc": "主次分栏用列级 span 覆盖行级等分:主栏 8/12,次栏 4/12。",
|
||
"variant": "col--8 + col--4"
|
||
},
|
||
{
|
||
"id": "align",
|
||
"group": "02 组件状态",
|
||
"title": "交叉轴对齐",
|
||
"desc": "列高不同时用 align=center 让内容垂直居中,默认 start 顶部对齐。",
|
||
"variant": "align=center"
|
||
},
|
||
{
|
||
"id": "nowrap",
|
||
"group": "02 组件状态",
|
||
"title": "不换行",
|
||
"desc": "wrap=false 时列横向滚动,纵向页面滚动不受影响(看板式横向列)。",
|
||
"variant": "wrap=false"
|
||
}
|
||
],
|
||
"related": [
|
||
{
|
||
"slug": "mobile-grid",
|
||
"why": "等分的图标 / 文字入口用宫格(自带图标与文字样式);只是切分版面才用布局"
|
||
},
|
||
{
|
||
"slug": "mobile-divider",
|
||
"why": "列之间要靠线分栏时用分割线;布局只管间距与宽度"
|
||
},
|
||
{
|
||
"slug": "cell",
|
||
"why": "一行一个语义项(可点整行)用单元格;一行要放多个并列块才用布局"
|
||
}
|
||
]
|
||
}
|