@neatui/css 5.1.10 → 5.1.11

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/CHANGELOG.md ADDED
@@ -0,0 +1,67 @@
1
+ # @neatui/css 更新记录
2
+
3
+ ## 5.1.11
4
+
5
+ ### 不兼容变更:Grid 对齐与间距
6
+
7
+ 从 5.1.10 及更早版本升级到 5.1.11 时,请按以下说明迁移 Grid 间距。
8
+
9
+ `ui-grid` 新增九宫格对齐,间距统一使用 Flex / Grid 共用的 `gap-*` class。旧的属性间距值不再生效,也不再通过 `--gap` 设置间距。
10
+
11
+ #### 基础迁移
12
+
13
+ ```html
14
+ <!-- 升级前 -->
15
+ <div ui-grid="3 mm">...</div>
16
+ <div ui-grid="3 lm">...</div>
17
+
18
+ <!-- 升级后:保持原来的间距和默认对齐 -->
19
+ <div ui-grid="3" class="gap-mm">...</div>
20
+ <div ui-grid="3" class="gap-lm">...</div>
21
+ ```
22
+
23
+ 所有旧间距档位 `no / xs / ss / sm / sl / ms / mm / ml / ls / lm / ll / xl` 都应从 `ui-grid` 移至 `gap-{档位}` class,数值保持不变,依次为 `0 / 1px / .25em / .5em / .75em / 1em / 1.5em / 2em / 2.5em / 3em / 4em / 5em`。
24
+
25
+ **特别注意 `lm`:** 它现在表示左侧垂直居中。保留旧 `lm` 不仅会丢失 `3em` 间距,还会改变对齐方式。没有设置对齐时子项仍默认横向撑满;显式设置九宫格对齐后,子项按内容宽度定位。
26
+
27
+ #### 响应式迁移
28
+
29
+ Grid 属性和 gap class 的断点方向不同,不能仅在旧值前添加 `gap-`:
30
+
31
+ | 配置 | 生效范围 |
32
+ | --- | --- |
33
+ | `ui-grid` 无前缀 / `mob:` | 所有宽度的基础值 |
34
+ | `ui-grid` 的 `pad:` | ≥ 800px |
35
+ | `ui-grid` 的 `dpc:` | ≥ 1280px |
36
+ | 无前缀 `gap-*` | 所有宽度的基础值 |
37
+ | `pad:gap-*` | ≤ 1279px,覆盖基础值 |
38
+ | `mob:gap-*` | ≤ 799px,覆盖基础值和平板值 |
39
+
40
+ ```html
41
+ <!-- 升级前:手机 .5em、平板 1.5em、桌面 3em -->
42
+ <div ui-grid="mob:1 pad:2 dpc:4 mob:sm pad:mm dpc:lm">...</div>
43
+
44
+ <!-- 升级后:列数不变,以桌面间距为基础值 -->
45
+ <div ui-grid="mob:1 pad:2 dpc:4" class="gap-lm pad:gap-mm mob:gap-sm">...</div>
46
+
47
+ <!-- 升级前:仅从平板起设置 1.5em 间距,手机默认无间距 -->
48
+ <div ui-grid="3 pad:mm">...</div>
49
+
50
+ <!-- 升级后 -->
51
+ <div ui-grid="3" class="gap-mm mob:gap-no">...</div>
52
+ ```
53
+
54
+ 不支持 `dpc:gap-*`。迁移时先确定手机、平板、桌面各自的最终间距,再分别写入 `mob:gap-*`、`pad:gap-*` 和基础 `gap-*`。
55
+
56
+ #### 自定义样式与按需引入
57
+
58
+ 原来通过 `style="--gap: ..."` 或样式表覆盖 `--gap` 的项目,应改用原生 `gap` 属性。`gap-*` 工具类带有 `!important`,使用自定义 `gap` 时请移除同一元素上的冲突工具类。
59
+
60
+ `gap-*` 定义在 `core/trim.scss`。全量引入 `neatui.scss` 无需调整;仅按需引入 `core/grid.scss` 的项目还需引入 `core/trim.scss`,或自行设置原生 `gap`。
61
+
62
+ #### 新增能力与升级检查
63
+
64
+ - Grid 支持 `lt / lm / lb / ct / cm / cb / rt / rm / rb`,以及 `mob:`、`pad:`、`dpc:` 对齐前缀。第一位控制单元格内水平位置,第二位控制子项及整组网格行的垂直位置;同层 `block` 优先让子项纵向拉伸。
65
+ - Flex 和 Grid 均可使用 `gap-*` 设置行列间距;间距不会增加容器外边距,也不会继承到嵌套容器。
66
+ - 检查项目内所有 `ui-grid`(包括 Vue 动态绑定、拼接字符串和封装组件)中的旧间距值,以及自定义 `--gap`。
67
+ - 在 799px、800px、1279px、1280px 附近检查列数、间距、对齐和嵌套布局,确认迁移前后的预期一致。
package/GUIDE.md CHANGED
@@ -656,7 +656,7 @@ y: 纵向对齐
656
656
  #### 语法格式
