{tips || (
<>
-
+
{locale.shortpassword.tips}
>
)}
diff --git a/src/packages/shortpassword/shortpassword.tsx b/src/packages/shortpassword/shortpassword.tsx
index 4e7cc02da5..0873a87ace 100644
--- a/src/packages/shortpassword/shortpassword.tsx
+++ b/src/packages/shortpassword/shortpassword.tsx
@@ -141,7 +141,7 @@ export const InternalShortPassword: ForwardRefRenderFunction<
{tips || (
<>
-
+
{locale.shortpassword.tips}
>
)}
diff --git a/src/packages/tabs/tabs.scss b/src/packages/tabs/tabs.scss
index f6bc579c90..a98beb4e36 100644
--- a/src/packages/tabs/tabs.scss
+++ b/src/packages/tabs/tabs.scss
@@ -99,6 +99,11 @@
}
}
+ &-smile-icon {
+ width: 40px;
+ height: 20px;
+ }
+
&-active {
.nut-icon {
color: $tabs-titles-item-active-color;
diff --git a/src/packages/tabs/tabs.taro.tsx b/src/packages/tabs/tabs.taro.tsx
index d5edb93b94..f30e38754d 100644
--- a/src/packages/tabs/tabs.taro.tsx
+++ b/src/packages/tabs/tabs.taro.tsx
@@ -282,7 +282,10 @@ export const Tabs: FunctionComponent
> & {
// @ts-ignore
ariaHidden
>
-
+
)}
> & {
className={`${classPrefix}-titles-item-smile`}
aria-hidden="true"
>
-
+
)}
Date: Tue, 12 May 2026 20:09:50 +0800
Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=E8=A7=A3=E5=86=B3build=E9=AA=8C?=
=?UTF-8?q?=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/packages/configprovider/types.ts | 35 ++++++++++++-
src/styles/variables-daojia.scss | 20 +++++++-
src/styles/variables-jmapp.scss | 77 ++++++++++++++++++++++++++--
src/styles/variables-jrkf.scss | 77 ++++++++++++++++++++++++++--
4 files changed, 198 insertions(+), 11 deletions(-)
diff --git a/src/packages/configprovider/types.ts b/src/packages/configprovider/types.ts
index 3abbf27a8a..8709501775 100644
--- a/src/packages/configprovider/types.ts
+++ b/src/packages/configprovider/types.ts
@@ -54,18 +54,34 @@ export type NutCSSVariables =
| 'nutuiFontSizeXxs'
| 'nutuiFontSizeXs'
| 'nutuiFontSizeS'
+ | 'nutuiFontSizeM'
| 'nutuiFontSizeBase'
| 'nutuiFontSizeL'
+ | 'nutuiFontSizeMd'
| 'nutuiFontSizeIcon'
| 'nutuiFontSizeXl'
+ | 'nutuiFontSize2Xl'
| 'nutuiFontSizeXxl'
| 'nutuiFontSize10'
| 'nutuiFontSize11'
+ | 'nutuiLineHeightXxxs'
+ | 'nutuiLineHeightXxs'
+ | 'nutuiLineHeightXs'
+ | 'nutuiLineHeightS'
+ | 'nutuiLineHeightM'
+ | 'nutuiLineHeightBase'
+ | 'nutuiLineHeightL'
+ | 'nutuiLineHeightMd'
+ | 'nutuiLineHeightIcon'
+ | 'nutuiLineHeightXl'
+ | 'nutuiLineHeight2Xl'
+ | 'nutuiLineHeightXxl'
+ | 'nutuiLineHeightXxxl'
+ | 'nutuiLineHeightXxxxl'
| 'nutuiFontWeightLight'
| 'nutuiFontWeight'
| 'nutuiFontWeightMedium'
| 'nutuiFontWeightBold'
- | 'nutuiLineHeightBase'
| 'nutuiSpacingXxxs'
| 'nutuiSpacingXxs'
| 'nutuiSpacingXs'
@@ -166,6 +182,15 @@ export type NutCSSVariables =
| 'nutuiDividerSideWidth'
| 'nutuiDividerVerticalHeight'
| 'nutuiDividerVerticalMargin'
+ | 'nutuiIconSize6'
+ | 'nutuiIconSize8'
+ | 'nutuiIconSize10'
+ | 'nutuiIconSize11'
+ | 'nutuiIconSize12'
+ | 'nutuiIconSize16'
+ | 'nutuiIconSize18'
+ | 'nutuiIconSize20'
+ | 'nutuiIconSize22'
| 'nutuiIconHeight'
| 'nutuiIconWidth'
| 'nutuiIconLineHeight'
@@ -287,6 +312,12 @@ export type NutCSSVariables =
| 'nutuiPriceSymbolSmallSize'
| 'nutuiPriceIntegerSmallSize'
| 'nutuiPriceDecimalSmallSize'
+ | 'nutuiPriceRootLineHeight'
+ | 'nutuiPriceMinorLineHeight'
+ | 'nutuiPriceIntegerXlargeLineHeight'
+ | 'nutuiPriceIntegerLargeLineHeight'
+ | 'nutuiPriceIntegerNormalLineHeight'
+ | 'nutuiPriceIntegerSmallLineHeight'
| 'nutuiAvatarSquare'
| 'nutuiAvatarLargeWidth'
| 'nutuiAvatarLargeHeight'
@@ -378,6 +409,8 @@ export type NutCSSVariables =
| 'nutuiRateIconSize'
| 'nutuiRateFontColor'
| 'nutuiRateFontSize'
+ | 'nutuiRateFontSizeLarge'
+ | 'nutuiRateFontSizeSmall'
| 'nutuiTabbarHeight'
| 'nutuiTabbarActiveColor'
| 'nutuiTabbarInactiveColor'
diff --git a/src/styles/variables-daojia.scss b/src/styles/variables-daojia.scss
index 9a9e62e432..8417bccaca 100644
--- a/src/styles/variables-daojia.scss
+++ b/src/styles/variables-daojia.scss
@@ -151,10 +151,13 @@ $font-size-xxxs: var(--nutui-font-size-xxxs, 9px) !default;
$font-size-xxs: var(--nutui-font-size-xxs, 10px) !default;
$font-size-xs: var(--nutui-font-size-xs, 11px) !default;
$font-size-s: var(--nutui-font-size-s, 12px) !default;
+$font-size-m: var(--nutui-font-size-m, 13px) !default;
$font-size-base: var(--nutui-font-size-base, 14px) !default;
$font-size-l: var(--nutui-font-size-l, 15px) !default;
+$font-size-md: var(--nutui-font-size-md, 16px) !default;
$font-size-icon: var(--nutui-font-size-icon, 16px) !default;
$font-size-xl: var(--nutui-font-size-xl, 18px) !default;
+$font-size-2xl: var(--nutui-font-size-2xl, 20px) !default;
$font-size-xxl: var(--nutui-font-size-xxl, 24px) !default;
$font-size-xxxl: var(--nutui-font-size-10, 26px) !default;
$font-size-xxxxl: var(--nutui-font-size-11, 28px) !default;
@@ -165,8 +168,21 @@ $font-weight: var(--nutui-font-weight, 400) !default;
$font-weight-medium: var(--nutui-font-weight-medium, 500) !default;
$font-weight-bold: var(--nutui-font-weight-bold, 600) !default;
-// 行高
-$line-height-base: var(--nutui-line-height-base, 1.5) !default;
+// 行高(与同档字号等值;不经 scale)
+$line-height-xxxs: var(--nutui-line-height-xxxs, $font-size-xxxs) !default;
+$line-height-xxs: var(--nutui-line-height-xxs, $font-size-xxs) !default;
+$line-height-xs: var(--nutui-line-height-xs, $font-size-xs) !default;
+$line-height-s: var(--nutui-line-height-s, $font-size-s) !default;
+$line-height-m: var(--nutui-line-height-m, $font-size-m) !default;
+$line-height-base: var(--nutui-line-height-base, $font-size-base) !default;
+$line-height-l: var(--nutui-line-height-l, $font-size-l) !default;
+$line-height-md: var(--nutui-line-height-md, $font-size-md) !default;
+$line-height-icon: var(--nutui-line-height-icon, $font-size-icon) !default;
+$line-height-xl: var(--nutui-line-height-xl, $font-size-xl) !default;
+$line-height-2xl: var(--nutui-line-height-2xl, $font-size-2xl) !default;
+$line-height-xxl: var(--nutui-line-height-xxl, $font-size-xxl) !default;
+$line-height-xxxl: var(--nutui-line-height-xxxl, $font-size-xxxl) !default;
+$line-height-xxxxl: var(--nutui-line-height-xxxxl, $font-size-xxxxl) !default;
// 间距 space
$spacing-xxxs: var(--nutui-spacing-xxxs, 2px) !default;
diff --git a/src/styles/variables-jmapp.scss b/src/styles/variables-jmapp.scss
index cc8e386609..771ad1c2af 100644
--- a/src/styles/variables-jmapp.scss
+++ b/src/styles/variables-jmapp.scss
@@ -106,9 +106,6 @@ $font-weight: var(--nutui-font-weight);
$font-weight-medium: var(--nutui-font-weight-medium, 500) !default;
$font-weight-bold: var(--nutui-font-weight-bold);
-// 行高
-$line-height-base: var(--nutui-line-height) !default;
-
// 圆角 corners
$radius-xxs: var(
--nutui-radius-xxs
@@ -169,16 +166,54 @@ $font-family:
SimSun,
sans-serif !default;
-// Font
+// Font(token 与 variables.scss 对齐;回落为 px / 设计 token,不经 scale 函数)
$font-size-xxxs: var(--nutui-font-size-xxxs, 9px) !default;
$font-size-xxs: $font-text-mini !default;
$font-size-xs: $font-text-xs !default;
$font-size-s: $font-text-small !default;
+$font-size-m: var(--nutui-font-size-m, $font-text-small) !default;
$font-size-base: $font-text !default;
$font-size-l: $font-text-large !default;
+$font-size-md: var(--nutui-font-size-md, 16px) !default;
+$font-size-icon: var(--nutui-font-size-icon, 16px) !default;
$font-size-xl: $font-h2 !default;
+$font-size-2xl: var(--nutui-font-size-2xl, 20px) !default;
$font-size-xxl: var(--nutui-font-size-8) !default;
$font-size-xxxl: var(--nutui-font-size-10) !default;
+$font-size-xxxxl: var(--nutui-font-size-11, 28px) !default;
+
+// 行高(与同档字号等值;不经 scale)
+$line-height-xxxs: var(--nutui-line-height-xxxs, $font-size-xxxs) !default;
+$line-height-xxs: var(--nutui-line-height-xxs, $font-size-xxs) !default;
+$line-height-xs: var(--nutui-line-height-xs, $font-size-xs) !default;
+$line-height-s: var(--nutui-line-height-s, $font-size-s) !default;
+$line-height-m: var(--nutui-line-height-m, $font-size-m) !default;
+$line-height-base: var(
+ --nutui-line-height-base,
+ var(--nutui-line-height, $font-size-base)
+) !default;
+$line-height-l: var(--nutui-line-height-l, $font-size-l) !default;
+$line-height-md: var(--nutui-line-height-md, $font-size-md) !default;
+$line-height-icon: var(--nutui-line-height-icon, $font-size-icon) !default;
+$line-height-xl: var(--nutui-line-height-xl, $font-size-xl) !default;
+$line-height-2xl: var(--nutui-line-height-2xl, $font-size-2xl) !default;
+$line-height-xxl: var(--nutui-line-height-xxl, $font-size-xxl) !default;
+$line-height-xxxl: var(--nutui-line-height-xxxl, $font-size-xxxl) !default;
+$line-height-xxxxl: var(--nutui-line-height-xxxxl, $font-size-xxxxl) !default;
+
+// icon 尺寸(与 variables.scss 对齐;回落为 px,不经 scale-icon-px)
+$icon-size-6: var(--nutui-icon-size-6, 6px) !default;
+$icon-size-8: var(--nutui-icon-size-8, 8px) !default;
+$icon-size-10: var(--nutui-icon-size-10, 10px) !default;
+$icon-size-11: var(--nutui-icon-size-11, 11px) !default;
+$icon-size-12: var(--nutui-icon-size-12, 12px) !default;
+$icon-size-16: var(--nutui-icon-size-16, 16px) !default;
+$icon-size-18: var(--nutui-icon-size-18, 18px) !default;
+$icon-size-20: var(--nutui-icon-size-20, 20px) !default;
+$icon-size-22: var(--nutui-icon-size-22, 22px) !default;
+$icon-height: var(--nutui-icon-height, $icon-size-20) !default;
+$icon-width: var(--nutui-icon-width, $icon-size-20) !default;
+$icon-line-height: var(--nutui-icon-line-height, $icon-size-20) !default;
// 间距 space
$spacing-xxxs: var(--nutui-spacing-xxxs) !default; // 多用于文本与图标之间的间距
@@ -913,6 +948,32 @@ $price-symbol-small-size: var(--nutui-price-symbol-small-size, 10px) !default;
$price-integer-small-size: var(--nutui-price-integer-small-size, 12px) !default;
$price-decimal-small-size: var(--nutui-price-decimal-small-size, 10px) !default;
+// price 行高(与 variables.scss 对齐)
+$price-root-line-height: var(
+ --nutui-price-root-line-height,
+ $line-height-l
+) !default;
+$price-minor-line-height: var(
+ --nutui-price-minor-line-height,
+ $line-height-s
+) !default;
+$price-integer-xlarge-line-height: var(
+ --nutui-price-integer-xlarge-line-height,
+ $line-height-xxl
+) !default;
+$price-integer-large-line-height: var(
+ --nutui-price-integer-large-line-height,
+ $line-height-xl
+) !default;
+$price-integer-normal-line-height: var(
+ --nutui-price-integer-normal-line-height,
+ $line-height-md
+) !default;
+$price-integer-small-line-height: var(
+ --nutui-price-integer-small-line-height,
+ $line-height-s
+) !default;
+
//avatar(✅)
$avatar-square: var(--nutui-avatar-square, $radius-base) !default;
$avatar-large-width: var(--nutui-avatar-large-width, 48px) !default;
@@ -1221,6 +1282,14 @@ $rate-icon-inactive-color: var(
$rate-icon-size: var(--nutui-rate-icon-size, 12px) !default;
$rate-font-color: var(--nutui-rate-font-color, $color-primary-icon) !default;
$rate-font-size: var(--nutui-rate-font-size, 12px) !default;
+$rate-font-size-large: var(
+ --nutui-rate-font-size-large,
+ calc(#{$rate-font-size} + 6px)
+) !default;
+$rate-font-size-small: var(
+ --nutui-rate-font-size-small,
+ calc(#{$rate-font-size} - 2px)
+) !default;
// tabbar(✅)
$tabbar-height: var(--nutui-tabbar-height, 50px) !default;
diff --git a/src/styles/variables-jrkf.scss b/src/styles/variables-jrkf.scss
index 8c51b238a3..5b001961d3 100644
--- a/src/styles/variables-jrkf.scss
+++ b/src/styles/variables-jrkf.scss
@@ -129,9 +129,6 @@ $font-weight: var(--nutui-font-weight) !default;
$font-weight-medium: var(--nutui-font-weight-medium, 500) !default;
$font-weight-bold: var(--nutui-font-weight-bold) !default;
-// 行高
-$line-height-base: var(--nutui-line-height) !default;
-
// 间距 space
$spacing-xxxs: var(--nutui-spacing-xxxs, 2px) !default;
$spacing-xxs: var(--nutui-spacing-xxs) !default; // 多用于文本与图标之间的间距
@@ -205,16 +202,54 @@ $font-family:
SimSun,
sans-serif !default;
-// Font
+// Font(token 与 variables.scss 对齐;回落为 px / 设计 token,不经 scale 函数)
$font-size-xxxs: var(--nutui-font-size-xxxs, 9px) !default;
$font-size-xxs: $font-text-mini !default;
$font-size-xs: $font-text-xs !default;
$font-size-s: $font-text-small !default;
+$font-size-m: var(--nutui-font-size-m, $font-text-small) !default;
$font-size-base: $font-text !default;
$font-size-l: $font-text-large !default;
+$font-size-md: var(--nutui-font-size-md, 16px) !default;
+$font-size-icon: var(--nutui-font-size-icon, 16px) !default;
$font-size-xl: $font-h2 !default;
+$font-size-2xl: var(--nutui-font-size-2xl, 20px) !default;
$font-size-xxl: var(--nutui-font-size-8) !default;
$font-size-xxxl: var(--nutui-font-size-10) !default;
+$font-size-xxxxl: var(--nutui-font-size-11, 28px) !default;
+
+// 行高(与同档字号等值;不经 scale)
+$line-height-xxxs: var(--nutui-line-height-xxxs, $font-size-xxxs) !default;
+$line-height-xxs: var(--nutui-line-height-xxs, $font-size-xxs) !default;
+$line-height-xs: var(--nutui-line-height-xs, $font-size-xs) !default;
+$line-height-s: var(--nutui-line-height-s, $font-size-s) !default;
+$line-height-m: var(--nutui-line-height-m, $font-size-m) !default;
+$line-height-base: var(
+ --nutui-line-height-base,
+ var(--nutui-line-height, $font-size-base)
+) !default;
+$line-height-l: var(--nutui-line-height-l, $font-size-l) !default;
+$line-height-md: var(--nutui-line-height-md, $font-size-md) !default;
+$line-height-icon: var(--nutui-line-height-icon, $font-size-icon) !default;
+$line-height-xl: var(--nutui-line-height-xl, $font-size-xl) !default;
+$line-height-2xl: var(--nutui-line-height-2xl, $font-size-2xl) !default;
+$line-height-xxl: var(--nutui-line-height-xxl, $font-size-xxl) !default;
+$line-height-xxxl: var(--nutui-line-height-xxxl, $font-size-xxxl) !default;
+$line-height-xxxxl: var(--nutui-line-height-xxxxl, $font-size-xxxxl) !default;
+
+// icon 尺寸(与 variables.scss 对齐;回落为 px,不经 scale-icon-px)
+$icon-size-6: var(--nutui-icon-size-6, 6px) !default;
+$icon-size-8: var(--nutui-icon-size-8, 8px) !default;
+$icon-size-10: var(--nutui-icon-size-10, 10px) !default;
+$icon-size-11: var(--nutui-icon-size-11, 11px) !default;
+$icon-size-12: var(--nutui-icon-size-12, 12px) !default;
+$icon-size-16: var(--nutui-icon-size-16, 16px) !default;
+$icon-size-18: var(--nutui-icon-size-18, 18px) !default;
+$icon-size-20: var(--nutui-icon-size-20, 20px) !default;
+$icon-size-22: var(--nutui-icon-size-22, 22px) !default;
+$icon-height: var(--nutui-icon-height, $icon-size-20) !default;
+$icon-width: var(--nutui-icon-width, $icon-size-20) !default;
+$icon-line-height: var(--nutui-icon-line-height, $icon-size-20) !default;
$space-mini: $spacing-xs !default;
$space-large: $spacing-l !default;
@@ -1002,6 +1037,32 @@ $price-symbol-small-size: var(--nutui-price-symbol-small-size, 10px) !default;
$price-integer-small-size: var(--nutui-price-integer-small-size, 12px) !default;
$price-decimal-small-size: var(--nutui-price-decimal-small-size, 10px) !default;
+// price 行高(与 variables.scss 对齐)
+$price-root-line-height: var(
+ --nutui-price-root-line-height,
+ $line-height-l
+) !default;
+$price-minor-line-height: var(
+ --nutui-price-minor-line-height,
+ $line-height-s
+) !default;
+$price-integer-xlarge-line-height: var(
+ --nutui-price-integer-xlarge-line-height,
+ $line-height-xxl
+) !default;
+$price-integer-large-line-height: var(
+ --nutui-price-integer-large-line-height,
+ $line-height-xl
+) !default;
+$price-integer-normal-line-height: var(
+ --nutui-price-integer-normal-line-height,
+ $line-height-md
+) !default;
+$price-integer-small-line-height: var(
+ --nutui-price-integer-small-line-height,
+ $line-height-s
+) !default;
+
//avatar(✅)
$avatar-square: var(--nutui-avatar-square, $radius-base) !default;
$avatar-large-width: var(--nutui-avatar-large-width, 48px) !default;
@@ -1320,6 +1381,14 @@ $notify-background-color: var(--nutui-notify-background-color, $white) !default;
$rate-icon-size: var(--nutui-rate-icon-size, 12px) !default;
$rate-font-color: var(--nutui-rate-font-color, $color-primary-icon) !default;
$rate-font-size: var(--nutui-rate-font-size, 12px) !default;
+$rate-font-size-large: var(
+ --nutui-rate-font-size-large,
+ calc(#{$rate-font-size} + 6px)
+) !default;
+$rate-font-size-small: var(
+ --nutui-rate-font-size-small,
+ calc(#{$rate-font-size} - 2px)
+) !default;
$rate-item-margin: var(--nutui-rate-item-margin, 14px) !default;
$rate-icon-color: var(--nutui-rate-icon-color, $color-primary) !default;
$rate-icon-inactive-color: var(
From adac5376e33d0e0df289c3f95f5bf53ce3db416a Mon Sep 17 00:00:00 2001
From: songchenglin3 <353833373@qq.com>
Date: Tue, 12 May 2026 20:26:07 +0800
Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=E6=9C=AC=E5=9C=B0=E6=A0=A1?=
=?UTF-8?q?=E9=AA=8C=E8=84=9A=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../skills/nutui-build-local-verify/SKILL.md | 62 ++++++++
.../scripts/verify-scale-generation.mjs | 132 ++++++++++++++++++
package.json | 4 +-
3 files changed, 197 insertions(+), 1 deletion(-)
create mode 100644 .cursor/skills/nutui-build-local-verify/SKILL.md
create mode 100644 .cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs
diff --git a/.cursor/skills/nutui-build-local-verify/SKILL.md b/.cursor/skills/nutui-build-local-verify/SKILL.md
new file mode 100644
index 0000000000..3bf8c38ffa
--- /dev/null
+++ b/.cursor/skills/nutui-build-local-verify/SKILL.md
@@ -0,0 +1,62 @@
+---
+name: nutui-build-local-verify
+description: NutUI 比例缩放本地验证——默认就地覆盖:每个组件 SCSS 写回 src/packages 下同一路径(如 actionsheet/actionsheet.scss→同文件);--mirror 才写到 scale-verify/ 对照。不写 build。
+disable-model-invocation: true
+---
+
+# NutUI Build Local Verify
+
+## 在做什么
+
+**只做一步**:用 `scripts/px-to-scale-px-in-component-scss.cjs` 把组件 SCSS 里裸 `px` 转成 `scale-px` 等,并把结果写回磁盘。
+
+- **默认(就地覆盖)**:对每个匹配的 `.scss`,**读、写都是同一路径**——相对 `src/packages` 的路径不变。例如 `src/packages/actionsheet/actionsheet.scss` 转换后仍写回该文件,不会改到别的目录或改名。
+- **`--mirror`**:不写源码;结果写到 **`scale-verify/<与 src/packages 相同的相对路径>`**(例如 `scale-verify/actionsheet/actionsheet.scss`),便于 diff。
+
+之后是否再跑 `pnpm run build`、是否用别的工具核对,由你自行决定;本 skill **不要求** build。
+
+## 覆盖原 SCSS(推荐)
+
+在 **nutui-react 仓库根目录** 执行。**务必先 commit / stash**,用完 `git restore src/packages` 或 `git checkout -- src/packages` 恢复。
+
+```bash
+pnpm run verify-scale
+```
+
+等价:
+
+```bash
+node .cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs
+```
+
+(`--in-place` / `-i` 与默认等价。)
+
+## 报告
+
+路径:**`scale-verify/report.json`**。覆盖模式下看 `overwriteSource === true`、`changedFileCount`、`changedFiles`。
+
+## 其它命令
+
+```bash
+# 删除仓库根下 scale-verify/ 整目录(含 report;不还原已覆盖的 src/packages)
+node .cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs --clean
+```
+
+**可选**(只镜像、不覆盖源码):
+
+```bash
+pnpm run verify-scale:mirror
+```
+
+`--mirror` 与 `--in-place` 不能同时使用。
+
+## 核对清单
+
+- [ ] 覆盖前已 git 可回滚
+- [ ] `changedFiles` 抽样无 `scale-px(0px)`、无重复嵌套 `scale-px`
+- [ ] `font-size` / `font` 未被误改(转换器会跳过)
+
+## 给用户的一句话结论
+
+- 脚本跑完 + `changedFileCount` + 列 2~3 个 `changedFiles`
+- **覆盖的是真实源码**时,验证完用 **git 恢复**
diff --git a/.cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs b/.cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs
new file mode 100644
index 0000000000..92dc337a82
--- /dev/null
+++ b/.cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs
@@ -0,0 +1,132 @@
+#!/usr/bin/env node
+/**
+ * 默认:每个文件读自且写回 src/packages 下同一路径(如 …/actionsheet/actionsheet.scss)。
+ * 不包含 build;自行 git diff / 恢复即可。
+ */
+import fs from 'node:fs/promises'
+import path from 'path'
+import { createRequire } from 'node:module'
+
+const require = createRequire(import.meta.url)
+const transform = require(path.resolve(process.cwd(), 'scripts/px-to-scale-px-in-component-scss.cjs'))
+
+const repoRoot = process.cwd()
+const packagesRoot = path.resolve(repoRoot, 'src/packages')
+const outRoot = path.resolve(repoRoot, 'scale-verify')
+const reportPath = path.resolve(outRoot, 'report.json')
+
+const argv = new Set(process.argv.slice(2))
+const shouldClean = argv.has('--clean')
+const mirrorMode = argv.has('--mirror')
+/** 默认覆盖 src/packages 原 .scss;传 --mirror 则只写 scale-verify/ */
+const inPlace = !mirrorMode
+
+if (mirrorMode && (argv.has('--in-place') || argv.has('-i'))) {
+ console.error('[scale-verify] 不能同时使用 --mirror 与 --in-place / -i')
+ process.exit(1)
+}
+
+function isScssFile(name) {
+ return name.endsWith('.scss')
+}
+
+function shouldSkip(relPath) {
+ const p = relPath.replaceAll('\\', '/')
+ if (p.includes('/demos/')) return true
+ if (p.includes('/__test__/')) return true
+ if (p.includes('/__tests__/')) return true
+ if (p.includes('/__snapshots__/')) return true
+ if (p.startsWith('.scale-verify/')) return true
+ return false
+}
+
+async function walkScssFiles(dir, base = dir, list = []) {
+ const entries = await fs.readdir(dir, { withFileTypes: true })
+ for (const entry of entries) {
+ const abs = path.resolve(dir, entry.name)
+ const rel = path.relative(base, abs)
+ if (entry.isDirectory()) {
+ await walkScssFiles(abs, base, list)
+ continue
+ }
+ if (!entry.isFile() || !isScssFile(entry.name)) continue
+ if (shouldSkip(rel)) continue
+ list.push(abs)
+ }
+ return list
+}
+
+async function ensureReportDir() {
+ await fs.mkdir(outRoot, { recursive: true })
+}
+
+async function prepareOutputLayout() {
+ if (shouldClean) {
+ await fs.rm(outRoot, { recursive: true, force: true })
+ console.log('[scale-verify] cleaned:', path.relative(repoRoot, outRoot))
+ return
+ }
+
+ await fs.rm(outRoot, { recursive: true, force: true })
+ await fs.mkdir(outRoot, { recursive: true })
+}
+
+async function main() {
+ await prepareOutputLayout()
+ if (shouldClean) {
+ return
+ }
+
+ const files = await walkScssFiles(packagesRoot)
+ files.sort()
+
+ const changed = []
+ for (const absFile of files) {
+ const rel = path.relative(packagesRoot, absFile)
+ const source = await fs.readFile(absFile, 'utf8')
+ const transformed = transform(source)
+ if (source === transformed) continue
+
+ const targetFile = inPlace ? absFile : path.resolve(outRoot, rel)
+ if (!inPlace) {
+ await fs.mkdir(path.dirname(targetFile), { recursive: true })
+ }
+ await fs.writeFile(targetFile, transformed, 'utf8')
+ changed.push(rel.replaceAll('\\', '/'))
+ }
+
+ await ensureReportDir()
+ const scssWriteRoot = inPlace
+ ? path.relative(repoRoot, packagesRoot).replaceAll('\\', '/')
+ : path.relative(repoRoot, outRoot).replaceAll('\\', '/')
+
+ const report = {
+ generatedAt: new Date().toISOString(),
+ mode: inPlace ? 'in-place' : 'mirror',
+ overwriteSource: inPlace,
+ /** 本次写入的 SCSS 根路径:原地为 src/packages,镜像为仓库根下 scale-verify */
+ scssWriteRoot,
+ /** 镜像模式下的实验目录;原地模式为 null */
+ outDir: inPlace ? null : path.relative(repoRoot, outRoot).replaceAll('\\', '/'),
+ reportPath: path.relative(repoRoot, reportPath).replaceAll('\\', '/'),
+ totalScssFiles: files.length,
+ changedFileCount: changed.length,
+ changedFiles: changed,
+ }
+ await fs.writeFile(reportPath, `${JSON.stringify(report, null, 2)}\n`, 'utf8')
+
+ console.log('[scale-verify] mode:', report.mode)
+ if (!inPlace) {
+ console.log('[scale-verify] outDir:', report.outDir)
+ } else {
+ console.log('[scale-verify] wrote into:', path.relative(repoRoot, packagesRoot))
+ }
+ console.log('[scale-verify] totalScssFiles:', report.totalScssFiles)
+ console.log('[scale-verify] changedFileCount:', report.changedFileCount)
+ console.log('[scale-verify] report:', path.relative(repoRoot, reportPath))
+}
+
+main().catch((err) => {
+ console.error('[scale-verify] failed:', err)
+ process.exitCode = 1
+})
diff --git a/package.json b/package.json
index def1792648..823e6fc138 100644
--- a/package.json
+++ b/package.json
@@ -101,7 +101,9 @@
"e2e:run:taro": "start-server-and-test dev:taro:h5 http://localhost:10086 cypress:run:taro",
"e2e:open:taro": "start-server-and-test dev:taro:h5 http://localhost:10086 cypress:open:taro",
"update:taro:entry": "node ./scripts/harmony/update-taro-entry",
- "upgradeTaro": "pnpm --dir ./packages/nutui-taro-demo upgradeTaro"
+ "upgradeTaro": "pnpm --dir ./packages/nutui-taro-demo upgradeTaro",
+ "verify-scale": "node .cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs",
+ "verify-scale:mirror": "node .cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs --mirror"
},
"lint-staged": {
"*.{scss,md}": "prettier --write",
From 02c5b050afd7d7cf8718bb851e9a2aaa8b938388 Mon Sep 17 00:00:00 2001
From: songchenglin3 <353833373@qq.com>
Date: Tue, 12 May 2026 20:45:53 +0800
Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=E6=9C=AC=E5=9C=B0=E8=84=9A?=
=?UTF-8?q?=E6=9C=AC=E9=AA=8C=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.cursor/skills/nutui-build-local-verify/SKILL.md | 12 +++++++++++-
.../scripts/verify-scale-generation.mjs | 8 ++++++--
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/.cursor/skills/nutui-build-local-verify/SKILL.md b/.cursor/skills/nutui-build-local-verify/SKILL.md
index 3bf8c38ffa..d498ff7afc 100644
--- a/.cursor/skills/nutui-build-local-verify/SKILL.md
+++ b/.cursor/skills/nutui-build-local-verify/SKILL.md
@@ -1,6 +1,6 @@
---
name: nutui-build-local-verify
-description: NutUI 比例缩放本地验证——默认就地覆盖:每个组件 SCSS 写回 src/packages 下同一路径(如 actionsheet/actionsheet.scss→同文件);--mirror 才写到 scale-verify/ 对照。不写 build。
+description: NutUI 比例缩放本地验证——写回 src/packages 下同路径组件 SCSS(跳过 src/packages/**/demo.scss 与 demos);--mirror 写 scale-verify/;不写 build。
disable-model-invocation: true
---
@@ -10,6 +10,8 @@ disable-model-invocation: true
**只做一步**:用 `scripts/px-to-scale-px-in-component-scss.cjs` 把组件 SCSS 里裸 `px` 转成 `scale-px` 等,并把结果写回磁盘。
+**不扫描、不写入**:**`src/packages/<组件名>/demo.scss`**(各组件目录根下的单文件)、`**/demos/**`、路径中含 **`/demo/`**、测试与快照目录下的 `.scss`(与官方 `build.mjs` 里对 `**/demo.scss` 的 ignore 一致)。
+
- **默认(就地覆盖)**:对每个匹配的 `.scss`,**读、写都是同一路径**——相对 `src/packages` 的路径不变。例如 `src/packages/actionsheet/actionsheet.scss` 转换后仍写回该文件,不会改到别的目录或改名。
- **`--mirror`**:不写源码;结果写到 **`scale-verify/<与 src/packages 相同的相对路径>`**(例如 `scale-verify/actionsheet/actionsheet.scss`),便于 diff。
@@ -19,6 +21,14 @@ disable-model-invocation: true
在 **nutui-react 仓库根目录** 执行。**务必先 commit / stash**,用完 `git restore src/packages` 或 `git checkout -- src/packages` 恢复。
+若只需还原 **`src/packages/<组件>/demo.scss`**(当前脚本已跳过;若曾被旧版本误改):
+
+```bash
+find src/packages -name 'demo.scss' -exec git restore -- {} \;
+```
+
+**然后**在仓库根执行验证:
+
```bash
pnpm run verify-scale
```
diff --git a/.cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs b/.cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs
index 92dc337a82..e3922ada2e 100644
--- a/.cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs
+++ b/.cursor/skills/nutui-build-local-verify/scripts/verify-scale-generation.mjs
@@ -1,7 +1,8 @@
#!/usr/bin/env node
/**
- * 默认:每个文件读自且写回 src/packages 下同一路径(如 …/actionsheet/actionsheet.scss)。
- * 不包含 build;自行 git diff / 恢复即可。
+ * 本地验证:默认就地写回 src/packages 下同一路径的组件 .scss(如 …/actionsheet/actionsheet.scss)。
+ * 跳过 src/packages/**/demo.scss、demos、测试与快照(与 build.mjs ignore 一致)。
+ * --mirror 只写 scale-verify/;不包含 build;自行 git diff / 恢复即可。
*/
import fs from 'node:fs/promises'
import path from 'path'
@@ -32,6 +33,9 @@ function isScssFile(name) {
function shouldSkip(relPath) {
const p = relPath.replaceAll('\\', '/')
+ // 与 build.mjs 的 ignore 一致:**/demo.scss 不参与 px→scale 写回
+ if (path.posix.basename(p) === 'demo.scss') return true
+ if (p.includes('/demo/')) return true
if (p.includes('/demos/')) return true
if (p.includes('/__test__/')) return true
if (p.includes('/__tests__/')) return true
From 2d7eac193174d4085fe3f41bedd954f03eab5dfc Mon Sep 17 00:00:00 2001
From: songchenglin3 <353833373@qq.com>
Date: Thu, 14 May 2026 14:27:35 +0800
Subject: [PATCH 8/8] =?UTF-8?q?style:=20=E5=9F=BA=E7=A1=80=E4=B8=BB?=
=?UTF-8?q?=E9=A2=98=E5=8F=98=E6=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/styles/theme-dark.scss | 152 +++++++++++++++++++++-------------
src/styles/theme-default.scss | 152 +++++++++++++++++++++-------------
src/styles/variables.scss | 4 +-
src/utils/scale-f.ts | 10 +--
4 files changed, 192 insertions(+), 126 deletions(-)
diff --git a/src/styles/theme-dark.scss b/src/styles/theme-dark.scss
index f756fe4a62..934a2e263a 100644
--- a/src/styles/theme-dark.scss
+++ b/src/styles/theme-dark.scss
@@ -228,25 +228,59 @@ page {
--nutui-color-border-disabled: var(--nutui-color-content-gray-1);
// 字体 ok
- --nutui-font-size-8: 8px;
- --nutui-font-size-9: 9px;
- --nutui-font-size-10: 10px;
- --nutui-font-size-11: 11px;
- --nutui-font-size-12: 12px;
- --nutui-font-size-13: 13px;
- --nutui-font-size-14: 14px;
- --nutui-font-size-15: 15px;
- --nutui-font-size-16: 16px;
- --nutui-font-size-17: 17px;
- --nutui-font-size-18: 18px;
- --nutui-font-size-19: 19px;
- --nutui-font-size-20: 20px;
- --nutui-font-size-21: 21px;
- --nutui-font-size-22: 22px;
- --nutui-font-size-23: 23px;
- --nutui-font-size-24: 24px;
- --nutui-font-size-25: 25px;
- --nutui-font-size-26: 26px;
+ --nutui-font-size-8: calc(8px * var(--nut-scale-font, var(--nut-scale-f, 1)));
+ --nutui-font-size-9: calc(9px * var(--nut-scale-font, var(--nut-scale-f, 1)));
+ --nutui-font-size-10: calc(
+ 10px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-11: calc(
+ 11px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-12: calc(
+ 12px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-13: calc(
+ 13px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-14: calc(
+ 14px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-15: calc(
+ 15px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-16: calc(
+ 16px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-17: calc(
+ 17px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-18: calc(
+ 18px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-19: calc(
+ 19px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-20: calc(
+ 20px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-21: calc(
+ 21px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-22: calc(
+ 22px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-23: calc(
+ 23px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-24: calc(
+ 24px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-25: calc(
+ 25px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-26: calc(
+ 26px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
// 字号语义化
// 徽标文字
@@ -301,22 +335,22 @@ page {
--nutui-text-align: left;
// space
- --nutui-spacing-1: 1px;
- --nutui-spacing-2: 2px;
- --nutui-spacing-3: 3px;
- --nutui-spacing-4: 4px;
- --nutui-spacing-5: 5px;
- --nutui-spacing-6: 6px;
- --nutui-spacing-7: 7px;
- --nutui-spacing-8: 8px;
- --nutui-spacing-9: 9px;
- --nutui-spacing-10: 10px;
- --nutui-spacing-11: 11px;
- --nutui-spacing-12: 12px;
- --nutui-spacing-13: 13px;
- --nutui-spacing-14: 14px;
- --nutui-spacing-15: 15px;
- --nutui-spacing-16: 16px;
+ --nutui-spacing-1: calc(1px * var(--nut-scale-f, 1));
+ --nutui-spacing-2: calc(2px * var(--nut-scale-f, 1));
+ --nutui-spacing-3: calc(3px * var(--nut-scale-f, 1));
+ --nutui-spacing-4: calc(4px * var(--nut-scale-f, 1));
+ --nutui-spacing-5: calc(5px * var(--nut-scale-f, 1));
+ --nutui-spacing-6: calc(6px * var(--nut-scale-f, 1));
+ --nutui-spacing-7: calc(7px * var(--nut-scale-f, 1));
+ --nutui-spacing-8: calc(8px * var(--nut-scale-f, 1));
+ --nutui-spacing-9: calc(9px * var(--nut-scale-f, 1));
+ --nutui-spacing-10: calc(10px * var(--nut-scale-f, 1));
+ --nutui-spacing-11: calc(11px * var(--nut-scale-f, 1));
+ --nutui-spacing-12: calc(12px * var(--nut-scale-f, 1));
+ --nutui-spacing-13: calc(13px * var(--nut-scale-f, 1));
+ --nutui-spacing-14: calc(14px * var(--nut-scale-f, 1));
+ --nutui-spacing-15: calc(15px * var(--nut-scale-f, 1));
+ --nutui-spacing-16: calc(16px * var(--nut-scale-f, 1));
// space 语义化
// 狭小空间内的紧密关联内容
@@ -338,30 +372,30 @@ page {
// radius ok
--nutui-radius-0: 0px;
- --nutui-radius-1: 1px;
- --nutui-radius-2: 2px;
- --nutui-radius-3: 3px;
- --nutui-radius-4: 4px;
- --nutui-radius-5: 5px;
- --nutui-radius-6: 6px;
- --nutui-radius-7: 7px;
- --nutui-radius-8: 8px;
- --nutui-radius-9: 9px;
- --nutui-radius-10: 10px;
- --nutui-radius-11: 11px;
- --nutui-radius-12: 12px;
- --nutui-radius-13: 13px;
- --nutui-radius-14: 14px;
- --nutui-radius-15: 15px;
- --nutui-radius-16: 16px;
- --nutui-radius-17: 17px;
- --nutui-radius-18: 18px;
- --nutui-radius-19: 19px;
- --nutui-radius-20: 20px;
- --nutui-radius-21: 21px;
- --nutui-radius-22: 22px;
- --nutui-radius-23: 23px;
- --nutui-radius-24: 24px;
+ --nutui-radius-1: calc(1px * var(--nut-scale-f, 1));
+ --nutui-radius-2: calc(2px * var(--nut-scale-f, 1));
+ --nutui-radius-3: calc(3px * var(--nut-scale-f, 1));
+ --nutui-radius-4: calc(4px * var(--nut-scale-f, 1));
+ --nutui-radius-5: calc(5px * var(--nut-scale-f, 1));
+ --nutui-radius-6: calc(6px * var(--nut-scale-f, 1));
+ --nutui-radius-7: calc(7px * var(--nut-scale-f, 1));
+ --nutui-radius-8: calc(8px * var(--nut-scale-f, 1));
+ --nutui-radius-9: calc(9px * var(--nut-scale-f, 1));
+ --nutui-radius-10: calc(10px * var(--nut-scale-f, 1));
+ --nutui-radius-11: calc(11px * var(--nut-scale-f, 1));
+ --nutui-radius-12: calc(12px * var(--nut-scale-f, 1));
+ --nutui-radius-13: calc(13px * var(--nut-scale-f, 1));
+ --nutui-radius-14: calc(14px * var(--nut-scale-f, 1));
+ --nutui-radius-15: calc(15px * var(--nut-scale-f, 1));
+ --nutui-radius-16: calc(16px * var(--nut-scale-f, 1));
+ --nutui-radius-17: calc(17px * var(--nut-scale-f, 1));
+ --nutui-radius-18: calc(18px * var(--nut-scale-f, 1));
+ --nutui-radius-19: calc(19px * var(--nut-scale-f, 1));
+ --nutui-radius-20: calc(20px * var(--nut-scale-f, 1));
+ --nutui-radius-21: calc(21px * var(--nut-scale-f, 1));
+ --nutui-radius-22: calc(22px * var(--nut-scale-f, 1));
+ --nutui-radius-23: calc(23px * var(--nut-scale-f, 1));
+ --nutui-radius-24: calc(24px * var(--nut-scale-f, 1));
// radius 语义化
// 内容描述型的详情页面通栏结构
diff --git a/src/styles/theme-default.scss b/src/styles/theme-default.scss
index 8a6e02923c..118f158f1f 100644
--- a/src/styles/theme-default.scss
+++ b/src/styles/theme-default.scss
@@ -227,25 +227,59 @@ page {
--nutui-color-border-disabled: var(--nutui-color-content-gray-1);
// 字体 ok
- --nutui-font-size-8: 8px;
- --nutui-font-size-9: 9px;
- --nutui-font-size-10: 10px;
- --nutui-font-size-11: 11px;
- --nutui-font-size-12: 12px;
- --nutui-font-size-13: 13px;
- --nutui-font-size-14: 14px;
- --nutui-font-size-15: 15px;
- --nutui-font-size-16: 16px;
- --nutui-font-size-17: 17px;
- --nutui-font-size-18: 18px;
- --nutui-font-size-19: 19px;
- --nutui-font-size-20: 20px;
- --nutui-font-size-21: 21px;
- --nutui-font-size-22: 22px;
- --nutui-font-size-23: 23px;
- --nutui-font-size-24: 24px;
- --nutui-font-size-25: 25px;
- --nutui-font-size-26: 26px;
+ --nutui-font-size-8: calc(8px * var(--nut-scale-font, var(--nut-scale-f, 1)));
+ --nutui-font-size-9: calc(9px * var(--nut-scale-font, var(--nut-scale-f, 1)));
+ --nutui-font-size-10: calc(
+ 10px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-11: calc(
+ 11px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-12: calc(
+ 12px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-13: calc(
+ 13px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-14: calc(
+ 14px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-15: calc(
+ 15px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-16: calc(
+ 16px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-17: calc(
+ 17px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-18: calc(
+ 18px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-19: calc(
+ 19px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-20: calc(
+ 20px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-21: calc(
+ 21px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-22: calc(
+ 22px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-23: calc(
+ 23px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-24: calc(
+ 24px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-25: calc(
+ 25px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
+ --nutui-font-size-26: calc(
+ 26px * var(--nut-scale-font, var(--nut-scale-f, 1))
+ );
// 字号语义化
// 徽标文字
@@ -302,22 +336,22 @@ page {
--nutui-text-align: left;
// space
- --nutui-spacing-1: 1px;
- --nutui-spacing-2: 2px;
- --nutui-spacing-3: 3px;
- --nutui-spacing-4: 4px;
- --nutui-spacing-5: 5px;
- --nutui-spacing-6: 6px;
- --nutui-spacing-7: 7px;
- --nutui-spacing-8: 8px;
- --nutui-spacing-9: 9px;
- --nutui-spacing-10: 10px;
- --nutui-spacing-11: 11px;
- --nutui-spacing-12: 12px;
- --nutui-spacing-13: 13px;
- --nutui-spacing-14: 14px;
- --nutui-spacing-15: 15px;
- --nutui-spacing-16: 16px;
+ --nutui-spacing-1: calc(1px * var(--nut-scale-f, 1));
+ --nutui-spacing-2: calc(2px * var(--nut-scale-f, 1));
+ --nutui-spacing-3: calc(3px * var(--nut-scale-f, 1));
+ --nutui-spacing-4: calc(4px * var(--nut-scale-f, 1));
+ --nutui-spacing-5: calc(5px * var(--nut-scale-f, 1));
+ --nutui-spacing-6: calc(6px * var(--nut-scale-f, 1));
+ --nutui-spacing-7: calc(7px * var(--nut-scale-f, 1));
+ --nutui-spacing-8: calc(8px * var(--nut-scale-f, 1));
+ --nutui-spacing-9: calc(9px * var(--nut-scale-f, 1));
+ --nutui-spacing-10: calc(10px * var(--nut-scale-f, 1));
+ --nutui-spacing-11: calc(11px * var(--nut-scale-f, 1));
+ --nutui-spacing-12: calc(12px * var(--nut-scale-f, 1));
+ --nutui-spacing-13: calc(13px * var(--nut-scale-f, 1));
+ --nutui-spacing-14: calc(14px * var(--nut-scale-f, 1));
+ --nutui-spacing-15: calc(15px * var(--nut-scale-f, 1));
+ --nutui-spacing-16: calc(16px * var(--nut-scale-f, 1));
// space 语义化
// 狭小空间内的紧密关联内容
@@ -339,30 +373,30 @@ page {
// radius ok
--nutui-radius-0: 0px;
- --nutui-radius-1: 1px;
- --nutui-radius-2: 2px;
- --nutui-radius-3: 3px;
- --nutui-radius-4: 4px;
- --nutui-radius-5: 5px;
- --nutui-radius-6: 6px;
- --nutui-radius-7: 7px;
- --nutui-radius-8: 8px;
- --nutui-radius-9: 9px;
- --nutui-radius-10: 10px;
- --nutui-radius-11: 11px;
- --nutui-radius-12: 12px;
- --nutui-radius-13: 13px;
- --nutui-radius-14: 14px;
- --nutui-radius-15: 15px;
- --nutui-radius-16: 16px;
- --nutui-radius-17: 17px;
- --nutui-radius-18: 18px;
- --nutui-radius-19: 19px;
- --nutui-radius-20: 20px;
- --nutui-radius-21: 21px;
- --nutui-radius-22: 22px;
- --nutui-radius-23: 23px;
- --nutui-radius-24: 24px;
+ --nutui-radius-1: calc(1px * var(--nut-scale-f, 1));
+ --nutui-radius-2: calc(2px * var(--nut-scale-f, 1));
+ --nutui-radius-3: calc(3px * var(--nut-scale-f, 1));
+ --nutui-radius-4: calc(4px * var(--nut-scale-f, 1));
+ --nutui-radius-5: calc(5px * var(--nut-scale-f, 1));
+ --nutui-radius-6: calc(6px * var(--nut-scale-f, 1));
+ --nutui-radius-7: calc(7px * var(--nut-scale-f, 1));
+ --nutui-radius-8: calc(8px * var(--nut-scale-f, 1));
+ --nutui-radius-9: calc(9px * var(--nut-scale-f, 1));
+ --nutui-radius-10: calc(10px * var(--nut-scale-f, 1));
+ --nutui-radius-11: calc(11px * var(--nut-scale-f, 1));
+ --nutui-radius-12: calc(12px * var(--nut-scale-f, 1));
+ --nutui-radius-13: calc(13px * var(--nut-scale-f, 1));
+ --nutui-radius-14: calc(14px * var(--nut-scale-f, 1));
+ --nutui-radius-15: calc(15px * var(--nut-scale-f, 1));
+ --nutui-radius-16: calc(16px * var(--nut-scale-f, 1));
+ --nutui-radius-17: calc(17px * var(--nut-scale-f, 1));
+ --nutui-radius-18: calc(18px * var(--nut-scale-f, 1));
+ --nutui-radius-19: calc(19px * var(--nut-scale-f, 1));
+ --nutui-radius-20: calc(20px * var(--nut-scale-f, 1));
+ --nutui-radius-21: calc(21px * var(--nut-scale-f, 1));
+ --nutui-radius-22: calc(22px * var(--nut-scale-f, 1));
+ --nutui-radius-23: calc(23px * var(--nut-scale-f, 1));
+ --nutui-radius-24: calc(24px * var(--nut-scale-f, 1));
// radius 语义化
// 内容描述型的详情页面通栏结构
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index e111fa0d27..05c8c4ada1 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -1,9 +1,11 @@
// ----------------------------------------------------
// 缩放系数
-:root {
+:root,
+page {
--nut-scale-f: 1;
--nut-scale-font: var(--nut-scale-f, 1);
--nut-scale-icon: var(--nut-scale-f, 1);
+
// ---- icon size ----
--nut-icon-height: calc(
16px * var(--nut-scale-icon, var(--nut-scale-f, 1))
diff --git a/src/utils/scale-f.ts b/src/utils/scale-f.ts
index 104e3f1634..c05cfc4ee6 100644
--- a/src/utils/scale-f.ts
+++ b/src/utils/scale-f.ts
@@ -39,10 +39,6 @@ export type ScaleProfile = 'standard' | 'large' | 'elderly'
export type ScaleScene = 'layout' | 'font' | 'icon' | 'lego'
export type ScaleDevice = 'phone' | 'pad'
-/** 视口大于等于该宽度时按平板处理 */
-const PAD_BREAKPOINT = 600
-/** 平板默认整体缩放倍数 */
-const PAD_SCALE = 1.2
/** 大字模式下仅 font 场景的相对倍率 */
const LARGE_FONT_RATIO = 1.15
/** 老年模式下 font/icon/lego 场景的相对倍率 */
@@ -88,7 +84,7 @@ function formatScaleValue(nextScale: number) {
/** 根据屏宽粗略区分 phone / pad */
function getCurrentDevice(): ScaleDevice {
if (!canUseDom) return 'phone'
- return window.innerWidth >= PAD_BREAKPOINT ? 'pad' : 'phone'
+ return window.innerWidth >= 600 ? 'pad' : 'phone'
}
/** 在 profile 与 scene 维度上叠加额外倍率(与全局 scale 相乘) */
@@ -124,8 +120,8 @@ function getScaleByViewport() {
if (!deviceWidth) return 1
- if (deviceWidth >= PAD_BREAKPOINT) {
- return PAD_SCALE
+ if (deviceWidth >= 600) {
+ return 1.2
}
if (deviceWidth >= 375 && deviceWidth < 600) {