@@ -8,7 +8,9 @@ description: >-
88 scripts/px-to-scale-px-in-component-scss.cjs on component SCSS in memory; profiles standard / large / elderly;
99 commit-backed rules e.g. never scale 0px. Use when implementing 多尺寸适配,
1010 等比适配, 大字版, 老年版, scale-px, viewport or native bridge scaling, or
11- editing component SCSS for resize.
11+ editing component SCSS for resize; SCSS: prefer calc($token + Npx) over
12+ #{} in calc, use outer calc() when mixing tokens that compile to
13+ var(--nutui-*).
1214---
1315
1416# NutUI React 等比适配
@@ -51,8 +53,9 @@ description: >-
5153
5254### 2.1 ` npm run build ` / ` npm run build:taro ` 时的 px → ` scale-px `
5355
54- - 与 ` package.json ` 中顺序一致:先跑 ** ` scripts/replace-css-var.js ` ** ,再 ** ` scripts/build.mjs ` ** 或 ** ` scripts/build-taro.mjs ` ** ;上述脚本在读取 ** ` src/packages/**/\*.scss ` (不含 demo)** 后,会经 ** ` scripts/px-to-scale-px-in-component-scss.cjs ` ** 在** 内存** 里把声明值中的裸 ** ` Npx ` ** 转为 ** ` scale-px(Npx) ` ** (规则见 §3),** 不写回\*\* 仓库文件 。
56+ - 与 ` package.json ` 中顺序一致:先跑 ** ` scripts/replace-css-var.js ` ** ,再 ** ` scripts/build.mjs ` ** 或 ** ` scripts/build-taro.mjs ` ** ;上述脚本在读取 ** ` src/packages/**/\*.scss ` (不含 demo)** 后,会经 ** ` scripts/px-to-scale-px-in-component-scss.cjs ` ** 在** 内存** 里把声明值中的裸 ** ` Npx ` ** 转为 ** ` scale-px(Npx) ` ** (规则见 §3),** 不写回\*\* 仓库里的组件 SCSS 。
5557- 源码里可继续手写 ** ` scale-px ` / ` scale-font-px ` / ` scale-icon-px ` ** ;构建不会重复嵌套 ` scale-px ` 。
58+ - 该脚本对 ** ` calc(...) ` 体内同时含 ` $ ` 与 ` / ` ** 的整段先做占位再替换裸 ` px ` ,避免 postcss-scss 把 ** ` calc($var / 2) ` ** 等拆坏;其它 ` calc ` 内的裸 ` Npx ` 仍会按规则转为 ` scale-px ` 。
5659
5760---
5861
@@ -76,6 +79,14 @@ description: >-
7679- 图标占位:** ` scale-icon-px ` ** 或已有 ` --nut-icon-* ` 。
7780- 保持与 ** 无障碍/大屏** 相关提交协同:同一文件改尺度时,勿回退 ` dialog ` 等对大字兼容的改动。
7881
82+ ### 3.4 ` calc() ` 、Sass 变量与 ` #{} ` (与 ` variables.scss ` / 主题 token 一致)
83+
84+ - ** 推荐** :在 ` calc() ` 里直接写 Sass 变量,如 ** ` calc($steps-vertical-head-icon-size + 1px) ` ** 、** ` calc($rate-item-margin / 2) ` ** ,而不是 ** ` calc(#{$steps-vertical-head-icon-size} + 1px) ` ** 。` #{} ` 只在需要把值** 硬插成无引号 CSS 片段** 、或要避免 Sass 对单位做提前合并时再考虑;普通设计 token 用 ** ` $var ` 作为 ` calc ` 的操作数** 即可。
85+ - ** 与 ` var(--nutui-*) ` 一起运算时** :许多 token 会展开为 ** ` var(--nutui-…, calc(Npx * var(--nut-scale-f, 1))) ` ** 。此时** 不要** 指望纯 Sass 括号在声明值里做「减法 + 固定 px」,例如
86+ ** ` margin: 0 ($switch-height - $switch-border-width + 3px) 0 7px ` **
87+ 会在编译结果里拼成 ** ` var(...)var(...) ` ** 一类** 缺少运算符** 的非法片段。应写成 ** ` margin: 0 calc($switch-height - $switch-border-width + 3px) 0 7px ` ** ,让整条长度在** 一个** CSS ` calc() ` 里由浏览器解析。
88+ - ** ` 100% ` 与长度相减** :用 ** ` calc(100% - Npx) ` ** 一层即可,避免出现 ** ` 100% - calc(...) ` ** 这类单位不合法的组合(历史上有过 postcss / 手工替换导致的损坏,以当前组件 SCSS 为准)。
89+
7990---
8091
8192## 4. 业务接入清单
@@ -91,6 +102,8 @@ description: >-
91102
92103- [ ] 新增 ** 0** 尺寸未误用 ` scale-px(0px) ` 。
93104- [ ] 字体/图标是否应走 ** ` scale-font-px ` / ` scale-icon-px ` ** 而非误用 ` scale-px ` 。
105+ - [ ] 含 ** ` $token ` 与裸 ` px ` 的混合运算** :若 token 会变成 ** ` var(--nutui-*) ` ** ,是否已用 ** ` calc($a - $b + Npx) ` ** ,而不是 ** ` ($a - $b + Npx) ` ** 写在 ` margin ` / ` width ` 等非纯编译期长度位置。
106+ - [ ] ` calc() ` 内对设计 token 是否优先 ** ` calc($var + 1px) ` ** ,避免无必要的 ** ` #{} ` ** 。
94107- [ ] TS 侧改 ` scale-f* ` 已同步考虑 ** Taro** 文件。
95108- [ ] 修改 ` formatScaleValue ` / 断点时,已通读 ** 视口与平板常量** 是否仍与文档、设计一致。
96109
0 commit comments