657
657
 
658
658
  ```html
659
- ui-grid="{breakpoint}:{columns} {gap}"
659
+ ui-grid="{breakpoint}:{columns} {alignment}" class="gap-{grade}"
660
660
 
661
661
  breakpoint:
662
662
  mob (移动端)
@@ -664,25 +664,38 @@ breakpoint:
664
664
  dpc (桌面)
665
665
 
666
666
  columns: 列数 (1-12)
667
- gap: 间距等级 (ss, sm, mm, ml, ll...)
667
+ alignment: 九宫格对齐 (lt, lm, lb, ct, cm, cb, rt, rm, rb)
668
+ grade: gap class 的间距等级 (no, xs, ss, sm, sl, ms, mm, ml, ls, lm, ll, xl)
668
669
  ```
669
670
 
670
671
  #### 基础用法
671
672
 
672
673
  ```html
673
674
  <!-- 固定 3 列,间距 medium-large -->
674
- <div ui-grid="3 ml">
675
+ <div ui-grid="3" class="gap-ml">
675
676
  <div>Item 1</div>
676
677
  <div>Item 2</div>
677
678
  <div>Item 3</div>
678
679
  </div>
679
680
  ```
680
681
 
682
+ #### 对齐
683
+
684
+ `ui-grid` 与 Flex 共用九宫格位置:`lt / lm / lb`、`ct / cm / cb`、`rt / rm / rb`。第一位 `l/c/r` 控制子项在各自单元格内的水平位置,第二位 `t/m/b` 控制垂直位置;容器有额外高度时,整组网格行也会顶部、居中或底部对齐。子项内部的文字或 Flex 内容仍由自身样式控制。
685
+
686
+ ```html
687
+ <div ui-grid="3 lm" class="gap-no">...</div>
688
+ <div ui-grid="3 cm" class="gap-mm">...</div>
689
+ <div ui-grid="3 mob:lt pad:cm dpc:rb" class="gap-mm mob:gap-sm">...</div>
690
+ ```
691
+
692
+ 同一响应层建议只选一个对齐值;同时包含 `block` 时,`block` 优先让子项纵向拉伸。子项未指定宽度时,默认横向撑满;显式使用九宫格对齐后,子项按其内容宽度定位,需要撑满单元格的子项可自行设置 `width: 100%`。
693
+
681
694
  #### 响应式网格
682
695
 
683
696
  ```html
684
697
  <!-- 移动端 1 列,平板 3 列,桌面 5 列 -->
685
- <div ui-grid="mob:1 pad:3 dpc:5 ml">
698
+ <div ui-grid="mob:1 pad:3 dpc:5" class="gap-ml">
686
699
  <div>Item 1</div>
687
700
  <div>Item 2</div>
688
701
  <div>Item 3</div>
@@ -695,7 +708,7 @@ gap: 间距等级 (ss, sm, mm, ml, ll...)
695
708
 
696
709
  **产品列表**
697
710
  ```html
