@neatui/css 3.17.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/GUIDE.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # NeatUI 完整使用手册
2
2
 
3
- > **版本**: @neatui/css v3.15.0
3
+ > **版本**: @neatui/css v4.0.0
4
4
  >
5
- > **更新日期**: 2025-11-29
5
+ > **更新日期**: 2026-07-28
6
6
  >
7
- > **定位**: 这不是一个 CSS 工具库,而是一套完整的设计系统 + 原子化实现
7
+ > **定位**: 这不是又一个 CSS 工具库,而是一套完整的设计系统 + 原子化实现
8
8
 
9
9
  ---
10
10
 
@@ -36,7 +36,7 @@ NeatUI 要求你摒弃传统的 CSS 思维,建立全新的思维模型:
36
36
  ✅ 正确: n-mm; w-lm;
37
37
  ```
38
38
 
39
- **原则**:永远不使用任意像素值,使用 S/M/L 相对尺寸体系。
39
+ **原则**:永远不轻易使用任意像素值,使用 S/M/L 相对尺寸体系。(特殊场景下使用自定义值应作为特批备注)
40
40
 
41
41
  #### 2. 坐标思维 > 属性思维
42
42
  ```
@@ -94,8 +94,8 @@ npm install @neatui/css
94
94
  # Yarn
95
95
  yarn add @neatui/css
96
96
 
97
- # Nuxt 项目
98
- npm install @neatui/css @neatui/nuxt
97
+ # Vue / Nuxt 项目
98
+ npm install @neatui/css @neatui/vue
99
99
  ```
100
100
 
101
101
  ### 在项目中引入
@@ -113,15 +113,9 @@ npm install @neatui/css @neatui/nuxt
113
113
  }
114
114
  ```
115
115
 
116
- #### 方式 2: Nuxt 配置
117
- ```ts
118
- // nuxt.config.ts
119
- export default defineNuxtConfig({
120
- modules: [
121
- '@neatui/nuxt'
122
- ]
123
- })
124
- ```
116
+ #### 方式 2: Nuxt 项目
117
+
118
+ 在 Nuxt 应用样式中引入 `@neatui/css`,组件直接从 `@neatui/vue` 导入。
125
119
 
126
120
  ### 第一个示例
127
121
 
