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
开关 .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); });