国风设计系统工程化实践
AI 导读
国风设计系统工程化实践 引言:传统美学的数字化表达 "国风"(Chinese Neo-Traditional Aesthetic)在过去五年间经历了从小众审美到商业主流的蜕变。从故宫文创到茶颜悦色,从原神到黑神话悟空,国风设计证明了传统东方美学在现代数字产品中不仅有生命力,而且有极强的商业价值。...
国风设计系统工程化实践
引言:传统美学的数字化表达
"国风"(Chinese Neo-Traditional Aesthetic)在过去五年间经历了从小众审美到商业主流的蜕变。从故宫文创到茶颜悦色,从原神到黑神话悟空,国风设计证明了传统东方美学在现代数字产品中不仅有生命力,而且有极强的商业价值。
然而,大多数国风设计仍停留在"视觉装饰"层面——在现代界面上贴几个祥云纹样、换一套红金配色就宣称"国风"。这种做法缺乏系统性,无法规模化,也经不起细看。本文从设计系统工程化的视角出发,将国风美学抽象为可编程的Design Tokens、组件模式和交互规范,使其成为可在现代前端技术栈(CSS/Tailwind/React)中直接落地的工程资产。
核心命题:国风设计系统不是"给现代UI贴传统皮肤",而是从色彩哲学、字形气韵、空间节奏、装饰语法四个维度重建设计语言的底层逻辑。
国风色彩Token系统
色彩哲学基础
中国传统色彩体系源于"五色观"——以青、赤、黄、白、黑对应五行(木、火、土、金、水),每种颜色承载明确的象征意义。在设计系统中,我们将这套哲学转化为语义化的Color Tokens:
+----------------------------------------------------------+
| Traditional Chinese Color Philosophy -> Design Tokens |
+----------------------------------------------------------+
| |
| 五行 五色 语义 Design Token |
| ---- ---- ---- ------------ |
| 木 Wood 青 Cyan 生长/春 --gf-growth |
| 火 Fire 赤 Red 热情/喜庆 --gf-celebration |
| 土 Earth 黄 Yellow 尊贵/中正 --gf-prestige |
| 金 Metal 白 White 纯净/肃穆 --gf-purity |
| 水 Water 黑 Black 深邃/庄重 --gf-depth |
| |
+----------------------------------------------------------+
gf = guofeng (国风) prefix
完整Token定义
以下Token系统包含72个色彩变量,涵盖主色、中性色、语义色三大类。所有颜色均取自中国传统色谱并经过数字屏幕校准:
/* guofeng-tokens.css - Chinese Neo-Traditional Design Tokens */
:root {
/* ========== PRIMARY PALETTE (传统五正色) ========== */
/* Red Family (赤系 - 喜庆/热情/核心动作) */
--gf-red-50: #FFF1F0; /* 粉白 */
--gf-red-100: #FECACA; /* 淡绯 */
--gf-red-200: #F5A3A3; /* 海棠红 */
--gf-red-300: #E87272; /* 桃红 */
--gf-red-400: #D94848; /* 朱砂 */
--gf-red-500: #C14443; /* 中国红 - PRIMARY */
--gf-red-600: #A13535; /* 枣红 */
--gf-red-700: #7F2828; /* 绛紫 */
--gf-red-800: #5C1C1C; /* 酱红 */
--gf-red-900: #3B1010; /* 暗红 */
/* Blue Family (青系 - 文雅/理性/信息) */
--gf-blue-50: #EFF6FF; /* 月白 */
--gf-blue-100: #DBEAFE; /* 淡蓝 */
--gf-blue-200: #A3C4E0; /* 天水碧 */
--gf-blue-300: #6B9FCA; /* 群青 */
--gf-blue-400: #3D7AB5; /* 靛蓝 */
--gf-blue-500: #2B4490; /* 藏蓝 - PRIMARY */
--gf-blue-600: #1E3570; /* 深蓝 */
--gf-blue-700: #142650; /* 玄青 */
--gf-blue-800: #0C1A38; /* 黛色 */
--gf-blue-900: #060E20; /* 墨色 */
/* Gold Family (黄系 - 尊贵/强调/高光) */
--gf-gold-50: #FFFBEB; /* 象牙白 */
--gf-gold-100: #FEF3C7; /* 鹅黄 */
--gf-gold-200: #FDE68A; /* 淡金 */
--gf-gold-300: #F0C239; /* 明黄 */
--gf-gold-400: #D4AF37; /* 赤金 - PRIMARY */
--gf-gold-500: #B8960C; /* 古铜金 */
--gf-gold-600: #8B7209; /* 暗金 */
--gf-gold-700: #5E4D06; /* 焦茶 */
/* Green Family (青绿系 - 生命/自然/成功) */
--gf-green-50: #F0FFF4; /* 荷叶白 */
--gf-green-100: #C6F6D5; /* 嫩绿 */
--gf-green-200: #81D8A2; /* 豆绿 */
--gf-green-300: #48BB78; /* 竹青 */
--gf-green-400: #2F9E5A; /* 翠绿 */
--gf-green-500: #1A8C6E; /* 石青 - PRIMARY */
--gf-green-600: #116B54; /* 松花绿 */
--gf-green-700: #0A4B3A; /* 墨绿 */
/* ========== NEUTRAL PALETTE (水墨中性色) ========== */
/* Ink Tones (墨色系 - 模拟水墨浓淡) */
--gf-ink-50: #FAF8F5; /* 宣纸白 */
--gf-ink-100: #F5F0E8; /* 米色 */
--gf-ink-200: #E8DFD0; /* 藕色 */
--gf-ink-300: #C4B8A8; /* 驼色 */
--gf-ink-400: #8C7E6E; /* 秋香色 */
--gf-ink-500: #5C5248; /* 灰棕 */
--gf-ink-600: #3D3530; /* 墨灰 */
--gf-ink-700: #2A2420; /* 漆黑 */
--gf-ink-800: #1A1614; /* 玄色 */
--gf-ink-900: #0D0B0A; /* 纯墨 */
/* ========== SEMANTIC TOKENS (语义映射) ========== */
--gf-bg-primary: var(--gf-ink-50); /* 主背景:宣纸白 */
--gf-bg-secondary: var(--gf-ink-100); /* 次背景:米色 */
--gf-bg-elevated: #FFFFFF; /* 浮层背景 */
--gf-text-primary: var(--gf-ink-800); /* 主文字:浓墨 */
--gf-text-secondary: var(--gf-ink-500); /* 次文字:淡墨 */
--gf-text-muted: var(--gf-ink-400); /* 辅助文字 */
--gf-border-default: var(--gf-ink-200); /* 默认边框 */
--gf-border-subtle: var(--gf-ink-100); /* 淡边框 */
--gf-action-primary: var(--gf-red-500); /* 主操作:中国红 */
--gf-action-secondary: var(--gf-blue-500); /* 次操作:藏蓝 */
--gf-accent: var(--gf-gold-400); /* 强调:赤金 */
--gf-success: var(--gf-green-500);
--gf-warning: var(--gf-gold-300);
--gf-error: var(--gf-red-400);
/* ========== SPACING (留白节奏) ========== */
--gf-space-1: 4px; /* 字间微距 */
--gf-space-2: 8px; /* 元素内边距 */
--gf-space-3: 12px; /* 紧凑间距 */
--gf-space-4: 16px; /* 标准间距 */
--gf-space-6: 24px; /* 段落间距 */
--gf-space-8: 32px; /* 模块间距 */
--gf-space-12: 48px; /* 区域间距 */
--gf-space-16: 64px; /* 页面级留白 */
--gf-space-24: 96px; /* 大留白 - 水墨留白感 */
/* ========== BORDER RADIUS (圆角 - 偏方正) ========== */
--gf-radius-sm: 2px; /* 微圆角 */
--gf-radius-md: 4px; /* 标准圆角 */
--gf-radius-lg: 8px; /* 卡片圆角 */
--gf-radius-full: 9999px; /* 圆形(印章) */
/* ========== SHADOW (投影 - 水墨晕染感) ========== */
--gf-shadow-sm: 0 1px 3px rgba(26, 22, 20, 0.08);
--gf-shadow-md: 0 4px 12px rgba(26, 22, 20, 0.12);
--gf-shadow-lg: 0 8px 24px rgba(26, 22, 20, 0.16);
--gf-shadow-ink: 0 2px 8px rgba(26, 22, 20, 0.25); /* 墨迹投影 */
}
Tailwind配置集成
将上述Token系统集成到Tailwind CSS中:
// tailwind.config.js - Guofeng theme extension
module.exports = {
theme: {
extend: {
colors: {
gf: {
red: {
50: '#FFF1F0',
100: '#FECACA',
200: '#F5A3A3',
300: '#E87272',
400: '#D94848',
500: '#C14443', // Chinese Red
600: '#A13535',
700: '#7F2828',
800: '#5C1C1C',
900: '#3B1010',
},
blue: {
50: '#EFF6FF',
100: '#DBEAFE',
200: '#A3C4E0',
300: '#6B9FCA',
400: '#3D7AB5',
500: '#2B4490', // Indigo Blue
600: '#1E3570',
700: '#142650',
800: '#0C1A38',
900: '#060E20',
},
gold: {
50: '#FFFBEB',
100: '#FEF3C7',
200: '#FDE68A',
300: '#F0C239',
400: '#D4AF37', // Imperial Gold
500: '#B8960C',
600: '#8B7209',
700: '#5E4D06',
},
green: {
50: '#F0FFF4',
100: '#C6F6D5',
200: '#81D8A2',
300: '#48BB78',
400: '#2F9E5A',
500: '#1A8C6E', // Stone Cyan
600: '#116B54',
700: '#0A4B3A',
},
ink: {
50: '#FAF8F5', // Rice paper white
100: '#F5F0E8',
200: '#E8DFD0',
300: '#C4B8A8',
400: '#8C7E6E',
500: '#5C5248',
600: '#3D3530',
700: '#2A2420',
800: '#1A1614',
900: '#0D0B0A',
},
},
},
fontFamily: {
'gf-display': ['"LXGW WenKai"', '"Noto Serif SC"', 'serif'],
'gf-body': ['"Source Han Sans SC"', '"Noto Sans SC"', 'sans-serif'],
'gf-mono': ['"JetBrains Mono"', 'monospace'],
},
borderRadius: {
'gf-sm': '2px',
'gf-md': '4px',
'gf-lg': '8px',
},
boxShadow: {
'gf-sm': '0 1px 3px rgba(26, 22, 20, 0.08)',
'gf-md': '0 4px 12px rgba(26, 22, 20, 0.12)',
'gf-lg': '0 8px 24px rgba(26, 22, 20, 0.16)',
'gf-ink': '0 2px 8px rgba(26, 22, 20, 0.25)',
},
},
},
}
字形与排版
字体选型策略
国风设计系统的字体选择需要在"传统气韵"和"屏幕可读性"之间取得平衡。以下是分层字体策略:
| 层级 | 用途 | 推荐字体 | 备选 | 说明 |
|---|---|---|---|---|
| 展示层 | 大标题/Hero | 霞鹜文楷 LXGW WenKai | 思源宋体 Noto Serif SC | 楷体气韵,开源免费 |
| 阅读层 | 正文/说明 | 思源黑体 Source Han Sans | 苹方 PingFang SC | 现代无衬线,清晰可读 |
| 数据层 | 数字/代码 | JetBrains Mono | DIN Alternate | 等宽,数据对齐 |
| 装饰层 | 印章/题签 | 方正小篆体 | 自定义SVG | 仅用于装饰元素 |
关键约束: 正文层绝不使用宋体或楷体——这两种字体在低分辨率屏幕上的可读性远低于黑体。展示层的楷体/宋体仅用于24px以上的标题场景。
排版节奏
中国传统书画的空间处理强调"疏可跑马、密不透风"——这种极端的疏密对比可以直接转化为现代排版中的"大留白"策略:
/* Guofeng typography rhythm */
.gf-page {
/* Page-level generous whitespace */
padding: var(--gf-space-16) var(--gf-space-12);
}
.gf-section {
/* Section spacing: deliberate breathing room */
margin-bottom: var(--gf-space-24); /* 96px - unusually large */
}
.gf-heading-1 {
font-family: var(--font-gf-display);
font-size: 2.5rem; /* 40px */
font-weight: 400; /* Light weight for elegance */
letter-spacing: 0.12em; /* Wide tracking for classical feel */
line-height: 1.4;
color: var(--gf-ink-800);
margin-bottom: var(--gf-space-8);
}
.gf-heading-2 {
font-family: var(--font-gf-display);
font-size: 1.75rem; /* 28px */
font-weight: 400;
letter-spacing: 0.08em;
line-height: 1.5;
color: var(--gf-ink-700);
margin-bottom: var(--gf-space-6);
}
.gf-body {
font-family: var(--font-gf-body);
font-size: 1rem; /* 16px */
font-weight: 400;
letter-spacing: 0.02em;
line-height: 1.8; /* Generous for CJK */
color: var(--gf-ink-800);
}
.gf-caption {
font-family: var(--font-gf-body);
font-size: 0.875rem; /* 14px */
color: var(--gf-ink-400);
letter-spacing: 0.02em;
line-height: 1.6;
}
字间距经验法则: 中文正文的letter-spacing建议在0.02em到0.05em之间。低于0.02em会显得拥挤,高于0.08em适合标题但正文阅读会变慢。行高建议1.75-1.85(比西文正文的1.5-1.6更宽),因为CJK字符的视觉密度更高。
纹样系统
纹样分类与使用规范
中国传统纹样浩如烟海,设计系统需要精选并规范化:
+------------------------------------------------------------+
| Pattern System Architecture |
+------------------------------------------------------------+
| |
| Layer 1: Background Patterns (铺底纹样) |
| Usage: Full-page or section backgrounds |
| Opacity: 3-8% (subtle, never compete with content) |
| Types: Cloud scroll (祥云), Wave (海水), Lattice (回纹) |
| |
| Layer 2: Border Patterns (边框纹样) |
| Usage: Card borders, dividers, frames |
| Types: Meander (回字纹), Ruyi (如意纹), Lotus (莲花纹) |
| |
| Layer 3: Decorative Motifs (点缀纹样) |
| Usage: Icon accents, badges, stamps |
| Types: Seal (印章), Auspicious knot (盘长), Coin (铜钱) |
| |
| Rule: Max 2 layers per screen. Never Layer 1 + Layer 3. |
+------------------------------------------------------------+
核心规则: 纹样是"氛围"而非"信息"。任何纹样的透明度不应超过8%(铺底)或15%(边框),否则会干扰内容可读性。每个页面最多使用2层纹样,且不能同时使用Layer 1和Layer 3(视觉噪音过大)。
SVG纹样实现
以最常用的"回字纹"和"祥云纹"为例,提供SVG Pattern的工程化实现:
/* Pattern definitions as CSS backgrounds */
/* Meander pattern (回字纹) - for borders */
.gf-pattern-meander {
background-image: url("data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h40v40H0V0zm4 4v32h32V4H4zm4 4h24v24H8V8zm4 4v16h16V12H12zm4 4h8v8h-8v-8z' fill='%23C14443' fill-opacity='0.06'/%3E%3C/svg%3E");
background-size: 40px 40px;
}
/* Cloud scroll pattern (祥云) - for backgrounds */
.gf-pattern-cloud {
background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M30 10c-5.5 0-10 4.5-10 10s4.5 10 10 10c2.8 0 5.3-1.1 7.1-3 1.8 1.9 4.3 3 7.1 3 5.5 0 10-4.5 10-10' fill='none' stroke='%232B4490' stroke-opacity='0.05' stroke-width='1'/%3E%3C/svg%3E");
background-size: 60px 60px;
}
/* Wave pattern (海水纹) - for footer/bottom sections */
.gf-pattern-wave {
background-image: url("data:image/svg+xml,%3Csvg width='80' height='40' viewBox='0 0 80 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 20c10-10 20-10 30 0s20 10 30 0 20-10 30 0' fill='none' stroke='%231A8C6E' stroke-opacity='0.06' stroke-width='1'/%3E%3C/svg%3E");
background-size: 80px 40px;
}
组件库架构
组件设计原则
国风组件库不是在shadcn/ui上换一套皮肤,而是重新审视每个组件的"形态隐喻":
| 现代组件 | 国风隐喻 | 视觉处理 |
|---|---|---|
| Button (Primary) | 朱漆大门 | 中国红底 + 金色文字 + 2px圆角 |
| Button (Secondary) | 青砖 | 藏蓝描边 + 透明底 + 方正 |
| Card | 宣纸/信笺 | 米白底 + 淡墨边框 + 微投影 |
| Modal / Dialog | 屏风 | 双层叠加 + 回字纹边框 + 展开动画 |
| Badge / Tag | 印章 | 圆形/方形 + 红色底 + 篆书字 |
| Divider | 山水分界 | 渐变淡墨线 + 可选云纹点缀 |
| Toast / Notification | 传令 | 左侧竖条 + 传统色语义 |
| Navigation | 牌匾/楹联 | 竖排可选 + 悬停底纹 |
| Progress | 卷轴展开 | 水平展开动画 + 金色进度 |
| Avatar | 印鉴 | 圆形 + 红色边框 + 印章质感 |
React组件示例
以"信笺卡片"(Card)组件为例,展示国风组件的工程实现:
// GuofengCard.tsx
import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '@/lib/utils';
const cardVariants = cva(
// Base styles: rice paper texture, ink border
[
'relative rounded-gf-lg border transition-shadow duration-300',
'bg-gf-ink-50 border-gf-ink-200',
'shadow-gf-sm hover:shadow-gf-md',
],
{
variants: {
variant: {
default: 'bg-gf-ink-50',
elevated: 'bg-white shadow-gf-md hover:shadow-gf-lg',
outlined: 'bg-transparent border-2 border-gf-red-500',
ink: 'bg-gf-ink-800 text-gf-ink-50 border-gf-ink-700',
},
pattern: {
none: '',
cloud: 'gf-pattern-cloud',
meander: 'gf-pattern-meander',
wave: 'gf-pattern-wave',
},
size: {
sm: 'p-4',
md: 'p-6',
lg: 'p-8',
},
},
defaultVariants: {
variant: 'default',
pattern: 'none',
size: 'md',
},
}
);
interface GuofengCardProps
extends React.HTMLAttributes<HTMLDivElement>,
VariantProps<typeof cardVariants> {
seal?: boolean; // Show decorative seal stamp in corner
}
export function GuofengCard({
className,
variant,
pattern,
size,
seal = false,
children,
...props
}: GuofengCardProps) {
return (
<div
className={cn(cardVariants({ variant, pattern, size }), className)}
{...props}
>
{children}
{seal && (
<div
className={cn(
'absolute top-3 right-3 w-8 h-8 rounded-full',
'bg-gf-red-500 opacity-20',
'flex items-center justify-center',
'font-gf-display text-white text-xs'
)}
aria-hidden="true"
/>
)}
</div>
);
}
动效与交互
动效哲学
国风动效的核心参考不是Material Design的"物理弹性",而是中国书法和水墨画的"运笔节奏"——起笔重、行笔流畅、收笔含蓄。在CSS中表现为:
/* Guofeng animation timing functions */
:root {
/* Brush stroke: slow start, fast middle, gentle end */
--gf-ease-brush: cubic-bezier(0.45, 0.05, 0.15, 0.95);
/* Ink spread: gradual expansion with deceleration */
--gf-ease-ink: cubic-bezier(0.25, 0.1, 0.25, 1.0);
/* Scroll unfurl: slow reveal, like unrolling a scroll */
--gf-ease-scroll: cubic-bezier(0.16, 1, 0.3, 1);
/* Default durations */
--gf-duration-fast: 200ms; /* Micro interactions */
--gf-duration-normal: 400ms; /* Standard transitions */
--gf-duration-slow: 800ms; /* Reveal animations */
--gf-duration-scroll: 1200ms; /* Scroll unfurl effect */
}
/* Scroll unfurl animation for page sections */
@keyframes gf-unfurl {
from {
opacity: 0;
transform: scaleX(0.3);
transform-origin: left center;
}
to {
opacity: 1;
transform: scaleX(1);
transform-origin: left center;
}
}
.gf-animate-unfurl {
animation: gf-unfurl var(--gf-duration-scroll) var(--gf-ease-scroll) both;
}
/* Ink fade-in for text reveals */
@keyframes gf-ink-appear {
from {
opacity: 0;
filter: blur(4px);
transform: translateY(8px);
}
to {
opacity: 1;
filter: blur(0);
transform: translateY(0);
}
}
.gf-animate-ink {
animation: gf-ink-appear var(--gf-duration-normal) var(--gf-ease-ink) both;
}
交互状态映射
| 交互状态 | 现代UI处理 | 国风处理 | 实现细节 |
|---|---|---|---|
| Hover | 背景变色 | 墨迹晕染 | box-shadow扩散 + opacity渐变 |
| Active/Press | 缩放0.95 | 印章按压 | scale(0.97) + shadow-inner |
| Focus | 蓝色outline | 金色光圈 | outline: 2px solid var(--gf-gold-400) |
| Loading | 旋转圆圈 | 太极旋转 | 阴阳鱼SVG rotate animation |
| Success | 绿色勾选 | 红色印章盖下 | 印章SVG stamp animation |
| Empty State | 灰色插画 | 留白 + 水墨山水远景 | 低opacity山水插画 |
暗色模式适配
国风设计的暗色模式不是简单的"反转颜色",而是从"白纸黑墨"切换到"黑漆金字"——模拟中国传统漆器的质感:
/* Dark mode: Black lacquer with gold accents */
[data-theme='dark'] {
--gf-bg-primary: var(--gf-ink-800); /* Lacquer black */
--gf-bg-secondary: var(--gf-ink-700); /* Dark lacquer */
--gf-bg-elevated: var(--gf-ink-600); /* Raised lacquer */
--gf-text-primary: var(--gf-ink-100); /* Warm white */
--gf-text-secondary: var(--gf-ink-300); /* Muted text */
/* Key shift: Gold replaces Red as primary accent */
--gf-action-primary: var(--gf-gold-400); /* Gold on black */
--gf-accent: var(--gf-red-400); /* Red becomes accent */
/* Borders brighten */
--gf-border-default: var(--gf-ink-500);
--gf-border-subtle: var(--gf-ink-600);
/* Shadows become glow effects */
--gf-shadow-sm: 0 1px 3px rgba(212, 175, 55, 0.08);
--gf-shadow-md: 0 4px 12px rgba(212, 175, 55, 0.12);
}
核心设计决策: 暗色模式下,主动作色从"中国红"切换为"赤金"。原因是红色在深色背景上的对比度和辨识度不如金色,而金色在黑底上的视觉冲击力更强(参考故宫的黑漆金字匾额)。
配色方案速查
除了上面详述的完整Token系统,以下是三套开箱即用的国风配色组合,可直接用于快速原型:
| 方案名 | 主色 | 辅色 | 强调 | 背景 | 适用场景 |
|---|---|---|---|---|---|
| 朱砂金 | #C14443 | #2B4490 | #D4AF37 | #FAF8F5 | 官方/政务/节庆 |
| 青花瓷 | #2B4490 | #A3C4E0 | #C14443 | #EFF6FF | 文化/教育/收藏 |
| 水墨淡 | #5C5248 | #C4B8A8 | #1A8C6E | #F5F0E8 | 茶道/禅意/生活 |
工程化落地检查清单
将国风设计系统集成到实际项目中,建议遵循以下检查清单:
| 阶段 | 检查项 | 通过标准 |
|---|---|---|
| Token接入 | CSS变量在全局可用 | 所有gf-*变量在浏览器中可解析 |
| 字体加载 | Web字体按需加载 | FOUT不超过200ms,display:swap生效 |
| 纹样渲染 | SVG Pattern正确平铺 | 无接缝、无模糊、opacity符合规范 |
| 组件覆盖 | 核心组件国风化完成 | Button/Card/Modal/Badge/Divider |
| 暗色模式 | 明暗切换无闪烁 | Token正确映射、漆器质感到位 |
| 无障碍 | 对比度合规 | 所有文字WCAG AA,关键元素AAA |
| 动效 | 运笔节奏一致 | 所有动画使用gf-ease-*曲线 |
| 性能 | 字体文件优化 | 子集化后单字体文件小于500KB |
结语
国风设计系统的工程化,本质上是把一种"感觉"转化为"规则"——把"这个看起来很有中国韵味"拆解为"用了哪个色值、哪种字体、哪个间距、哪种动效曲线"。这种转化不是对传统美学的简化或降维,而是让传统美学能够在现代数字产品中被精确复现、被系统维护、被团队协作。
当你的设计系统能用一行Tailwind class bg-gf-ink-50 text-gf-ink-800 font-gf-display shadow-gf-ink 就表达出"宣纸上的浓墨书法"的气韵时,国风就不再是"贴皮",而是真正融入了产品的DNA。
Maurice | maurice_wen@proton.me