
字节笔记本
2026年10月7日 · 约 7 分钟读完
一张单词学习卡的设计迭代复盘:配色、留白与信息层级
做语言学习类产品或个人小工具,单词卡片几乎是一个绕不开的组件。它看起来简单——一个单词、一行音标、一句释义——但真正动手做,很快就会发现每个元素都在争夺视觉权重:单词要醒目,音标不能喧宾夺主,例句要有存在感又不抢戏。最近把一张英语单词学习卡从第一版原型打磨到能拿得出手的成品,前后迭代了五轮,过程中的取舍比最终代码更值得记录。
先定信息架构:六个元素与一条动线
一张完整的单词卡片,通常包含六个信息单元:单词本体、音标、发音播放按钮、中文释义、英文释义、例句。动手排版之前,先给它们排一条阅读动线:视线先落在单词上,接着扫到音标确认读音,然后用母语释义建立直觉,最后才是英文释义和例句做补充验证。
这条动线直接决定视觉层级。落到具体数值上:单词最大(48px、加粗),音标次之(灰色、细字重),中文释义(32px、加粗)放在卡片中部做记忆锚点——母语词义是中文使用者记单词的第一抓手,字号理应压过英文释义;例句最小最淡,用斜体表明它是辅助材料。层级感不靠堆颜色,而是靠字号、字重、灰度三个维度的组合。版式上最终选择了 9:16 的竖版比例(360×640),因为这种卡片在手机上可以全屏展示,提供沉浸式的单卡学习体验——这和 Anki 这类翻卡工具的移动端形态是一致的,做成图片后也适合直接分享到社群做每日打卡。
自然拼读配色:装饰与教学是两回事
最初的需求里有一条「自然拼读的颜色区别」,第一版实现是把单词拆成单个字母,每个字母随机取一个十六进制色。效果一眼就能看出问题:颜色是装饰性的,不是教学性的。
自然拼读(Phonics)的核心是把字母和字母组合映射到发音。配色若要服务于拼读,就必须成系统——比如元音字母一种色、辅音字母一种色、不发音字母淡化处理、ea 或 igh 这类字母组合作为整体用同一种色。经典的蒙特梭利教具正是用红蓝两色区分元音与辅音字母的。而随机配色恰恰破坏了这种映射:同一个字母 e 在卡片上出现两次就可能得到两种颜色,学习者无法从中归纳任何规律,颜色反而成了噪音。
第二版改用一条六色渐变文字(见下文实现细节),观感立刻协调了许多——但也等于承认了另一个事实:如果暂时做不好教学性配色,宁可退回到克制而有质感的装饰表达,也不要用伪拼读配色冒充功能。
原型三件套:React、SVG 与 HTML 各管一段
这次迭代实际用到了三种载体,各有分工。React 组件适合验证结构与交互骨架:props 一传、数据驱动,改起来快,但注意力容易被拉回代码。SVG 视觉稿适合做纯设计推敲——定稿布局、配色与比例,一个 viewBox 就能精确控制每个元素的坐标,也方便继续导入设计工具加工。HTML/CSS 则是交付形态:字体、阴影、悬停动画、渐变这些视觉细节在 CSS 里表达最自然,也最接近最终上线效果。三者的顺序恰好对应「想清楚、看好、做对」:一上来就闷头写组件,布局上容易反复返工;只停在 SVG 设计稿,交互与响应式的问题又会晚暴露。让 AI 在这几种载体之间切换,本身就是一种把任务拆小的工作方式。
五轮迭代:从「有点乱」到「能看了」
迭代路径本身比结果更值得复盘。

第一轮用 React 组件出原型,快速验证结构:Tailwind 的卡片容器、逐字母上色、图标库里的播放按钮,十分钟内就能在浏览器里看到东西。第二轮转成纯 SVG 做视觉稿,摆脱代码细节,专注布局与配色本身。
第三轮出了个乌龙:需求是「卡片 9:16」,被理解成「整个 App 界面 9:16」,于是先画出了一张带状态栏、顶部应用栏、前后翻页按钮、学习进度条和底部导航(Learn/Review/Profile)的完整手机界面图。这个误会反而有价值——它提前演示了卡片放进真实产品后的上下文:翻页怎么翻、进度怎么呈现、学习与复习如何分栏。
第四轮回到卡片本体,改用 HTML/CSS 实现,并加入中文释义。第五轮收到了最关键的一句反馈:「界面有点乱」。拆开看,乱有三个来源:一是为了讲解布局而加的英文注释(Word、Definition、Example Sentence……)做完还留在卡片上,典型的脚手架忘拆;二是左对齐的文本块与右上角的播放按钮让视线来回折返;三是逐字母随机色让整体花哨。对应修法也简单:删光注释、全部居中、渐变代替随机色。
最后一轮「进一步美化」做的是加法:引入 Poppins 字体提升现代感,卡片改 30px 大圆角加柔和投影,左上、右下各放一个 10% 透明度的装饰圆打破呆板,例句块加浅灰底色和一枚巨大的半透明引号,播放按钮加悬停放大和同色系光晕。减法让卡片干净,加法让卡片好看,顺序不能反。
实现细节与几个坑

文字渐变:background: linear-gradient(...) 配合 -webkit-background-clip: text 与 color: transparent,是纯 CSS 实现渐变文字的标准写法,不需要 SVG,也不必把单词拆成一堆 span。
纯 CSS 播放按钮:不引图标库也能画。一个正圆容器,用 ::before 伪元素拼一个三角形——上下 border 透明、左 border 白色——居中后就是一枚播放键。
React 里随机色的重渲染问题:第一版把取色函数直接写在 JSX 的 map 里,组件每重渲染一次,每个字母的颜色就变一次,父组件状态更新或输入法切换都会触发闪烁。正解是让配色成为确定性函数(基于字母或字母组合的固定映射),再配 useMemo 缓存;随机性属于动画,不属于数据。
发音怎么落地:原型里播放按钮只是个摆设,真要可用,最轻的方案是浏览器的 Web Speech API——构造一个 SpeechSynthesisUtterance,把语言设成英文,交给 speechSynthesis.speak() 即可,零依赖、适合原型验证;对音色和音质有要求,再换云端 TTS 服务。
写在最后
这套做法不挑项目:给背单词工具做卡片、给孩子做识字闪卡、给社群做每日打卡分享图,用的都是同一套信息架构与迭代节奏,差别只在字号与配色的取舍。
回头看,这五轮迭代里最值钱的有两条。其一,反馈要具体到现象——「界面有点乱」比「再优化一下」有效得多,顺着「乱」字能拆出注释残留、对齐混乱、配色花哨三个具体病灶,一轮只改一类问题。其二,做减法永远排在加法之前:先删掉脚手架和干扰项,让信息层级自己浮出来,再谈字体、阴影与装饰。AI 辅助设计的高效用法,从来不是一次要一个完美结果,而是小步出稿、指名道姓地挑毛病、每轮收敛一个维度。



