u
This commit is contained in:
1 parent
025d3232c4
commit
1d7d75eeba
98 files changed
+4144
-12063
No files matched your search
@@ -85,85 +85,13 @@ description: 组件库的字号、字重、行高与数字对齐约定,以及
|
||||
实测比文字中心高约 1.5px。按钮自身的 `align-items: center` 只能居中 `span` 这一层,
|
||||
治不了 `span` **内部**的基线对齐。
|
||||
|
||||
## 数值列:等宽数字
|
||||
|
||||
金额、数量、单号、序号这类列要加 `font-variant-numeric: tabular-nums`。
|
||||
|
||||
比例数字(默认)里每个字形宽度不同,`1` 比 `8` 窄,于是每换一行小数点与个位
|
||||
就在水平方向抖一下,整列看着参差不齐。等宽数字把 0–9 钉成同一宽度,数字按位对齐。
|
||||
|
||||
`G3Table` 已经在组件内部处理好,**业务方不需要自己加**:
|
||||
|
||||
```scss
|
||||
.g3-table__inner td.text-r {
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
```
|
||||
|
||||
判据是**右对齐**而不是「内容是数字」:库渲染 `td` 时读不到单元格的值,而本库约定里
|
||||
金额/数量/数值列一律用 `align: 'right'` 声明(见 `docs/examples/table/*.vue`)。
|
||||
|
||||
⚠️ 类名是 `text-r`,由 `stk-table-vue` 的 `getTDProps` 打上:
|
||||
|
||||
| `col.align` | 类名 |
|
||||
|---|---|
|
||||
| `'right'` | `text-r` |
|
||||
| `'center'` | `text-c` |
|
||||
| `'left'`(默认) | **不带类** |
|
||||
|
||||
左对齐的列没有任何类,所以 `td.text-r` 不会误伤普通文本列 —— 中文与拉丁文本来就
|
||||
不需要等宽数字,强行套上去反而会让正文字距松散。
|
||||
|
||||
## 表格边框:外框与格线的归属
|
||||
|
||||
`G3Table` 的外框(1px 描边 + 8px 圆角)由组件**自绘**在根节点上,格线仍走底座的
|
||||
`background-image` 渐变。这套组合下,有两条线容易画重或画丢,判据按下面的来。
|
||||
|
||||
**为什么格线不能改成真 `border`**:行内编辑器被钉死在 `var(--row-height)`(默认 30px),
|
||||
而 `td` 高度是按内容撑开的 —— 一旦 `td` 多出 1px 边线,内容盒只剩 29px 放不下 30px 的
|
||||
编辑器,整行被顶到 31px。行高是虚拟滚动 `translateY` 的计算基准,涨 1px 会一路累积成
|
||||
行错位。**背景渐变不参与盒模型**,所以格线只能走 `background-image`。
|
||||
|
||||
### 最右列竖线:按「是否贴住内右缘」判断
|
||||
|
||||
| 情形 | 处理 | 原因 |
|
||||
|---|---|---|
|
||||
| 右固定列(`.fixed-cell--right`) | 摘掉自身右线,交给外框 | 它贴住容器内右缘,自己的线会与外框叠成两条 |
|
||||
| 普通末列 | **保留**自身右线 | 列宽没铺满时它离内缘还有距离,摘了就「线凭空消失」 |
|
||||
|
||||
实测:右固定列的 `th`/`td` 右边缘都在内缘上(1242px)且自带 `270deg` 渐变;
|
||||
而列宽未铺满的表(容器内宽 1084px、列只到 800px)末列离内缘差 284px。
|
||||
|
||||
### 最后一行横线:按「行区是否铺满」判断
|
||||
|
||||
这是**唯一需要 JS 参与**的一处 —— 纯 CSS 表达不了「行区高度是否等于可用高度」。
|
||||
组件侧量出行区是否铺满,用 `.g3-table.is-body-fill` 把结论传进来:
|
||||
|
||||
| 行区状态 | 最后一行底边线 | 原因 |
|
||||
|---|---|---|
|
||||
| 铺满 | 交给外框 | 两者重合,否则叠成 2px |
|
||||
| 未铺满 | **该行自己画** | 外框内底边在它下面很远,摘了就缺线 |
|
||||
|
||||
⚠️ 判据**不能**是「是不是最后一行」(`tr:last-child`)。实测 180px 高的容器里只放
|
||||
1 行 30px 数据时,该行底边在 440px、外框内底边在 554px —— **差 114px 根本够不着**,
|
||||
此时摘线等于那唯一一条分隔线消失。这两个条件只有行区铺满时才等价。
|
||||
|
||||
### 空态
|
||||
|
||||
库的 `.stk-table-no-data.no-data-full` 会撑满剩余高度并**自带一条 `border-bottom`**,
|
||||
与外框的 `border-bottom` 落在同一条 y 上(实测都在 218px)→ 底部出现重叠线。
|
||||
组件已移除它自带的底边,**空态底边统一归外框**。
|
||||
|
||||
> 以上都由组件内部处理,业务方不需要写任何样式。若自定义了 `--g3-border-color`,
|
||||
> 外框与格线会一起跟随。
|
||||
|
||||
## 硬规定
|
||||
|
||||
| 项 | 取值 | 原因 |
|
||||
|---|---|---|
|
||||
| 字号 | `12 / 14 / 16`(偶数) | 避开 `13 / 15`:Windows 125% / 150% 缩放下奇数字号的亚像素误差会被放大 |
|
||||
| 控件高度 | `24 / 32 / 40`(8 的倍数) | 与栅格对齐,缩放后不易出现半像素 |
|
||||
| 数字列 | `tabular-nums` | 见上 |
|
||||
| 数字列 | `tabular-nums` | 等宽数字按位对齐,列不随数字宽度抖动 |
|
||||
|
||||
字号与控件高度已由 `@g3soft/tokens` 提供:`--g3-font-size-sm/-/lg`、
|
||||
`--g3-control-height-sm/-/lg`。
|
||||
@@ -195,7 +123,7 @@ description: 组件库的字号、字重、行高与数字对齐约定,以及
|
||||
## 自测
|
||||
|
||||
改动字体栈或行高后,**整行的基线与行高都会重算**,必须把所有小尺寸组件回归一遍
|
||||
(按钮三档尺寸、标签、分段控制器、分页器、表格行内编辑器)。
|
||||
(按钮三档尺寸、标签、分段控制器、分页器)。
|
||||
|
||||
- 定性:playground 里逐个尺寸目视比对
|
||||
- 定量:`FontMetrics` API 可读浏览器实际采用的度量,但**它给不出「这行实际用了哪款字体」**
|
||||
@@ -207,5 +135,3 @@ description: 组件库的字号、字重、行高与数字对齐约定,以及
|
||||
|
||||
- 跨 OS 像素级一致**做不到**,见页首结论。
|
||||
- 翻译成 `ar` 等语言时字体栈需另行调整(语言包目前只有 `zhCN` / `enUS`)。
|
||||
- 若业务方覆盖了 `--g3-font-family`,`G3Table` 内部硬编码的 `font-size` 不受影响,
|
||||
但行高与基线会变 —— 需重新回归。
|
||||
Reference in new issue
Block a user