feat(ui): add responsive mobile design tokens

This commit is contained in:
2026-06-25 10:50:46 +08:00
parent cc065f7781
commit 038b207964
8 changed files with 63 additions and 26 deletions
@@ -5,7 +5,7 @@
justify-content: center; justify-content: center;
width: 100%; width: 100%;
min-height: var(--app-viewport-height, 100dvh); min-height: var(--app-viewport-height, 100dvh);
background: #000000; /* 显式黑,桌面端 500px 外圈为黑色 */ background: #000000; /* 显式黑,桌面端移动壳外圈为黑色 */
} }
.content { .content {
@@ -14,6 +14,6 @@
flex: 1 1 auto; flex: 1 1 auto;
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
max-width: 500px; max-width: var(--app-max-width, 540px);
min-height: var(--app-viewport-height, 100dvh); min-height: var(--app-viewport-height, 100dvh);
} }
+1
View File
@@ -13,6 +13,7 @@
@import "../tokens/border-widths.css"; @import "../tokens/border-widths.css";
@import "../tokens/icon-sizes.css"; @import "../tokens/icon-sizes.css";
@import "../tokens/breakpoints.css"; @import "../tokens/breakpoints.css";
@import "../tokens/responsive.css";
@import "../tokens/dimensions.css"; @import "../tokens/dimensions.css";
/* ============================================================ /* ============================================================
@@ -7,16 +7,16 @@
background: var(--color-page-background, #ffffff); background: var(--color-page-background, #ffffff);
color: var(--color-auth-text-primary, #333333); color: var(--color-auth-text-primary, #333333);
min-height: 100dvh; min-height: 100dvh;
padding: 0 28px var(--spacing-xxl, 24px); padding: 0 var(--page-padding-x, 28px) var(--spacing-xxl, 24px);
box-sizing: border-box; box-sizing: border-box;
} }
.userSlot { .userSlot {
padding: 20px 0; padding: var(--sidebar-user-padding-y, 20px) 0;
} }
.cardSlot { .cardSlot {
padding: var(--spacing-sm, 8px) 0; padding: var(--sidebar-card-gap-y, 8px) 0;
} }
.settingsSlot { .settingsSlot {
@@ -8,8 +8,8 @@
.avatar { .avatar {
flex: 0 0 auto; flex: 0 0 auto;
width: 56px; width: var(--sidebar-avatar-size, 56px);
height: 56px; height: var(--sidebar-avatar-size, 56px);
border-radius: 50%; border-radius: 50%;
background: var(--color-accent, #f84d96); background: var(--color-accent, #f84d96);
display: flex; display: flex;
@@ -40,7 +40,7 @@
.name { .name {
margin: 0; margin: 0;
font-size: var(--font-size-lg, 16px); font-size: var(--font-responsive-md, 16px);
font-weight: 600; font-weight: 600;
color: #000000; color: #000000;
line-height: 1.2; line-height: 1.2;
@@ -51,7 +51,7 @@
.subtitle { .subtitle {
margin: 0; margin: 0;
font-size: var(--font-size-sm, 12px); font-size: clamp(12px, 2.593vw, 14px);
color: var(--color-text-secondary, #9e9e9e); color: var(--color-text-secondary, #9e9e9e);
line-height: 1.2; line-height: 1.2;
} }
@@ -91,7 +91,7 @@
var(--color-button-gradient-end, #ff52a2) var(--color-button-gradient-end, #ff52a2)
); );
color: var(--color-text-primary, #ffffff); color: var(--color-text-primary, #ffffff);
font-size: var(--font-size-sm, 12px); font-size: clamp(12px, 2.593vw, 14px);
font-weight: 600; font-weight: 600;
border: 0; border: 0;
cursor: pointer; cursor: pointer;
@@ -17,7 +17,9 @@
border-radius: 21px; border-radius: 21px;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
padding: 18px 0 18px 18px; padding: var(--sidebar-card-padding-y, 18px) 0
var(--sidebar-card-padding-y, 18px)
var(--sidebar-card-padding-x, 18px);
overflow: hidden; overflow: hidden;
} }
@@ -31,7 +33,7 @@
.title { .title {
margin: 0; margin: 0;
font-size: var(--font-size-xxl); font-size: var(--font-responsive-xl, 20px);
font-weight: 700; font-weight: 700;
color: #f657a0; color: #f657a0;
line-height: 1.3; line-height: 1.3;
@@ -63,7 +65,7 @@
align-items: flex-start; align-items: flex-start;
gap: 0; gap: 0;
padding: 0; padding: 0;
font-size: var(--font-size-lg); font-size: var(--font-responsive-md, 16px);
color: #1e1e1e; color: #1e1e1e;
line-height: normal; line-height: normal;
} }
@@ -104,7 +106,7 @@
linear-gradient(#fb5e9d, #fb5e9d); linear-gradient(#fb5e9d, #fb5e9d);
background-blend-mode: normal, normal; background-blend-mode: normal, normal;
color: var(--color-text-primary, #ffffff); color: var(--color-text-primary, #ffffff);
font-size: var(--font-size-lg); font-size: var(--font-responsive-md, 16px);
font-weight: 600; font-weight: 600;
border: 0; border: 0;
cursor: pointer; cursor: pointer;
@@ -15,7 +15,10 @@
border: solid 1px #fbbcb6; border: solid 1px #fbbcb6;
border-radius: 21px; border-radius: 21px;
width: 100%; width: 100%;
padding: 18px 12px 18px 18px; padding: var(--sidebar-card-padding-y, 18px)
var(--sidebar-card-padding-right, 12px)
var(--sidebar-card-padding-y, 18px)
var(--sidebar-card-padding-x, 18px);
box-sizing: border-box; box-sizing: border-box;
overflow: hidden; overflow: hidden;
} }
@@ -41,15 +44,15 @@
} }
.title { .title {
font-size: var(--font-size-xxl); font-size: var(--font-responsive-xl, 20px);
font-weight: 700; font-weight: 700;
color: var(--color-accent, #f84d96); color: var(--color-accent, #f84d96);
} }
.micIcon { .micIcon {
flex: 0 0 auto; flex: 0 0 auto;
width: 100px; width: var(--sidebar-voice-image-size, 100px);
height: 100px; height: var(--sidebar-voice-image-size, 100px);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@@ -57,8 +60,8 @@
.micImage { .micImage {
display: block; display: block;
width: 100px; width: var(--sidebar-voice-image-size, 100px);
height: 100px; height: var(--sidebar-voice-image-size, 100px);
object-fit: contain; object-fit: contain;
} }
@@ -76,7 +79,7 @@
.usedNumber { .usedNumber {
display: inline-flex; display: inline-flex;
color: #fa438b; color: #fa438b;
font-size: 30px; font-size: var(--font-responsive-number-lg, 30px);
font-weight: 700; font-weight: 700;
line-height: 1; line-height: 1;
} }
@@ -84,7 +87,7 @@
.totalNumber { .totalNumber {
display: inline-flex; display: inline-flex;
color: #000000; color: #000000;
font-size: 30px; font-size: var(--font-responsive-number-lg, 30px);
font-weight: 700; font-weight: 700;
line-height: 1; line-height: 1;
} }
@@ -92,12 +95,12 @@
.usageUnit { .usageUnit {
color: var(--color-text-secondary, #9e9e9e); color: var(--color-text-secondary, #9e9e9e);
display: inline-flex; display: inline-flex;
font: 400 var(--font-size-xl, 18px) / 1 var(--font-sans); font: 400 var(--font-responsive-lg, 18px) / 1 var(--font-sans);
} }
.usageText { .usageText {
color: #adabab; color: #adabab;
font-size: 18px; font-size: var(--font-responsive-lg, 18px);
font-weight: 400; font-weight: 400;
} }
@@ -116,7 +119,7 @@
linear-gradient(#f69757, #f69757); linear-gradient(#f69757, #f69757);
background-blend-mode: normal, normal; background-blend-mode: normal, normal;
color: var(--color-text-primary, #ffffff); color: var(--color-text-primary, #ffffff);
font-size: var(--font-size-lg); font-size: var(--font-responsive-md, 16px);
font-weight: 600; font-weight: 600;
border: 0; border: 0;
cursor: pointer; cursor: pointer;
+1 -1
View File
@@ -7,5 +7,5 @@
--bp-tablet-min: 600px; --bp-tablet-min: 600px;
--bp-tablet-max: 1023.98px; --bp-tablet-max: 1023.98px;
--bp-desktop-min: 1024px; --bp-desktop-min: 1024px;
--shell-max-width: 500px; --shell-max-width: 540px;
} }
+31
View File
@@ -0,0 +1,31 @@
/**
* 响应式 token
*
* 设计稿基准:1080x1920 @2x,因此 CSS 设计宽度为 540px。
* 原则:
* - 桌面调试最大宽度使用 --shell-max-width / --app-max-width。
* - 组件尺寸使用 clamp(min, design-ratio vw, design-value),在 360-540px
* 之间平滑缩放,并避免小屏过度压缩。
*/
:root {
--app-design-width: 540px;
--app-max-width: var(--shell-max-width, 540px);
/* 56px @2x = 28px;小屏保留至少 22px,避免内容贴边。 */
--page-padding-x: clamp(22px, 5.185vw, 28px);
/* Sidebar 专用响应式尺寸 */
--sidebar-user-padding-y: clamp(18px, 3.704vw, 20px);
--sidebar-card-gap-y: clamp(6px, 1.481vw, 8px);
--sidebar-card-padding-x: clamp(18px, 5.185vw, 28px);
--sidebar-card-padding-y: clamp(16px, 3.333vw, 18px);
--sidebar-card-padding-right: clamp(10px, 2.222vw, 12px);
--sidebar-avatar-size: clamp(48px, 10.37vw, 56px);
--sidebar-voice-image-size: clamp(84px, 18.519vw, 100px);
/* 响应式字体:按 540px 设计宽度换算,并给小屏设置可读下限。 */
--font-responsive-md: clamp(14px, 2.963vw, 16px);
--font-responsive-lg: clamp(16px, 3.333vw, 18px);
--font-responsive-xl: clamp(18px, 3.704vw, 20px);
--font-responsive-number-lg: clamp(24px, 5.556vw, 30px);
}