698
- <ul ui-grid="mob:1 pad:2 dpc:4 mm" class="my-lm">
711
+ <ul ui-grid="mob:1 pad:2 dpc:4" class="my-lm gap-mm">
699
712
  <li class="bg-fore n-mm r-sm" v-for="product in products">
700
713
  <img :src="product.image" />
701
714
  <h3 class="co-main fs-ml">{{ product.name }}</h3>
@@ -1178,17 +1191,27 @@ mx-{size}-sun // 为孙级元素设置左右 margin,并归零每组首/末项
1178
1191
  Padding 的 `*-sub` 在 `[ui-row]` 容器上还会生成等量负 margin 补偿,让栅格子项的
1179
1192
  内边距不会扩大容器的外边界。
1180
1193
 
1181
- #### Grid gap
1194
+ #### Flex / Grid gap
1182
1195
 
1183
1196
  ```html
1184
- <div ui-grid="4 sm">...</div>
1185
- <div ui-grid="2 mob:sm pad:6 pad:mm dpc:12">...</div>
1197
+ <div ui-grid="4" class="gap-sm">...</div>
1198
+ <div ui-grid="2 pad:6 dpc:12" class="gap-mm mob:gap-sm">...</div>
1186
1199
  ```
1187
1200
 
1188
- `ui-grid` 的 `no..xl` 设置 `--gap`,刻度为
1201
+ Flex 与 Grid 共用 `gap-no` 至 `gap-xl` class,刻度为
1189
1202
  `0 / 1px / .25em / .5em / .75em / 1em / 1.5em / 2em / 2.5em / 3em / 4em / 5em`。
1190
- 同一属性还可以组合 `1..12` 列数和 `block`。4.x 的 `mob:` 是无媒体条件的历史别名;
1191
- `pad:` 从 800px、`dpc:` 从 1280px 生效。
1203
+
1204
+ ```html
1205
+ <div ui-flex="row lm" class="gap-mm">...</div>
1206
+ <div ui-grid="3 lm" class="gap-mm">...</div>
1207
+ <div ui-grid="3 cm" class="gap-lm pad:gap-mm mob:gap-sm">...</div>
1208
+ ```
1209
+
1210
+ Gap class 沿用其他 class 的响应式规则:默认作用于所有宽度,`pad:` 在最大 `1279px` 时覆盖,`mob:` 在最大 `799px` 时覆盖;不支持 `dpc:gap-*`。它设置原生 `gap`,同时控制行列间距,不增加容器外边距,也不会被嵌套容器继承。
1211
+
1212
+ `ui-grid` 属性仅组合 `1..12` 列数、九宫格对齐与 `block`。属性的响应规则保持原样:`mob:` 是无媒体条件的基础别名,`pad:` 从 `800px`、`dpc:` 从 `1280px` 生效。注意区分属性与 class 的响应规则。
1213
+
1214
+ **迁移旧写法:** `ui-grid="3 mm"` 改为 `ui-grid="3" class="gap-mm"`;原来表示 `3em` 间距的 `lm` 改为 `class="gap-lm"`。裸 `lm` 现在表示左侧垂直居中,不再设置间距。
1192
1215
 
1193
1216
  ### 尺寸类 (Sizing)
1194
1217
 
@@ -1536,7 +1559,7 @@ cursor-move
1536
1559
  <div class="doc my-lm">
1537
1560
  <h2 class="fs-xl bold co-main mb-ml">热门产品</h2>
1538
1561
 
1539
- <ul ui-grid="mob:1 pad:2 dpc:4 ml">
1562
+ <ul ui-grid="mob:1 pad:2 dpc:4" class="gap-ml">
1540
1563
  <li
1541
1564
  v-for="product in products"
1542
1565
  :key="product.id"
@@ -1788,7 +1811,7 @@ co-desc co-risk bg-well
1788
1811
 
1789
1812
  <!-- 布局系统 -->
1790
1813
  ui-flex="row xm"
1791
- ui-grid="mob:1 pad:3 dpc:5 ml"
1814
+ ui-grid="mob:1 pad:3 dpc:5" class="gap-ml"
1792
1815
 