@@ -143,6 +137,8 @@ export default defineNuxtConfig({
143
137
 
144
138
  ## 尺寸系统
145
139
 
140
+ 从3.x升级时,同名尺寸类不保证保持原值。请按 [4.0尺寸迁移指南](./MIGRATION-4.0.md) 的旧值表进行迁移。
141
+
146
142
  ### 核心概念:S/M/L 矩阵
147
143
 
148
144
  NeatUI 采用 **分形尺寸体系**,而非线性数值:
@@ -163,50 +159,98 @@ NeatUI 采用 **分形尺寸体系**,而非线性数值:
163
159
  第二个字母 = 微调
164
160
  ```
165
161
 
166
- ### 12 级尺寸阶梯
162
+ ### 宽高基础段(含 no 共 12 档)
167
163
 
168
164
  ```
169
- no → 0 (无)
170
- xs → 0.5em (超小)
171
- ss → 0.75em (小-小)
172
- sm → 1em (小-中)
173
- sl → 1.25em (小-大)
174
- ms → 1.5em (中-小)
175
- mm → 2em (中-中)
176
- ml → 2.5em (中-大)
177
- ls → 3em (大-小)
178
- lm → 4em (大-中)
179
- ll → 6em (大-大)
180
- xl → 8em (超大)
165
+ no → 0
166
+ xs → 0.5em
167
+ ss → 1em
168
+ sm → 1.5em
169
+ sl → 2em
170
+ ms → 2.5em
171
+ mm → 3em
172
+ ml → 3.5em
173
+ ls → 4em
174
+ lm → 4.5em
175
+ ll → 5em
176
+ xl → 5.5em
181
177
  ```
182
178
 
183
- ### 修饰符扩展(5 倍精度)
179
+ 各模块共享档位名称,但不共享同一组数值;上表只适用于 `w / min-w / max-w / h / min-h / max-h`。
180
+
181
+ ### 宽高分段扩展
184
182
 
185
183
  ```scss
186
- 基础值:
187
- w-ll // 6em
184
+ 基础段:
185
+ w-xs // 0.5em
186
+ w-xl // 5.5em
188
187
 
189
- 增量 (+):
190
- w-ll+ // 7em (基础 + 1)
188
+ 紧凑容器段:
189
+ w-xs*s // 6em
190
+ w-xl*s // 16em
191
191
 
192
- 倍数 (*):
193
- w-ll*s // 12em (基础 × 2)
194
- w-ll*m // 18em (基础 × 3)
195
- w-ll*l // 24em (基础 × 4)
192
+ 中型容器段:
193
+ w-xs*m // 18em
194
+ w-xl*m // 38em
195
+
196
+ 大型容器段:
197
+ w-xs*l // 42em
198
+ w-xl*l // 82em
196
199
  ```
197
200
 
198
- **覆盖范围**: 0-80em (0-1280px @ 16px),共 60+ 种精确尺寸
201
+ `w/h` 的 `*s/*m/*l` 是分段档位,不是乘法。4.0 起不再生成 `w-sm+` 这类宽高增量类。
202
+
203
+ **覆盖范围**: 0-82em (0-1312px @ 16px),共 45 种宽高尺寸
199
204
 
200
205
  ### 应用于各属性
201
206
 
202
207
  | 前缀 | 属性 | 示例 | 说明 |
203
208
  |-----|------|------|------|
204
- | `n-` | padding | `n-mm` | 内边距 2em |
205
- | `m-` | margin | `m-ss` | 外边距 0.75em |
206
- | `w-` | width | `w-ll` | 宽度 6em |
207
- | `h-` | height | `h-sm` | 高度 1em |
208
- | `r-` | border-radius | `r-ms` | 圆角 1.5em |
209
- | `fs-` | font-size | `fs-lm` | 字号 4em |
209
+ | `n-` | padding | `n-mm` | 内边距 1.5em |
210
+ | `m-` | margin | `m-ss` | 外边距 0.25em |
211
+ | `w-` | width | `w-ll` | 宽度 5em |
212
+ | `h-` | height | `h-sm` | 高度 1.5em |
213
+ | `r-` | border-radius | `r-ms` | 圆角 0.5em |
214
+ | `fs-` | font-size | `fs-lm` | 基础字号 1.375rem |
215
+
216
+ ### 字号分段扩展
217
+
218
+ ```scss
219
+ 基础字号:
220
+ fs-xs // 0.6875rem
221
+ fs-mm // 1rem
222
+ fs-xl // 1.75rem
223
+
224
+ 展示字号:
225
+ fs-xs*s // 2rem
226
+ fs-xl*s // 4.5rem
227
+
228
+ 视觉字号:
229
+ fs-xs*m // 5rem
230
+ fs-xl*m // 10rem
231
+
232
+ 巨型字号:
233
+ fs-xs*l // 11rem
234
+ fs-xl*l // 21rem
235
+ ```
236
+
237
+ 字号使用 `rem`,跟随根字号缩放。4.0 起不再生成 `fs-sm+` 微调和旧 `fs-sm*` 翻倍语法,`*s/*m/*l` 是展示、视觉、巨型字号分段。
238
+
239
+ ### 语义与上下文字号
240
+
241
+ ```scss
242
+ fs-case // 0.625rem
243
+ fs-note // 0.75rem
244
+ fs-desc // 0.875rem
245
+ fs-body // 1rem
246
+ fs-lead // 1.125rem
247
+
248
+ fs-root // 1rem,重置到根字号
249
+ fs++ // 1.0625em,相对当前上下文放大
250
+ fs-- // 0.9375em,相对当前上下文缩小
251
+ ```
252
+
253
+ `fs++ / fs--` 是4.0保留的上下文缩放语法,不属于已删除的 `fs-{size}+` 和 `fs-{size}*`。
210
254
 
211
255
  ### 方向修饰符
212
256
 
@@ -226,7 +270,7 @@ mx-sm // margin-left + margin-right
226
270
  ### 特殊值
227
271
 
228
272
  ```scss
229
- r-round // border-radius: 50% (圆形)
273
+ r-full // border-radius: 10000em (胶囊或圆形轮廓)
230
274
  r-no // border-radius: 0 (无圆角)
231
275
 
232
276
  w-full // width: 100%
@@ -242,96 +286,135 @@ h-auto // height: auto
242
286
 
243
287
  ### 核心概念:语义化色彩
244
288
 
245
- NeatUI 的色彩系统分为三层:
289
+ NeatUI 的色彩系统分为三层,但只封闭「角色、算子、档位、通道和状态」;
290
+ 主题名与项目扩展颜色名保持开放:
246
291
 
247
292
  ```
248
- 层级 1: 基础色 (8 个)
249
- ├─ main (主色)
250
- ├─ vice (辅助色)
251
- ├─ well (成功)
252
- ├─ warn (警告)
253
- ├─ risk (危险)
254
- ├─ info (信息)
255
- ├─ text (文本)
256
- └─ fore (前景)
293
+ 层级 1: 9 个必需种子
294
+ ├─ main, text, fore, back
295
+ └─ link, code, well, warn, risk
257
296
 
258
- 层级 2: 语义色 (自动推导)
259
- ├─ read, desc, note, line, weak (5 级文字)
260
- └─ 12 级透明度 + 混合色
297
+ 层级 2: 10 个自动角色
298
+ ├─ none, w, b
299
+ ├─ read, desc, note, case, line, weak
300
+ └─ deep
261
301
 
262
- 层级 3: 主题色 (自动切换)
263
- ├─ light (浅色主题)
264
- └─ dark (深色主题)
302
+ 层级 3: 13 档派生 + 3 通道 + 3 状态
303
+ ├─ o / w / b × xxs…xxl
304
+ ├─ co / bg / b
305
+ └─ base / hover / active
265
306
  ```
266
307
 
308
+ `info`、`vice`、`brand` 是扩展示例,但不是必需种子。
309
+ `light`、`dark` 也只是最常见的主题名;项目可以按产品需要定义春节、品牌、
310
+ 高对比度等任意主题,也可以扩展自己的颜色名称。NeatUI 约束的是颜色如何派生和使用,
311
+ 不是把主题限制成预设名单。
312
+
267
313
  ### 基础色配置
268
314
 
269
315
  ```scss
270
316
  // 在项目中配置主题
317
+ @use '@neatui/css' as neatui;
318
+
271
319
  $theme: (
272
- 'light': (
273
- main: #00b277, // 品牌主色
274
- vice: #67ce82, // 品牌辅助色
275
- well: #4bbc73, // 成功 (绿色系)
276
- warn: #fb9a2a, // 警告 (橙色系)
277
- risk: #f95850, // 危险 (红色系)
278
- info: #3c49dd, // 信息 (蓝色系)
279
- text: #000000, // 主文本色
280
- fore: #ffffff, // 前景/卡片背景色
320
+ light: (
321
+ main: #00b277, // 品牌主色
322
+ vice: #67ce82, // 品牌辅助色(可自定义名称)
323
+ text: #000000,
324
+ fore: #ffffff,
325
+ back: #f5f5f5,
326
+ link: #d07950,
327
+ code: #e23861,
328
+ well: #4bbc73,
329
+ warn: #fb9a2a,
330
+ risk: #f95850,
331
+ info: #3c49dd,
281
332
  ),
282
- 'dark': (
283
- // 深色主题配置...
333
+ dark: (
334
+ main: #00b277,
335
+ vice: #67ce82,
336
+ text: #ffffff,
337
+ fore: #1f1f1f,
338
+ back: #191919,
339
+ link: #dd7f49,
340
+ code: #e23861,
341
+ well: #4bbc73,
342
+ warn: #fb9a2a,
343
+ risk: #f95850,
344
+ info: #3c49dd,
284
345
  )
285
346
  );
347
+
348
+ @include neatui.theme($theme);
286
349
  ```
287
350
 
288
351
  ### 自动推导的语义色
289
352
 
290
353
  ```scss
291
- // 系统自动计算,无需手动定义
292
- --co-read: rgba(text, 0.85) // 主要阅读文字
293
- --co-desc: rgba(text, 0.55) // 描述性文字
294
- --co-note: rgba(text, 0.35) // 注释/提示文字
295
- --co-line: rgba(text, 0.10) // 分割线
296
- --co-weak: rgba(text, 0.035) // 弱化背景
354
+ // mix-int(from, toward, weight) 对 RGB 通道取整
355
+ --co-read: mix-int(text, fore, 85%)
356
+ --co-desc: mix-int(text, fore, 55%)
357
+ --co-note: mix-int(text, fore, 35%)
358
+ --co-case: mix-int(text, fore, 20%)
359
+ --co-line: mix-int(text, fore, 10%)
360
+ --co-weak: mix-int(text, fore, 3.5%)
297
361
 
298
- // 反转色 (前景色)
299
- --co-case: rgba(fore, 0.85) // 反转主文字
300
- --co-link: rgba(fore, 0.55) // 反转描述
301
- --co-tips: rgba(fore, 0.35) // 反转提示
362
+ --co-none: transparent
363
+ --co-w: #fff
364
+ --co-b: #000
365
+ --co-deep: dynamic-deepen(back, 8%, 16%)
302
366
  ```
303
367
 
368
+ 项目如果显式提供与自动角色同名的颜色,就以项目配置为准;其他扩展色会直接追加进
369
+ 主题色卡。所有主题中出现过的颜色名都会合并生成对应的 class,所以不同主题可以共享
370
+ 同一套 `co-* / bg-* / b-*` 表达。
371
+
304
372
  ### 颜色属性前缀
305
373
 
306
374
  | 前缀 | 属性 | 示例 | 输出 |
307
375
  |-----|------|------|------|
308
376
  | `co-` | color | `co-main` | 主色文字 |
309
377
  | `bg-` | background | `bg-risk` | 危险背景 |
310
- | `bk-` | border-color | `bk-line` | 线条边框 |
378
+ | `b-` | border-color | `b-line` | 线条边框 |
379
+
380
+ 4.0 不再使用旧的 `bk-*`。`b-` 同时是边框样式、宽度和颜色的统一前缀:
381
+ `b-solid` 表示样式,`b-xs` 表示宽度,`b-line` 表示颜色;具体语义由后缀词元决定。
311
382
 
312
- ### 完整颜色类名列表
383
+ ### 基于上例生成的颜色类
313
384
 
314
385
  #### 品牌色
315
386
  ```scss
316
- co-main, bg-main, bk-main // 主色
317
- co-vice, bg-vice, bk-vice // 辅助色
387
+ co-main, bg-main, b-main // 主色
388
+ co-vice, bg-vice, b-vice // 辅助色
318
389
  ```
319
390
 
320
391
  #### 功能色
321
392
  ```scss
322
- co-well, bg-well, bk-well // 成功 ✅
323
- co-warn, bg-warn, bk-warn // 警告 ⚠️
324
- co-risk, bg-risk, bk-risk // 危险 ❌
325
- co-info, bg-info, bk-info // 信息 ℹ️
393
+ co-well, bg-well, b-well // 成功 ✅
394
+ co-warn, bg-warn, b-warn // 警告 ⚠️
395
+ co-risk, bg-risk, b-risk // 危险 ❌
396
+ co-info, bg-info, b-info // 信息 ℹ️
326
397
  ```
327
398
 
328
399
  #### 基础色
329
400
  ```scss
330
- co-text, bg-text, bk-text // 文本色
331
- co-fore, bg-fore, bk-fore // 前景色
332
- co-back, bg-back, bk-back // 背景色
401
+ co-text, bg-text, b-text // 文本色
402
+ co-fore, bg-fore, b-fore // 前景色
403
+ co-back, bg-back, b-back // 背景色
333
404
  ```
334
405
 
406
+ #### 绝对色
407
+ ```scss
408
+ co-w, bg-w, b-w // 固定 #fff,不随主题变化
409
+ co-b, bg-b, b-b // 固定 #000,不随主题变化
410
+ ```
411
+
412
+ 绝对色用于颜色关系本身已经确定的场景,例如品牌色、状态色或深色图片上的纯白内容,
413
+ 以及确定的浅色彩底上的纯黑内容。它们不能与主题语义色混用:`co-fore` 表示当前主题
414
+ 的前景面颜色,`co-read / co-text` 表示当前主题的正文颜色,都不保证为纯白或纯黑。
415
+ 因此有色深背景上的白字应使用 `co-w`,不能用 `co-fore`、`co-read` 或 `co-text`
416
+ 碰巧获得接近结果。
417
+
335
418
  #### 语义色
336
419
  ```scss
337
420
  co-read // 主要文字 (85%)
@@ -340,18 +423,24 @@ co-note // 注释文字 (35%)
340
423
  co-line // 分割线 (10%)
341
424
  co-weak // 弱化背景 (3.5%)
342
425
 
343
- // 反转色 (用于深色背景)
344
- co-case // 反转主文字
345
- co-link // 反转链接
346
- co-tips // 反转提示
426
+ co-case // 更弱一级的语义文字 (20%)
427
+ co-link // 主题配置的链接色
347
428
  ```
348
429
 
349
- ### 透明度系列 (12 级)
430
+ ### 派生系列(13 级)
350
431
 
351
- 任何颜色 + `-o-{level}` = 透明度变体
432
+ 13 档不是等差近似,而是与 4.x Sass 运行时精确一致:
433
+
434
+ | level | xxs | xs | ss | sm | sl | ms | mm | ml | ls | lm | ll | xl | xxl |
435
+ |---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
436
+ | weight | .035 | .05 | .10 | .15 | .25 | .35 | .45 | .55 | .65 | .75 | .85 | .90 | .95 |
437
+
438
+ `o` 使用颜色本身与 alpha;`w` 按权重向 `fore` 混合;`b` 按权重向
439
+ `text` 混合。
352
440
 
353
441
  ```scss
354
- co-main-o-xs // 主色 + 超低透明度
442
+ co-main-o-xxs
443
+ co-main-o-xs
355
444
  co-main-o-ss
356
445
  co-main-o-sm
357
446
  co-main-o-sl
@@ -361,56 +450,61 @@ co-main-o-ml
361
450
  co-main-o-ls
362
451
  co-main-o-lm
363
452
  co-main-o-ll
364
- co-main-o-xl // 主色 + 超高透明度
453
+ co-main-o-xl
454
+ co-main-o-xxl
365
455
  ```
366
456
 
367
- ### 混合色系列
368
-
369
457
  ```scss
370
- // 与前景色混合 (变浅)
371
- co-main-w-sm // 主色 + 前景色 10%
372
- co-main-w-mm // 主色 + 前景色 20%
373
- co-main-w-ml // 主色 + 前景色 30%
374
-
375
- // 与文本色混合 (变深)
376
- co-main-b-sm // 主色 + 文本色 10%
377
- co-main-b-mm // 主色 + 文本色 20%
378
- co-main-b-ml // 主色 + 文本色 30%
458
+ co-main-w-sm // main 占 15%,其余趋向 fore
459
+ co-main-b-sm // main 占 15%,其余趋向 text
379
460
  ```
380
461
 
462
+ `w / b / fore / back / desc / note / case / deep / code / link` 不生成
463
+ `w`、`b` 派生族。4.x 还保留一个兼容特征:`none` 不生成 `o/w/b` 变量,
464
+ 但对应 class 选择器仍会生成。迁移和工具实现必须尊重这一历史行为。
465
+
381
466
  ### 边框样式
382
467
 
383
468
  ```scss
384
469
  // 边框宽度
385
- bt-xs, br-xs, bb-xs, bl-xs // 0.5px
386
- bt-ss, br-ss, bb-ss, bl-ss // 1px
387
- bt-sm, br-sm, bb-sm, bl-sm // 2px
470
+ bt-xs, br-xs, bb-xs, bl-xs // 1px
471
+ bt-ss, br-ss, bb-ss, bl-ss // 2px
472
+ bt-sm, br-sm, bb-sm, bl-sm // 3px
388
473
 
389
474
  // 边框样式
390
475
  b-solid // 实线
391
476
  b-dashed // 虚线
477
+ b-double // 双线
392
478
  b-dotted // 点线
393
- b-none // 无边框
479
+ b-no // 四边宽度归零
394
480
  ```
395
481
 
396
482
  ### 主题切换
397
483
 
398
484
  ```html
399
- <!-- 切换全局主题 -->
400
- <html theme="light"> <!-- 浅色主题 -->
401
- <html theme="dark"> <!-- 深色主题 -->
485
+ <!-- 配置数组中的第一个主题直接编译到 :root,无需 theme 属性 -->
486
+ <html>
402
487
 
403
- <!-- 所有颜色自动切换,0 行额外代码! -->
488
+ <!-- 第二个及之后的主题使用 token selector,可继续自定义名称 -->
489
+ <html theme="midnight">
404
490
  ```
405
491
 
492
+ 第一个主题不会额外生成 `[theme~="<first>"]` 选择器,因为它始终作为 `:root`
493
+ 默认值存在;第二个及之后的主题通过 `theme` 属性覆盖它。切回默认主题时,移除或改掉
494
+ 当前主题属性即可。因此主题顺序有运行时含义,不只是配置排版。
495
+
496
+ 主题系统的边界是“结构有限、内容开放”:`co / bg / b`、派生档位和交互状态保持
497
+ 统一,主题名和项目色卡由产品自己定义。这样既能保持组件表达稳定,也不会把
498
+ NeatUI 限制成 light/dark 或某一组固定品牌色。
499
+
406
500
  ### 颜色使用示例
407
501
 
408
502
  ```html
409
503
  <!-- 主色按钮 -->
410
- <button class="bg-main co-case">主操作</button>
504
+ <button class="bg-main co-w">主操作</button>
411
505
 
412
506
  <!-- 危险操作 -->
413
- <button class="bg-risk co-case">删除</button>
507
+ <button class="bg-risk co-w">删除</button>
414
508
 
415
509
  <!-- 卡片 -->
416
510
  <div class="bg-fore co-text n-mm r-sm">
@@ -420,7 +514,7 @@ b-none // 无边框
420
514
  </div>
421
515
 
422
516
  <!-- 分割线 -->
423
- <div class="bt-xs bk-line"></div>
517
+ <div class="bt-xs b-line"></div>
424
518
 
425
519
  <!-- Hover 透明度 -->
426
520
  <a class="co-main co-main-o-lm:hover">链接</a>
@@ -434,11 +528,11 @@ b-none // 无边框
434
528
 
435
529
  #### 核心理念
436
530
 
437
- **废除 flexbox 概念,用空间坐标直接描述位置!**
531
+ `ui-flex` 用空间坐标 token 描述位置,再由兼容 CSS 编译为 flex 布局。
438
532
 
439
533
  ```
440
- 传统思维: display: flex + justify-content + align-items
441
- NeatUI 思维: ui-flex="横向 纵向"
534
+ 属性表达: display: flex + justify-content + align-items
535
+ 坐标表达: ui-flex="横向 纵向"
442
536
  ```
443
537
 
444
538
  #### 坐标系规则
@@ -508,17 +602,17 @@ y: 纵向对齐
508
602
  </div>
509
603
  ```
510
604
 
511
- #### 实战对比
605
+ #### 同一意图的两种表达
512
606
 
513
607
  **场景 1: 导航栏**
514
608
  ```html
515
- <!-- Tailwind: 需要理解 flexbox -->
609
+ <!-- 属性导向的 utility 表达 -->
516
610
  <nav class="flex justify-between items-center px-4 py-2">
517
611
  <div>Logo</div>
518
612
  <div>Menu</div>
519
613
  </nav>
520
614
 
521
- <!-- NeatUI: 空间直觉 -->
615
+ <!-- NeatUI 坐标 token -->
522
616
  <nav ui-flex="row xm" class="nx-sm ny-sm">
523
617
  <div>Logo</div>
524
618
  <div>Menu</div>
@@ -527,7 +621,7 @@ y: 纵向对齐
527
621
 
528
622
  **场景 2: 居中对话框**
529
623
  ```html
530
- <!-- Tailwind -->
624
+ <!-- 属性导向的 utility 表达 -->
531
625
  <div class="flex justify-center items-center min-h-screen">
532
626
  <div class="bg-white p-6">内容</div>
533
627
  </div>
@@ -540,7 +634,7 @@ y: 纵向对齐
540
634
 
541
635
  **场景 3: 卡片布局**
542
636
  ```html
543
- <!-- Tailwind -->
637
+ <!-- 属性导向的 utility 表达 -->
544
638
  <div class="flex flex-col items-center p-4">
545
639
  <img class="w-16 h-16 rounded-full" />
546
640
  <h3 class="mt-2">标题</h3>
@@ -613,6 +707,49 @@ gap: 间距等级 (ss, sm, mm, ml, ll...)
613
707
 
614
708
  ---
615
709
 
710
+ ## 媒体内容
711
+
712
+ ### `ui-cover`:固定比例封面
713
+
714
+ `ui-cover` 把容器设为相对定位的比例盒,并让直接子元素绝对铺满。图片默认使用
715
+ `object-fit: cover`:
716
+
717
+ ```html
718
+ <!-- 16:9 裁切填充 -->
719
+ <figure ui-cover="16:9">
720
+ <img src="/cover.jpg" alt="文章封面" />
721
+ </figure>
722
+
723
+ <!-- 3:2 比例,但完整显示图片 -->
724
+ <figure ui-cover="3:2 contain">
725
+ <img src="/product.png" alt="商品" />
726
+ </figure>
727
+ ```
728
+
729
+ 固定比例只能从以下 13 个值选择:
730
+
731
+ ```text
732
+ 1:1, 2:1, 1:2, 4:3, 3:4, 3:2, 2:3,
733
+ 16:9, 9:16, 16:10, 10:16, 2.39:1, 1:2.39
734
+ ```
735
+
736
+ 也可以用 `+no..+xl` 或 `-no..-xl` 从默认的 `100%` 高度按 5% 递增或递减。
737
+ 比例和偏移是同一个“高度模式”,一次只能选择一个;`cover / contain` 可以再与它
738
+ 组合。该语法不接受任意比例、任意百分比或响应式前缀。
739
+
740
+ ### `ui-omit`:1–9 行省略
741
+
742
+ ```html
743
+ <p ui-omit="1">单行标题,超出后显示省略号</p>
744
+ <p ui-omit="3">最多显示三行的简介,超出后截断。</p>
745
+ ```
746
+
747
+ `ui-omit` 一次只接受 `1..9` 中的一个值:`1` 使用单行 `nowrap`,`2..9`
748
+ 使用 `-webkit-line-clamp`。不要只写裸 `ui-omit`,因为历史结构规则会进入多行模式,
749
+ 但没有行数值可供 `--line` 使用。该语法同样没有响应式前缀。
750
+
751
+ ---
752
+
616
753
  ## 响应式系统
617
754
 
618
755
  ### 9 档精细断点
@@ -636,57 +773,130 @@ dpc-m: 1440px // 中桌面 (主流显示器)
636
773
  dpc-l: 1600px // 大桌面 (2K 显示器)
637
774
  ```
638
775
 
776
+ ### 24 栅格:`ui-row` 与 `ui-col`
777
+
778
+ 栅格只接受 `<breakpoint>-<span>`,其中 `span` 是 `0..24`。它有两种 selector
779
+ 目标:
780
+
781
+ ```html
782
+ <!-- row 宽度作用于每个直接子元素 -->
783
+ <div ui-row="space mob-24 pad-12 dpc-8">
784
+ <section>第一列</section>
785
+ <section>第二列</section>
786
+ </div>
787
+
788
+ <!-- col 宽度作用于 [ui-row] 内带 ui-col 的后代,可逐列不同 -->
789
+ <div ui-row="space">
790
+ <main ui-col="mob-24 pad-16 dpc-18">主体</main>
791
+ <aside ui-col="mob-24 pad-8 dpc-6">侧栏</aside>
792
+ </div>
793
+ ```
794
+
795
+ 公开 breakpoint 共十二个:
796
+
797
+ ```text
798
+ mob, mob-s, mob-m, mob-l
799
+ pad, pad-s, pad-m, pad-l
800
+ dpc, dpc-s, dpc-m, dpc-l
801
+ ```
802
+
803
+ 栅格沿用当前 `cols.scss` 的实际 source order:`mob` 与 `mob-s` 都是基础层;
804
+ `mob-m / mob-l / pad(-s) / pad-m / pad-l / dpc(-s) / dpc-m / dpc-l`
805
+ 依次从 480 / 640 / 800 / 960 / 1120 / 1280 / 1440 / 1600px 起覆盖。
806
+ 这里的 `mob-s` 与上面的命名断点表不同,它在现有栅格 CSS 中没有 320px media
807
+ 包裹。这是 4.x 当前输出的兼容行为,使用和迁移时不要把它误当成独立媒体区间。
808
+
809
+ 百分比由 24 栏公式向下截断到 5 位小数:
810
+
811
+ | Span | 宽度 |
812
+ | ---: | ---: |
813
+ | `0` | `0` |
814
+ | `1` | `4.16666%` |
815
+ | `6` | `25%` |
816
+ | `12` | `50%` |
817
+ | `18` | `75%` |
818
+ | `24` | `100%` |
819
+
820
+ 行行为也属于有限语法:
821
+
822
+ - `space`:行负 margin 与子元素 padding 成对出现,799px 以下从 1rem 缩为 .5rem;
823
+ - `:full`:设置 `> * > *` 的高度为 100%;
824
+ - `inline` / `reverse`:切换 inline-flex 或无条件 row-reverse;
825
+ - `mob-auto / pad-auto / dpc-auto`:三个历史名称都只属于 `ui-row`,实际均无媒体条件;
826
+ - `mob:reverse / pad:reverse / dpc:reverse`:分别只在
827
+ 0–799 / 800–1279 / 1280px 以上生效。
828
+
829
+ 表格兼容仍为 `tr[ui-row] { display: table-row }` 与
830
+ `td/th[ui-col] { display: table-cell }`。`mob-auto` 只属于 `ui-row`;栅格跨度使用
831
+ `0..24`,自定义像素布局不属于这套栅格语法。
832
+
639
833
  ### 三种操作符
640
834
 
641
- #### 1. `>` 大于(min-width)
835
+ `ui-hide` 的 `>`、`<`、`=` 比较的是命名档位或完整设备段,不接收任意像素值。
836
+ 所有 selector 都使用 `[ui-hide~="<token>"]`,因此多个隐藏条件可以用空格组合。
837
+
838
+ #### 1. `>` 高于命名范围
642
839
 
643
840
  ```html
644
- <!-- 平板以上显示 -->
645
- <div class="pad:w-mm">内容</div>
841
+ <!-- 高于 pad 设备段后隐藏,即从 1280px 起隐藏 -->
842
+ <div ui-hide=">pad">仅手机和平板显示</div>
646
843
 
647
- <!-- 桌面以上隐藏 -->
648
- <div ui-hide=">dpc">移动端专属</div>
844
+ <!-- 高于 dpc-m 档后隐藏,即从 dpc-l 的 1600px 起隐藏 -->
845
+ <div ui-hide=">dpc-m">1600px 以下显示</div>
649
846
  ```
650
847
 
651
- #### 2. `<` 小于(max-width)
848
+ `>dpc-l` 是最高档之后的兼容空端点,当前不会产生隐藏效果。
849
+
850
+ #### 2. `<` 低于命名范围
652
851
 
653
852
  ```html
654
- <!-- 桌面以下隐藏 -->
853
+ <!-- 低于 dpc 设备段隐藏,即到 1279px 为止隐藏 -->
655
854
  <div ui-hide="<dpc">桌面专属</div>
656
855
 
657
- <!-- 平板以下宽度 100% -->
658
- <div class="w-full <pad:w-mm">响应式容器</div>
856
+ <!-- 低于 mob-m 档隐藏,即到 479px 为止隐藏 -->
857
+ <div ui-hide="<mob-m">480px 起显示</div>
659
858
  ```
660
859
 
661
- #### 3. `=` 精确区间
860
+ `<mob-s` 是最低档之前的兼容空端点,当前不会产生隐藏效果。
861
+
862
+ #### 3. `=` 命名区间
662
863
 
663
864
  ```html
664
- <!-- 仅在中平板显示 (960px-1119px) -->
865
+ <!-- 仅在中平板区间隐藏(960px–1119px) -->
665
866
  <div ui-hide="=pad-m">仅中平板隐藏</div>
867
+
868
+ <!-- 整个移动设备段隐藏(最大 799px) -->
869
+ <div ui-hide="=mob">平板和桌面内容</div>
666
870
  ```
667
871
 
668
- ### 断点类名语法
872
+ ### 内置 `ui-hide` 值
669
873
 
670
- ```scss
671
- // 格式: {breakpoint}:{class-name}
672
- mob:fs-sm // 移动端字号小
673
- pad:fs-mm // 平板字号中
674
- dpc:fs-lm // 桌面字号大
874
+ | 关系 | 九档细分值 | 设备段别名 |
875
+ | --- | --- | --- |
876
+ | `>` | `>mob-s` … `>dpc-l` | `>mob`、`>pad` |
877
+ | `<` | `<mob-s` … `<dpc-l` | `<pad`、`<dpc` |
878
+ | `=` | `=mob-s` … `=dpc-l` | `=mob`、`=pad`、`=dpc` |
879
+
880
+ 除两个兼容空端点外,命中的规则都使用 `display: none !important`。
675
881
 
676
- // 组合使用
677
- <h1 class="fs-sm mob:fs-mm pad:fs-ml dpc:fs-xl">
678
- 响应式标题
679
- </h1>
882
+ ### 响应式 class 前缀
883
+
884
+ 组件级 class 使用 `base → pad → mob` 三层覆盖;`pad:` 在最大 1279px 生效,
885
+ `mob:` 在最大 799px 生效。这里没有通用 `dpc:` class 前缀:
886
+
887
+ ```html
888
+ <h1 class="fs-xl pad:fs-ml mob:fs-mm">响应式标题</h1>
889
+ <div class="w-xl pad:w-mm mob:w-full">响应式容器</div>
680
890
  ```
681
891
 
682
892
  ### ui-hide:显示/隐藏控制
683
893
 
684
894
  ```html
685
895
  <!-- 移动端隐藏 -->
686
- <div ui-hide="mob">桌面内容</div>
896
+ <div ui-hide="=mob">桌面内容</div>
687
897
 
688
898
  <!-- 桌面隐藏 -->
689
- <div ui-hide="dpc">移动内容</div>
899
+ <div ui-hide="=dpc">移动和平板内容</div>
690
900
 
691
901
  <!-- 小于平板隐藏 -->
692
902
  <div ui-hide="<pad">平板以上显示</div>
@@ -696,9 +906,16 @@ dpc:fs-lm // 桌面字号大
696
906
 
697
907
  <!-- 精确区间隐藏 -->
698
908
  <div ui-hide="=pad-m">仅在中平板隐藏</div>
909
+
910
+ <!-- 多个条件组成隐藏区间的并集 -->
911
+ <div ui-hide="=mob =dpc-l">仅平板和较小桌面显示</div>
699
912
  ```
700
913
 
701
- ### 全局字号响应(革命性功能)
914
+ `ui-hide` 只改变 CSS 可见性,不会卸载 Vue 组件,也不会停止请求、事件监听或定时器,
915
+ 不会自动迁移焦点和业务状态。需要停止副作用或销毁子树时,应使用 Vue 条件渲染并显式
916
+ 处理状态与焦点,而不是把 `ui-hide` 当作生命周期控制。
917
+
918
+ ### 全局字号响应
702
919
 
703
920
  ```html
704
921
  <!-- 在 <html> 标签设置全局字号 -->
@@ -707,8 +924,7 @@ dpc:fs-lm // 桌面字号大
707
924
  <html size="l"> <!-- 大字号模式 -->
708
925
  <html size="xl"> <!-- 超大字号模式 (老年模式) -->
709
926
 
710
- <!-- 所有使用 em 单位的元素自动缩放! -->
711
- <!-- 0 行 CSS,0 个媒体查询,全站响应! -->
927
+ <!-- 使用 em 且继承根字号的属性会随之缩放 -->
712
928
  ```
713
929
 
714
930
  **实战用例:老年人模式**
@@ -727,7 +943,7 @@ function toggleElderlyMode() {
727
943
  切换大字模式
728
944
  </button>
729
945
 
730
- <!-- 所有内容自动放大,无需额外代码! -->
946
+ <!-- 已采用相对字号的内容随根字号变化 -->
731
947
  </html>
732
948
  </template>
733
949
  ```
@@ -855,7 +1071,7 @@ ui-btn="[@{flag}] {color} {size} [:{modifier}]"
855
1071
 
856
1072
  ---
857
1073
 
858
- ## 完整 API 参考
1074
+ ## 常用 API 参考
859
1075
 
860
1076
  ### 间距类 (Spacing)
861
1077
 
@@ -864,17 +1080,17 @@ ui-btn="[@{flag}] {color} {size} [:{modifier}]"
864
1080
  | 类名 | 属性 | 值 |
865
1081
  |-----|------|------|
866
1082
  | `n-no` | padding | 0 |
867
- | `n-xs` | padding | 0.5em |
868
- | `n-ss` | padding | 0.75em |
869
- | `n-sm` | padding | 1em |
870
- | `n-sl` | padding | 1.25em |
871
- | `n-ms` | padding | 1.5em |
872
- | `n-mm` | padding | 2em |
873
- | `n-ml` | padding | 2.5em |
874
- | `n-ls` | padding | 3em |
875
- | `n-lm` | padding | 4em |
876
- | `n-ll` | padding | 6em |
877
- | `n-xl` | padding | 8em |
1083
+ | `n-xs` | padding | 1px |
1084
+ | `n-ss` | padding | 0.25em |
1085
+ | `n-sm` | padding | 0.5em |
1086
+ | `n-sl` | padding | 0.75em |
1087
+ | `n-ms` | padding | 1em |
1088
+ | `n-mm` | padding | 1.5em |
1089
+ | `n-ml` | padding | 2em |
1090
+ | `n-ls` | padding | 2.5em |
1091
+ | `n-lm` | padding | 3em |
1092
+ | `n-ll` | padding | 4em |
1093
+ | `n-xl` | padding | 5em |
878
1094
 
879
1095
  #### 方向 Padding
880
1096
 
@@ -898,21 +1114,41 @@ mr-{size} // margin-right
898
1114
  mb-{size} // margin-bottom
899
1115
  ml-{size} // margin-left
900
1116
 
901
- // 特殊值
902
- m-auto // margin: auto
903
- mx-auto // margin-left/right: auto (水平居中)
904
- my-auto // margin-top/bottom: auto
1117
+ // 作用层级
1118
+ mx-{size}-sub // 为直系子元素设置左右 margin,并归零首/末项外边界
1119
+ mx-{size}-sun // 为孙级元素设置左右 margin,并归零每组首/末项外边界
905
1120
  ```
906
1121
 
907
1122
  #### 负 Margin
908
1123
 
909
1124
  ```scss
910
- mx-sm-sub // margin-left/right: -1em
911
- my-sm-sub // margin-top/bottom: -1em
912
- mt-sm-sub // margin-top: -1em
913
- // 所有尺寸都支持 -sub 后缀
1125
+ -mx-sm // margin-left/right: -0.5em
1126
+ -my-sm // margin-top/bottom: -0.5em
1127
+ -mt-sm // margin-top: -0.5em
1128
+ // 负 margin 使用前导负号,不使用 -sub / -sun 后缀
914
1129
  ```
915
1130
 
1131
+ `n / m / -m` 共用
1132
+ `no / xs / ss / sm / sl / ms / mm / ml / ls / lm / ll / xl` 12 档;除负 margin
1133
+ 外,`-sub` 作用于直系子元素、`-sun` 作用于孙级元素。所有基础 class 都支持
1134
+ `pad:`(最大 1279px)和 `mob:`(最大 799px),级联顺序为
1135
+ `base → pad → mob`。
1136
+
1137
+ Padding 的 `*-sub` 在 `[ui-row]` 容器上还会生成等量负 margin 补偿,让栅格子项的
1138
+ 内边距不会扩大容器的外边界。
1139
+
1140
+ #### Grid gap
1141
+
1142
+ ```html
1143
+ <div ui-grid="4 sm">...</div>
1144
+ <div ui-grid="2 mob:sm pad:6 pad:mm dpc:12">...</div>
1145
+ ```
1146
+
1147
+ `ui-grid` 的 `no..xl` 设置 `--gap`,刻度为
1148
+ `0 / 1px / .25em / .5em / .75em / 1em / 1.5em / 2em / 2.5em / 3em / 4em / 5em`。
1149
+ 同一属性还可以组合 `1..12` 列数和 `block`。4.x 的 `mob:` 是无媒体条件的历史别名;
1150
+ `pad:` 从 800px、`dpc:` 从 1280px 生效。
1151
+
916
1152
  ### 尺寸类 (Sizing)
917
1153
 
918
1154
  #### Width
@@ -920,13 +1156,12 @@ mt-sm-sub // margin-top: -1em
920
1156
  ```scss
921
1157
  w-no // 0
922
1158
  w-xs // 0.5em
923
- w-ss ~ w-xl // 0.75em ~ 8em
1159
+ w-ss ~ w-xl // 1em ~ 5.5em
924
1160
 
925
- // 修饰符
926
- w-ll+ // 7em (增量)
927
- w-ll*s // 12em (2倍)
928
- w-ll*m // 18em (3倍)
929
- w-ll*l // 24em (4倍)
1161
+ // 分段扩展
1162
+ w-ll*s // 15em
1163
+ w-ll*m // 36em
1164
+ w-ll*l // 78em
930
1165
 
931
1166
  // 特殊值
932
1167
  w-full // 100%
@@ -947,24 +1182,32 @@ h-screen // 100vh
947
1182
 
948
1183
  ```scss
949
1184
  r-no // border-radius: 0
950
- r-xs // 0.5em
951
- r-ss ~ r-xl // 0.75em ~ 8em
952
- r-round // 50% (圆形)
1185
+ r-xs // 0.1em
1186
+ r-ss ~ r-xl // 0.2em ~ 1.2em
1187
+ r-full // 10000em(胶囊或圆形轮廓)
953
1188
 
954
1189
  // 方向圆角
955
- rt-{size} // 左上
956
- rr-{size} // 右上
957
- rb-{size} // 右下
958
- rl-{size} // 左下
1190
+ r-t-{size} // 上方两角
1191
+ r-b-{size} // 下方两角
1192
+ r-lt-{size} // 左上
1193
+ r-rt-{size} // 右上
1194
+ r-lb-{size} // 左下
1195
+ r-rb-{size} // 右下
959
1196
  ```
960
1197
 
1198
+ `size` 为 `no / xs / ss / sm / sl / ms / mm / ml / ls / lm / ll / xl`,
1199
+ 以上圆角类同时支持 `pad:` 与 `mob:` 响应式前缀。
1200
+
961
1201
  ### 字体类 (Typography)
962
1202
 
963
1203
  ```scss
964
1204
  // 字号
965
1205
  fs-no // 0
966
- fs-xs // 0.5em
967
- fs-ss ~ fs-xl // 0.75em ~ 8em
1206
+ fs-xs // 0.6875rem
1207
+ fs-ss ~ fs-xl // 0.75rem ~ 1.75rem
1208
+ fs-xs*s ~ fs-xl*s // 2rem ~ 4.5rem
1209
+ fs-xs*m ~ fs-xl*m // 5rem ~ 10rem
1210
+ fs-xs*l ~ fs-xl*l // 11rem ~ 21rem
968
1211
 
969
1212
  // 字重
970
1213
  thin // font-weight: 100
@@ -990,19 +1233,20 @@ ls-xs ~ ls-xl // letter-spacing
990
1233
 
991
1234
  ```scss
992
1235
  // 宽度
993
- bt-xs, br-xs, bb-xs, bl-xs // 0.5px
994
- bt-ss, br-ss, bb-ss, bl-ss // 1px
995
- bt-sm, br-sm, bb-sm, bl-sm // 2px
1236
+ bt-xs, br-xs, bb-xs, bl-xs // 1px
1237
+ bt-ss, br-ss, bb-ss, bl-ss // 2px
1238
+ bt-sm, br-sm, bb-sm, bl-sm // 3px
996
1239
 
997
1240
  // 样式
998
1241
  b-solid
999
1242
  b-dashed
1243
+ b-double
1000
1244
  b-dotted
1001
- b-none
1245
+ b-no
1002
1246
 
1003
1247
  // 边框颜色
1004
- bk-main, bk-vice, bk-risk...
1005
- bk-line, bk-weak
1248
+ b-main, b-vice, b-risk...
1249
+ b-line, b-weak
1006
1250
  ```
1007
1251
 
1008
1252
  ### 定位类 (Position)
@@ -1077,6 +1321,10 @@ overflow-x-hidden
1077
1321
  overflow-y-hidden
1078
1322
  ```
1079
1323
 
1324
+ 滚动系统同时保留 `.ui-scroll` 等 class 写法;`ui-scroll` attribute 提供
1325
+ `stable`、五档 scrollbar 尺寸以及 x/y auto、hidden、unset。800px 以上的尺寸覆盖
1326
+ 只作用于 attribute 形式。
1327
+
1080
1328
  ### 光标类 (Cursor)
1081
1329
 
1082
1330
  ```scss
@@ -1089,13 +1337,27 @@ cursor-move
1089
1337
 
1090
1338
  ### 交互类 (Interaction)
1091
1339
 
1092
- ```scss
1093
- pointer-events-none
1094
- pointer-events-auto
1095
- user-select-none
1096
- user-select-text
1340
+ ```html
1341
+ <button class="ux-hover ux-scale">悬停反馈 + 按下缩放</button>
1342
+ <button class="ux-disable">视觉与指针禁用</button>
1343
+ <span ui-hover=":underline">下划线提示</span>
1097
1344
  ```
1098
1345
 
1346
+ 常用交互 class 包括:
1347
+
1348
+ - `ux-none / ux-none-sub`:pointer 光标并禁止文本选择;
1349
+ - `ux-hover[-sub] / ux-shadow[-sub]`:自身或直接子元素的 hover 反馈;
1350
+ - `ux-click[-sub] / hover-underline / ui-hover=":underline"`:始终显示
1351
+ pointer 与下划线,不会绑定 click 或 hover 事件;
1352
+ - `ux-scale`:`:active` 时缩放到 `.95`;
1353
+ - `parent-hover:show / parent-hover:hide`:父级 hover 时只改变
1354
+ opacity 与 pointer-events,DOM 节点始终保留;
1355
+ - `ev-none|auto[-sub|-sun]`:以 `!important` 控制 self、直接子级或孙级的
1356
+ pointer-events。
1357
+
1358
+ `ux-disable` 会阻止指针事件并降低透明度,但不会自动写入原生 `disabled`;表单组件仍应
1359
+ 通过自身 API 管理真实禁用状态。以上交互值不使用 `pad:` / `mob:` 响应式前缀。
1360
+
1099
1361
  ---
1100
1362
 
1101
1363
  ## 最佳实践
@@ -1107,7 +1369,7 @@ user-select-text
1107
1369
  <div style="padding: 13px; width: 237px;">
1108
1370
 
1109
1371
  <!-- ✅ 正确:使用规范尺寸 -->
1110
- <div class="n-sm w-ll+">
1372
+ <div class="n-sm w-sm*m">
1111
1373
 
1112
1374
  <!-- 如果确实需要特殊值,手写并注释 -->
1113
1375
  <div class="third-party" style="width: 237px">
@@ -1122,7 +1384,7 @@ user-select-text
1122
1384
  <button style="background: #00b277; color: white;">
1123
1385
 
1124
1386
  <!-- ✅ 正确:使用语义色 -->
1125
- <button class="bg-main co-case">
1387
+ <button class="bg-main co-w">
1126
1388
 
1127
1389
  <!-- ❌ 错误:使用通用灰色 -->
1128
1390
  <p class="text-gray-600">
@@ -1172,13 +1434,13 @@ user-select-text
1172
1434
  </Card>
1173
1435
  ```
1174
1436
 
1175
- ### 6. 深色模式零成本
1437
+ ### 6. 基于主题属性切换深色模式
1176
1438
 
1177
1439
  ```html
1178
- <!-- 只需切换 theme 属性 -->
1440
+ <!-- 切换已配置的 theme 属性 -->
1179
1441
  <html :theme="isDark ? 'dark' : 'light'">
1180
1442
 
1181
- <!-- 所有颜色自动切换,无需额外代码 -->
1443
+ <!-- 使用语义色 token 的元素读取对应主题变量 -->
1182
1444
  <div class="bg-fore co-text">
1183
1445
  <h1 class="co-main">自动适配</h1>
1184
1446
  </div>
@@ -1200,7 +1462,7 @@ user-select-text
1200
1462
  <label class="co-desc fs-sm">邮箱</label>
1201
1463
  <input
1202
1464
  type="email"
1203
- class="w-full n-sm r-sm bg-weak bk-line bt-xs"
1465
+ class="w-full n-sm r-sm bg-weak b-line bt-xs"
1204
1466
  />
1205
1467
  </div>
1206
1468
 
@@ -1208,7 +1470,7 @@ user-select-text
1208
1470
  <label class="co-desc fs-sm">密码</label>
1209
1471
  <input
1210
1472
  type="password"
1211
- class="w-full n-sm r-sm bg-weak bk-line bt-xs"
1473
+ class="w-full n-sm r-sm bg-weak b-line bt-xs"
1212
1474
  />
1213
1475
  </div>
1214
1476
 
@@ -1297,7 +1559,7 @@ user-select-text
1297
1559
  >
1298
1560
  <div class="w-ll*s bg-fore r-ml shadow-ll">
1299
1561
  <!-- 头部 -->
1300
- <div class="n-mm bb-xs bk-line" ui-flex="row xm">
1562
+ <div class="n-mm bb-xs b-line" ui-flex="row xm">
1301
1563
  <h3 class="fs-lm bold co-main">标题</h3>
1302
1564
  <button ui-btn="none s" @click="closeDialog">
1303
1565
  <i class="icon-close"></i>
@@ -1310,7 +1572,7 @@ user-select-text
1310
1572
  </div>
1311
1573
 
1312
1574
  <!-- 底部 -->
1313
- <div class="n-mm bt-xs bk-line" ui-flex="row rm">
1575
+ <div class="n-mm bt-xs b-line" ui-flex="row rm">
1314
1576
  <button ui-btn="none :border" class="mr-sm" @click="closeDialog">
1315
1577
  取消
1316
1578
  </button>
@@ -1327,7 +1589,7 @@ user-select-text
1327
1589
  ```html
1328
1590
  <div class="bg-fore r-sm shadow-sm">
1329
1591
  <table class="w-full">
1330
- <thead class="bb-xs bk-line">
1592
+ <thead class="bb-xs b-line">
1331
1593
  <tr>
1332
1594
  <th class="n-mm text-left co-desc bold">姓名</th>
1333
1595
  <th class="n-mm text-left co-desc bold">邮箱</th>
@@ -1339,7 +1601,7 @@ user-select-text
1339
1601
  <tr
1340
1602
  v-for="user in users"
1341
1603
  :key="user.id"
1342
- class="bb-xs bk-line"
1604
+ class="bb-xs b-line"
1343
1605
  >
1344
1606
  <td class="n-mm co-text">{{ user.name }}</td>
1345
1607
  <td class="n-mm co-desc">{{ user.email }}</td>
@@ -1366,15 +1628,24 @@ user-select-text
1366
1628
 
1367
1629
  ```scss
1368
1630
  // 在 SCSS 中配置
1369
- @use '@neatui/css' with (
1370
- $theme: (
1371
- 'light': (
1372
- main: #00b277, // 自定义主色
1373
- vice: #67ce82,
1374
- // ... 其他颜色
1375
- )
1376
- )
1631
+ @use '@neatui/css' as neatui;
1632
+
1633
+ $theme: (
1634
+ light: (
1635
+ main: #00b277,
1636
+ text: #000000,
1637
+ fore: #ffffff,
1638
+ back: #f5f5f5,
1639
+ link: #d07950,
1640
+ code: #e23861,
1641
+ well: #4bbc73,
1642
+ warn: #fb9a2a,
1643
+ risk: #f95850,
1644
+ brand: #673ab7, // 扩展色名称可以自定义
1645
+ ),
1377
1646
  );
1647
+
1648
+ @include neatui.theme($theme);
1378
1649
  ```
1379
1650
 
1380
1651
  ### 2. 使用 SCSS Mixin
@@ -1408,7 +1679,7 @@ user-select-text
1408
1679
  <button class="bg-main bg-main-b-sm:active">按钮</button>
1409
1680
 
1410
1681
  <!-- Focus -->
1411
- <input class="bk-line bk-main:focus" />
1682
+ <input class="b-line b-main:focus" />
1412
1683
 
1413
1684
  <!-- Disabled -->
1414
1685
  <button class="bg-weak:disabled" disabled>禁用</button>
@@ -1438,25 +1709,24 @@ const descClass = 'co-desc fs-sm my-ss'
1438
1709
 
1439
1710
  ### NeatUI 核心价值
1440
1711
 
1441
- 1. **设计系统原子化**:第一个把完整设计规范原子化的框架
1442
- 2. **极低学习成本**:3 个规则,20 分钟精通
1443
- 3. **强制一致性**:技术约束 > 人工自律
1444
- 4. **深色模式零成本**:自动推导 100+ 语义色
1445
- 5. **空间直觉布局**:废除 flexbox 概念
1446
- 6. **9 档精细响应**:3×3 分形断点系统
1712
+ 1. **意图压缩**:用较少、稳定的 token 表达尺寸、位置、颜色和交互意图
1713
+ 2. **有限与开放并存**:布局、档位和派生规则有限,主题名与项目色卡保持开放
1714
+ 3. **相对尺寸体系**:常规界面使用统一档位,随根字号和上下文自然缩放
1715
+ 4. **主题派生**:从基础种子与项目扩展色生成语义变量和派生档位
1716
+ 5. **坐标布局**:`ui-flex` 用空间坐标描述布局,再编译为兼容 CSS
1717
+ 6. **可控响应式**:用命名范围和固定覆盖顺序保持多端行为一致
1447
1718
 
1448
1719
  ### 适用场景
1449
1720
 
1450
- ✅ **强烈推荐**:
1451
- - 企业级应用(长期维护)
1721
+ **更适合**:
1722
+ - 规则明确、需要长期维护的产品界面
1452
1723
  - 设计系统严格的项目
1453
1724
  - 小团队深度定制
1454
- - 追求代码质量
1725
+ - 多页面或多人协作、需要保持统一表达的项目
1455
1726
 
1456
- ❌ **不推荐**:
1457
- - 开源项目(生态缺失)
1458
- - 需要像素级还原第三方设计
1459
- - 高度依赖 AI 编码
1727
+ **需要额外评估**:
1728
+ - 高度依赖第三方插件或既有社区类名约定的项目
1729
+ - 需要逐像素还原外部设计、且不接受项目级自定义样式的页面
1460
1730
 
1461
1731
  ### 快速回顾
1462
1732
 
@@ -1465,7 +1735,7 @@ const descClass = 'co-desc fs-sm my-ss'
1465
1735
  n-mm m-ss w-ll h-full r-sm fs-lm
1466
1736
 
1467
1737
  <!-- 颜色系统 -->
1468
- co-main bg-fore bk-line
1738
+ co-main bg-fore b-line
1469
1739
  co-desc co-risk bg-well
1470
1740
 
1471
1741
  <!-- 布局系统 -->
@@ -1473,7 +1743,7 @@ ui-flex="row xm"
1473
1743
  ui-grid="mob:1 pad:3 dpc:5 ml"
1474
1744
 
1475
1745
  <!-- 响应式 -->
1476
- mob:fs-sm pad:fs-mm dpc:fs-lm
1746
+ fs-lm pad:fs-mm mob:fs-sm
1477
1747
  ui-hide="<pad"
1478
1748
 
1479
1749
  <!-- 按钮系统 -->
@@ -1486,12 +1756,13 @@ ui-btn="@a main l :round"
1486
1756
 
1487
1757
  - **官网**: http://neatui.fekit.cn
1488
1758
  - **NPM**: https://www.npmjs.com/package/@neatui/css
1489
- - **当前版本**: v3.15.0
1759
+ - **当前版本**: v4.0.0
1490
1760
  - **作者**: xiaojunbo
1491
1761
  - **许可**: MIT
1492
1762
 
1493
1763
  ---
1494
1764
 
1495
- *本文档基于项目实战整理,覆盖 NeatUI 100% 的 API 和用法*
1765
+ *本文档是人工维护的使用说明;实际能力以 `@neatui/css` SCSS 源码和构建输出为准,
1766
+ 大版本语义变化以 `MIGRATION-4.0.md` 为准。*
1496
1767
 
1497
- *最后更新: 2025-11-29*
1768
+ *最后更新: 2026-07-28*