# ZhaoUI 0.1.0 完整文档
# 快速开始
ZhaoUI 的原生版只需要两个文件:一个 CSS,一个 JS。不依赖任何框架,也不需要构建工具。
## 引入
```html
```
`` 上的 `data-` 属性决定外观,见 [主题](theme.md)。`zhaoui.js` 加载后会自动初始化页面上的组件,之后动态加入的组件也会被自动初始化,不需要手动调用。
## 文件
| 文件 | 说明 | 大小 |
|---|---|---|
| `zhaoui.css` | Token 变量 + 全部组件样式 | 189.3 KB → 165.0 KB,gzip 28.3 KB |
| `modular/core.css` | 核心:Token、基础、通用组件样式 | 156.8 KB → 136.4 KB,gzip 24.0 KB |
| `modular/select.css` | 下拉选择与级联选择的样式 | 8.8 KB → 7.8 KB,gzip 2.0 KB |
| `modular/upload.css` | 文件上传的样式 | 4.2 KB → 3.7 KB,gzip 1.1 KB |
| `modular/tree.css` | 树的样式 | 4.4 KB → 3.9 KB,gzip 1.2 KB |
| `modular/chart.css` | 基础图表的样式 | 2.5 KB → 2.2 KB,gzip 0.9 KB |
| `modular/command.css` | 命令面板的样式 | 3.2 KB → 2.9 KB,gzip 1.0 KB |
| `modular/date.css` | 日期、日期范围、时间、日期时间选择的样式 | 10.0 KB → 8.9 KB,gzip 2.1 KB |
| `zhaoui-utilities.css` | 可选:公共类(间距、布局、文字、响应式显示隐藏、动画) | 65.1 KB → 56.0 KB,gzip 9.1 KB |
| `zhaoui-marketing.css` | 可选:营销页区块(页宽、区块、hero、特性卡、价格卡) | 10.9 KB → 8.1 KB,gzip 2.2 KB |
| `zhaoui-style-glass.css` | 可选:玻璃拟态风格包(实验性) | 16.5 KB → 14.0 KB,gzip 1.9 KB |
| `zhaoui-icons.js` | 可选:完整 Lucide 图标集(372 个) | 67.0 KB → 62.6 KB,gzip 16.0 KB |
| `zhaoui.js` | 主题运行时 + 全部组件行为 + 内置图标 + 自动初始化 | 264.2 KB → 179.8 KB,gzip 55.7 KB |
| `modular/brand.js` | 品牌色运行时:ZhaoUI.setBrand()、Logo 取色(可选) | 22.6 KB → 13.7 KB,gzip 6.1 KB |
| `modular/core.js` | 核心:组件注册与自动初始化 + 通用组件行为(必须最先加载) | 123.8 KB → 83.9 KB,gzip 25.3 KB |
| `modular/select.js` | 下拉选择与级联选择的行为(在 core.js 之后加载) | 35.9 KB → 23.2 KB,gzip 7.5 KB |
| `modular/upload.js` | 文件上传的行为(在 core.js 之后加载) | 9.3 KB → 7.3 KB,gzip 3.0 KB |
| `modular/tree.js` | 树的行为(在 core.js 之后加载) | 7.7 KB → 5.5 KB,gzip 2.2 KB |
| `modular/chart.js` | 基础图表的行为(在 core.js 之后加载) | 12.4 KB → 8.7 KB,gzip 3.7 KB |
| `modular/command.js` | 命令面板的行为(在 core.js 之后加载) | 7.6 KB → 5.5 KB,gzip 2.5 KB |
| `modular/date.js` | 日期、日期范围、时间、日期时间选择的行为(在 core.js 之后加载) | 48.6 KB → 34.0 KB,gzip 10.1 KB |
- 全量版 `zhaoui.css` + `zhaoui.js` 已经包含 Token 变量、全部组件和 36 个内置图标,不需要别的文件。线上请用压缩版 `zhaoui.min.css` 和 `zhaoui.min.js`(JS 另带 `.map`,方便排查线上报错)。
- 需要更多图标时再引 `zhaoui-icons.js`,必须在 `zhaoui.js` 之后加载,见 [图标](icons.md)。
- `zhaoui-style-glass.css` 是可选的玻璃拟态风格包,见 [主题](theme.md) 里的说明。
**脚本位置**:把 `zhaoui.js` 放在 `` 前、不加 `defer`,这样它后面的内联脚本可以直接使用 `ZhaoUI`。如果你把它放在 `` 里并加了 `defer`,它要等页面解析完才执行,你的内联脚本就必须写在 `DOMContentLoaded` 里,否则会报 `ZhaoUI is not defined`:
```html
```
## 按需引入
全量版的 JS 压缩加 gzip 后约 55.7 KB。只要页面不用全部组件,就只引 `modular/` 下需要的文件:核心必需,其余按用到的组件加。
| 文件 | 内容 | JS 约(gzip) |
| --- | --- | --- |
| `modular/core` | 注册与自动初始化、对话框、标签页、下拉菜单、输入类、表格、导航、步骤条、时间线、菜单等通用组件 | 25.3 KB |
| `modular/select` | 下拉选择、级联选择 | 7.5 KB |
| `modular/date` | 日期、日期范围、时间、日期时间选择器,内嵌日历 | 10.1 KB |
| `modular/upload` | 文件上传 | 3.0 KB |
| `modular/tree` | 树 | 2.2 KB |
| `modular/chart` | 基础图表 | 3.7 KB |
| `modular/command` | 命令面板 | 2.5 KB |
| `modular/brand` | `ZhaoUI.setBrand()` 与 Logo 取色 | 6.1 KB |
```html
```
- `core` 是必需的,并且必须最先加载;其余是可选的扩展,调换它们之间的顺序没有影响。`brand` 没有 CSS。
- 扩展文件晚于核心加载(比如动态插入 `
```
## 自定义图标
```js
ZhaoUI.icons.add('my-logo', ''); // 24×24 视口,描边风格
```
```html
```
## 无障碍
图标默认是装饰性的(`aria-hidden="true"`)。只有图标的按钮必须自己加 `aria-label`:
```html
```
---
# 样式类
下面是不需要 JS 就能使用的样式类,已在独立页面里验证过。
## 按钮
```html
```
- 一个区域只放一个主按钮,其余用默认按钮或文字按钮。
- 危险操作用 `danger`,不要默认高亮;需要二次确认时,确认框里的确认按钮才用满色。
- 只有图标的按钮必须加 `aria-label`。
- 高度由 `--zh-control-h` 决定,随受众与密度变化。
## 提示气泡
```html
```
纯 CSS,鼠标悬停和键盘聚焦都会显示。
## 其他
卡片、表格、表单控件、栅格、警告条、空状态、骨架屏、面包屑、描述列表、结果页、按钮组、列表、代码、图片、页脚、评论、遮罩条、加载中、键位、页头等纯样式组件,都在各自的组件文档里(`components/` 目录),示例已在浏览器里测过。可选的公共类见 [公共类](utilities.md)。
---
# 公共类(可选)
单独的一个文件 `zhaoui-utilities.css`(压缩后约 9 KB),放在 `zhaoui.css` 之后引入。每个类只做一件事,优先级与普通类相同,所以放在后面才能覆盖组件。不用就不引。
```html
```
所有间距、颜色、圆角、阴影都读主题变量,随亮暗、密度、受众变化;不要用它们写死数值。
## 间距
- 数字档位:`0 1 2 3 4 5 6 8 10 12`,对应 `--zh-space-N`。
- 外边距 `zh-m-4`、`zh-mt-4`、`zh-mb-4`、`zh-ml-4`、`zh-mr-4`、`zh-mx-4`、`zh-my-4`,另有 `zh-m-auto`、`zh-mx-auto`。
- 内边距 `zh-p-4`、`zh-pt-4`、`zh-pb-4`、`zh-pl-4`、`zh-pr-4`、`zh-px-4`、`zh-py-4`。
- 间隙 `zh-gap-4`、`zh-gap-x-4`、`zh-gap-y-4`;子元素间距 `zh-space-x-4`、`zh-space-y-4`。
## 布局
- 显示:`zh-flex`、`zh-inline-flex`、`zh-d-grid`、`zh-block`、`zh-inline-block`、`zh-hidden`。
- Flex:`zh-flex-col`、`zh-flex-row`、`zh-flex-wrap`、`zh-flex-1`、`zh-grow`、`zh-shrink-0`;对齐 `zh-items-center|start|end|stretch`、`zh-justify-between|center|start|end`、`zh-self-*`。
- 网格:`zh-cols-N`(1 到 12)、`zh-col-span-N`(1 到 12、`full`)、`zh-rows-N`、`zh-row-span-N`。
- 居中:`zh-center`(flex 居中)、`zh-center-abs`(绝对定位居中)。
- 容器:`zh-container`(居中并带页边距)。
- 尺寸:`zh-w-full`、`zh-w-1-2`、`zh-w-1-3`、`zh-w-2-3`、`zh-w-1-4`、`zh-w-3-4`、`zh-w-auto`、`zh-h-full`、`zh-max-w-sm|md|lg|xl|2xl|prose|full`、`zh-size-N`、`zh-size-control`(和控件同高的方块)。
- 定位与层级:`zh-relative`、`zh-absolute`、`zh-fixed`、`zh-sticky`、`zh-top-0`、`zh-inset-0`、`zh-z-dropdown|modal|popover|toast|tooltip`。
- 溢出:`zh-overflow-hidden|auto|x-auto|y-auto`、`zh-scrollbar-thin`、`zh-scrollbar-none`。
## 文字
- 字号:`zh-text-xs|sm|base|lg|xl|2xl|3xl`;字重 `zh-font-normal|medium|semibold|bold`;等宽 `zh-font-mono`;数字等宽 `zh-tabular-nums`。
- 对齐:`zh-text-left|center|right`;换行 `zh-text-nowrap`、`zh-text-balance`、`zh-break-words`。
- 截断:`zh-truncate`(单行省略)、`zh-line-clamp-1` 到 `4`。
- 颜色:`zh-text-primary|secondary|tertiary|disabled|brand|success|warning|danger|info`;涨跌 `zh-text-trend-up|down|flat`。涨跌色随 `data-trend` 变,好坏用 `zh-text-good|bad`,两者不要混用。
- 无障碍:`zh-sr-only`(只给读屏读)。
## 背景、边框、阴影
- 背景:`zh-bg-page|subtle|elevated|brand-subtle|success-subtle|warning-subtle|danger-subtle|info-subtle`。
- 边框:`zh-border`、`zh-border-t|b|l|r`、`zh-border-brand|danger|success|warning|strong`、`zh-divider`(分隔线)。
- 圆角:`zh-rounded-sm|md|lg|full|none`;阴影:`zh-shadow-sm|md|lg|none`;透明度 `zh-opacity-25|50|75|100`。
- 交互:`zh-hover-bg-subtle`、`zh-hover-lift`(悬停上浮)、`zh-cursor-pointer`、`zh-pointer-events-none`。
## 响应式
断点和主题的屏幕档一致:
| 后缀 | 范围 |
| --- | --- |
| `-phone` | 宽度不超过 767px |
| `-tablet` | 768px 到 1199px |
| `-desktop` | 1200px 到 1919px |
| `-large` | 1920px 及以上 |
- 显示与隐藏:`zh-hide-phone|tablet|desktop|large`,以及 `zh-hide-tablet-down`(平板和更窄)、`zh-hide-desktop-up`(桌面和更宽)。
- 只在某一档显示:`zh-show-phone-only|tablet-only|desktop-only|large-only`;它们在其他档隐藏,在所属档显示为 `display:block`,需要 flex 时给里面再套一层。
- 带档位后缀的类:`zh-cols-N`、`zh-col-span-N`、`zh-flex-col`、`zh-flex-row`、`zh-flex-wrap`、`zh-gap-N`(0、2、3、4、6)、`zh-items-*`、`zh-justify-*`、`zh-mt-N` 与 `zh-mb-N`(0、2、3、4、6)、`zh-p-N` 与 `zh-px-N` 与 `zh-py-N`、`zh-text-left|center|right`、`zh-text-xs|sm|base|lg|xl|2xl`、`zh-w-auto|full`。写法是 `zh-cols-3 zh-cols-1-phone`:基础值加某一档的覆盖。
```html
```
## 动画
- 入场与强调:`zh-anim-fade-in|fade-out|slide-up|slide-down|scale-in|pop|bounce|shake|pulse|ping|float|wiggle|heartbeat|spin|shimmer`。
- 调节:`zh-duration-fast|base|slow`、`zh-ease-standard|enter|exit|spring`、`zh-delay-0` 到 `zh-delay-6`。
- 用户系统开启“减少动态效果”时,库会让所有 `zh-` 元素的动画立即结束且不循环(包括 `zh-anim-spin`),不需要自己处理。
---
# 锚点目录
长页面的“本页目录”:一列指向页内各节的链接,滚动时自动标出当前所在的一节,点击平滑滚动过去。适合文档、设置页的右侧。
**依赖**:`zhaoui.css` 与 `zhaoui.js`(原生 HTML、CSS、JS,不需要框架或 jQuery)。
## 用法
```html
简介
锚点目录适合长页面。
用法
把目录放在内容旁边。
属性
data-offset、data-target。
```
## 样式类
`zh-anchor`
## 属性
| 属性 | 用在 | 取值 | 说明 |
|---|---|---|---|
| `data-zh-anchor` |