← 返回站点
Design System

把日子写下来,
也把秩序定下来。

这是木冬的设计规范。它把站点里实际在用的颜色、字号、间距与组件整理成一套可查阅、可复用的系统—— 规范即实现,示例用的就是站点真实样式。

版本 v1.0 更新 2026-10-29 主题 明 / 暗 基础 原生 HTML / CSS / JS
01Principles

设计原则

四条原则决定取舍:当不确定怎么选时,回到它们。

01

克制

一屏只讲一件事。颜色只用一处强调,动画只为解释状态,不做无意义的装饰。

02

纸感

底色是暖白,字是墨黑,分隔线极淡。像在纸上写字,而不是在屏幕上填表。

03

留白

用间距建立层级,而不是靠边框和色块。留白是最便宜也最有效的排版工具。

04

光线

玻璃、柔和阴影与低对比背景,模拟自然光落在纸面上的层次,而不是硬邦邦的投影。

02Color

色彩系统

所有颜色以 CSS 变量提供,明暗两套自动切换。点击色块可复制变量名。色值格式为「浅色 · 暗色」。

品牌与强调
--accent
#1c6b76 · 暗 #5fb6c4
--accent-mid
#308898 · 暗 #7fc9d4
--accent-soft
#7fb3bd · 暗 #4a8b96
--accent-wash
8% 强调色 · 暗 14%
--warm
#b4653f · 暗 #d98b63
文字与中性
--ink
#12121a · 暗 #ecebe6
--ink-2
#4e4e58 · 暗 #b7b6c0
--muted
#8b8b95 · 暗 #8a8994
--line
10% 墨色 · 暗 10% 白
--line-strong
20% 墨色 · 暗 20% 白
表面
--bg
#f4f1ec · 暗 #14141a
--bg-deep
#ebe6de · 暗 #0e0e13
--surface
#ffffff · 暗 #1b1b22
--surface-warm
#fbf9f6 · 暗 #202028
--glass-bg
62% 白 · 暗 66% 深
用法
Do
  • 强调色只用于一处:主按钮、当前项、关键链接。
  • 正文用 --ink,次要信息用 --ink-2。
  • 分隔用 --line,不要用深灰实线。
Don't
  • 不要同时使用强调色和暖色做同一层级的强调。
  • 不要给大面积背景上高饱和色。
  • 不要用 --muted 承载重要正文(见 09 无障碍)。
03Typography

字体系统

拉丁字与中文字一一对应:标题用衬线(Fraunces / 思源宋体),正文用无衬线(Inter / 思源黑体), 标签用等宽感几何体(Space Grotesk / 思源黑体)。中文不做合成斜体,标题启用比例标点(palt)。

Display · 标题
Fraunces / 思源宋体
--font-display
Body · 正文
Inter / 思源黑体
--font-body
Label · 标签
Space Grotesk
--font-label
字号层级
记录日子
.h-displayclamp(40px, 8vw, 108px)行高 1.02字重 300首屏主标题
最近写的
.h-sectionclamp(32px, 4.4vw, 56px)行高 1.08字重 300区块标题
搬来杭州的第三个月
.h-card24px行高 1.28字重 400卡片 / 列表标题

这里是木冬的日记与照片。没有主题,也没有更新频率。

.ledeclamp(16px, 1.35vw, 19px)行高 1.72字重 400导语 / 副标题

今天下班绕了远路,从运河边走过去。十月末的风已经有凉意了,但还没到要穿外套的程度。

body16px行高 1.65字重 400正文
Recent · 最近
.label11.5px字距 0.16em大写小标签
规则
Do
  • 标题层级最多用到 .h-section,正文页不重复首屏大标题。
  • 中文标题行高不小于 1.02,避免宋体上下拥挤。
  • 正文每行控制在 60ch 内。
Don't
  • 不要给中文加斜体(无真斜体,合成会变形)。
  • 不要用字重 700 以上的中文标题,会失去纸感。
  • 不要混用两套衬线字体。
04Spacing & Layout

间距与布局

间距以 4px 为基准,常用 8 的倍数。容器最大宽 1180px,两侧留白 32px。