1793
1816
  <!-- 响应式 -->
1794
1817
  fs-lm pad:fs-mm mob:fs-sm
package/README.md CHANGED
@@ -4,6 +4,12 @@
4
4
 
5
5
  NeatUI 约束型原子设计系统(SCSS)。正式项目用 SCSS 自定义 `$theme`;试用可用预编译 preview(默认 light / dark)。
6
6
 
7
+ ## 更新与升级
8
+
9
+ 升级前请查看 [更新记录与迁移说明](./CHANGELOG.md)。
10
+
11
+ 升级到 5.1.11 需要迁移旧间距语法:`ui-grid="3 mm"` 改为 `ui-grid="3" class="gap-mm"`;裸 `lm` 表示左侧垂直居中。响应式间距不能直接照搬前缀,请按更新记录中的示例迁移。
12
+
7
13
  ## 两种用法
8
14
 
9
15
  **试用(Preview,仅默认 light / dark)**
package/core/grid.scss CHANGED
@@ -2,13 +2,12 @@
2
2
 
3
3
  [ui-grid] {
4
4
  display: grid;
5
- gap: var(--gap);
5
+ gap: 0;
6
6
  justify-content: start;
7
7
  align-items: start;
8
8
  align-content: flex-start;
9
9
  grid-template-columns: repeat(var(--col), minmax(0, 1fr));
10
10
  --col: 4;
11
- --gap: 0;
12
11
  }
13
12
 
14
13
  @mixin _grid($med: '') {
@@ -50,42 +49,15 @@
50
49
  --col: 12;
51
50
  }
52
51
 
53
- // 间距
54
- [ui-grid~='#{$med}no'] {
55
- --gap: 0;
56
- }
57
- [ui-grid~='#{$med}xs'] {
58
- --gap: 1px;
59
- }
60
- [ui-grid~='#{$med}ss'] {
61
- --gap: 0.25em;
62
- }
63
- [ui-grid~='#{$med}sm'] {
64
- --gap: 0.5em;
65
- }
66
- [ui-grid~='#{$med}sl'] {
67
- --gap: 0.75em;
68
- }
69
- [ui-grid~='#{$med}ms'] {
70
- --gap: 1em;
71
- }
72
- [ui-grid~='#{$med}mm'] {
73
- --gap: 1.5em;
74
- }
75
- [ui-grid~='#{$med}ml'] {
76
- --gap: 2em;
77
- }
78
- [ui-grid~='#{$med}ls'] {
79
- --gap: 2.5em;
80
- }
81
- [ui-grid~='#{$med}lm'] {
82
- --gap: 3em;
83
- }
84
- [ui-grid~='#{$med}ll'] {
85
- --gap: 4em;
86
- }
87
- [ui-grid~='#{$med}xl'] {
88
- --gap: 5em;
52
+ // 与 Flex 共用九宫格位置;间距使用 gap-* class。
53
+ @each $x, $horizontal in (l: start, c: center, r: end) {
54
+ @each $y, $vertical in (t: start, m: center, b: end) {
55
+ [ui-grid~='#{$med}#{$x}#{$y}'] {
56
+ justify-items: $horizontal;
57
+ align-items: $vertical;
58
+ align-content: $vertical;
59
+ }
60
+ }
89
61
  }
90
62
 
91
63
  // 容器撑满
package/core/trim.scss CHANGED
@@ -219,6 +219,13 @@ $_radius-l: (
219
219
  @mixin trim($media: "") {
220
220
  $size: (no, xs, ss, sm, sl, ms, mm, ml, ls, lm, ll, xl);
221
221
 
222
+ // Flex / Grid 共用的原生间距,不依赖可继承的自定义变量。
223
+ @each $sz, $value in $_spacing-scale {
224
+ .#{$media}gap-#{$sz} {
225
+ gap: $value !important;
226
+ }
227
+ }
228
+
222
229
  // 栅格负边距补偿:总项 < 轴向 < 单边
223
230
  @each $sz, $value in $_spacing-scale {
224
231
  @include _row-spacing(