v1.0 · 标准化
SHUANGZ 设计系统
基于 Google Material Design 3 构建的基础设施。所有站点共用同一套令牌、组件与动效规范,通过 m3.css 与 m3.js 两个文件接入。
01
概览
设计系统分为四层:令牌(tokens)决定颜色、间距、圆角、动效;组件由令牌组合而成;主题整套替换令牌值;页面只组合组件,不写颜色。
| 层级 | 内容 | 文件 |
|---|---|---|
| 令牌 | 颜色、形状、高度、动效、字体 | m3.css § 0 |
| 主题 | 6 套完整配色,替换全部令牌 | m3.css § 0 |
| 组件 | 卡片 / 按钮 / 输入 / 列表 / 菜单 / 图标 | m3.css § 6–11 |
| 运行时 | 主题切换、图标、提示 | m3.js |
02
主题
六套主题,切换时整套令牌同时替换。点击卡片可实时预览。
03
颜色
核心色板。所有颜色通过 CSS 变量引用,禁止硬编码。
/* 引用方式 */
background: var(--surface);
color: var(--ink);
border: 1px solid var(--line);
04
排版
字阶取自 Material 3 Type Scale,中文字体回退到苹方 / 微软雅黑。
.t-display南农四年
.t-headline教务与学习
.t-title-lg办事与服务
.t-title统一身份认证
.t-body改密码 · 绑定手机 · 找回账号
.t-body-sm校内站点需要在校园网环境下访问
.t-label分区标签
.t-caption最后更新于 2026-10-18
05
形状
M3 形状阶梯。同一页面内圆角必须来自这套阶梯,不写任意值。
xs · 4
sm · 8
md · 12
lg · 16
xl · 24
full · 999
| 用途 | 令牌 |
|---|---|
| 徽标 / 小标签 | --r-xs |
| 输入框 / chip / 菜单项 | --r-sm |
| 列表瓦片 / 菜单 | --r-md |
| 卡片 / 面板 | --r-lg |
| 对话框 / 登录卡 | --r-xl |
| 按钮 / 搜索框 / 图标按钮 | --r-full |
06
高度
三级升降序。低层级用 1,浮层用 2–3。悬停不靠加阴影,靠状态层。
elev-1
elev-2
elev-3
07
状态层
Material 的交互反馈规范:鼠标悬停叠加 5.5% 的 on-surface,按下叠加 9%。深色主题用白色叠加。
hover 演示
08
图标
统一使用 Material Symbols 风格:24×24 网格、2px 描边、圆头端点。用 M3.icon(name) 生成,不引入字体文件。
基础尺寸 · 24px
色调圆底 · .ic-tonal(44px 圆 + 24px 图标)
M3.icon('calendar-check') // 24px 线稿
M3.icon('calendar-check', 'ic-20') // 20px
// 色调圆底
<span class="ic-tonal"><?></span>
09
组件
所有页面共用这些组件。新增页面只组合组件,不改样式。
按钮 .btn / .btn-outlined / .btn-tonal / .btn-text
输入框 .field + .input
搜索条 .searchbar
卡片 .card / .card-elevated / .card-filled / .card-tonal
描边
.card
投影
.card-elevated
填充
.card-filled
色调
.card-tonal
导航瓦片 .tile(主站使用)
开关 .switch
轻提示 M3.toast()
10
接入方式
新页面只需两行引用,然后组合组件。
<link rel="stylesheet" href="https://shuangz.online/assets/m3.css?v=1">
...
<script src="https://shuangz.online/assets/m3.js?v=1"></script>
<script>
// 图标
document.getElementById('btn').innerHTML = M3.icon('palette','ic-20');
// 主题切换(图标按钮 + 二级菜单)
M3.theme.init({
mount: document.getElementById('themeMenu'),
trigger: document.getElementById('themeBtn')
});
// 提示
M3.toast('已保存', 'success');
</script>
| 站点 | 实现 |
|---|---|
| shuangz.online | 参考实现(内联令牌) |
| all.shuangz.online | 共用 m3.css / m3.js |
| find.shuangz.online | 共用 m3.css / m3.js |
| shuangz.online/admin | 共用 m3.css / m3.js |
/* 换主题 */
M3.applyTheme('night');
/* 监听变化 */
M3.onThemeChange(function(id){ console.log(id); });