间距阶梯
4
图标内边距
8
紧凑
12
标签间距
16
组件内
24
卡片内
32
区块间距
48
大区块
64
章节
96
页面段
布局 token
--maxw1180px
--gutter32px
--radius-sm10px
--radius18px
--radius-lg28px
断点1000 / 760 / 620px
05Radius · Shadow · Glass

圆角 · 阴影 · 玻璃

圆角表达柔和,阴影表达层级,玻璃表达「悬浮在内容之上」。

圆角
--radius-sm · 10
--radius · 18
--radius-lg · 28
阴影
glass · 0 8px 32px
panel · 0 16px 44px
btn hover · 0 14px 34px
menu · 0 20px 54px
玻璃
06Motion

动效

动效只解释状态变化:进入、悬停、切换。默认缓出,短促不拖沓;尊重系统的「减少动效」设置。

主缓动
cubic-bezier(0.22, 1, 0.36, 1)
--ease · 进入 / 位移
柔和缓动
cubic-bezier(0.4, 0, 0.2, 1)
微交互0.25s
悬停0.35s
位移 / 展开0.5s
Reduced Motion
  • 当系统开启「减少动效」时,所有动画与过渡降到 0.001ms,骨架屏停止闪烁,平滑滚动关闭。
07Components

组件库

以下示例直接使用站点真实类名,所见即所用。

按钮
标签与筛选
平静 私密 管理员
表单
搜索栏
导航
头像与账号菜单
卡片与列表
照片墙
评论
小
小路 管理员 1 天前
写得真好,那个桥我也去过。
访
访客 3 小时前
路过,留个脚印。
反馈 · 加载 · 空状态
Toast
已添加 2 张照片
Skeleton

还没有日记

从今天开始记录吧。

写第一篇 →
弹窗(修改密码)

修改密码

08Icons

图标

统一为 24×24 视图、线性描边、stroke="currentColor",随文字颜色走。

相机 · 1.6 评论 · 1.6 搜索 · 1.8
属性规范
画布24 × 24,四周留 2px 安全区
描边1.6(常规)/ 1.8(搜索、小尺寸)
颜色currentColor,不写死色值
可访问性纯装饰加 aria-hidden="true";有语义时配 aria-label
09Accessibility

无障碍

目标:正文达到 WCAG AA(≥ 4.5:1),大字号达到 AA Large(≥ 3:1)。以下是实测对比度。

ink / bg
16.54:1 AAA
ink-2 / bg
7.30:1 AAA
accent / bg
5.46:1 AA
白字 / accent
5.90:1 AA
muted / bg
2.99:1 仅装饰
深色 ink / bg
15.37:1 AAA
已知限制与建议
  • --muted 在浅色底上约 2.99:1,未达 AA。它只用于装饰性小字(如标签、页脚说明),不承载关键信息。
  • 需要达标的次要文字,改用 --ink-2(7.30:1),或临时用 #6b6b74(4.68:1)。
  • 深色主题下 --muted 为 5.32:1,可直接使用。
通用要求
Do
  • 所有交互元素有 :focus-visible 焦点样式。
  • 移动端可点区域 ≥ 44×44px。
  • 图片写 alt,纯装饰图标加 aria-hidden。
  • 动态区域用 aria-live="polite" 播报结果。
Don't
  • 不要只靠颜色表达状态(如仅用红色表示错误)。
  • 不要移除浏览器默认焦点轮廓却不给替代。
  • 不要让正文小于 14px。
10Guidelines

使用规范

新页面、新组件落地时,按这份清单自查。

落地清单
1只用 token,不写死色值 / 字号
2间距取 4 的倍数
3明暗两套都检查
4760px / 620px 断点检查
5键盘可操作、焦点可见
6尊重 prefers-reduced-motion
文件与命名
style.css全局 token 与组件样式
cjk-fonts.css中文字体切片(脚本生成)
design-system.css本规范页骨架
类名小写 + 连字符,语义化(.entry-item)
状态类.is-* / .active
一句话
  • 如果一处样式要重复三次以上,就把它变成 token 或组件类,而不是复制粘贴。