样式与配色
WarmIsland 主题的视觉设计围绕「暖夜中的小岛」这一意象展开,追求温暖、宁静、有质感的阅读体验。
设计哲学
暖夜小岛
想象一座深夜里温暖的小岛——远处是深邃的夜空,近处是篝火般的暖光。这就是 WarmIsland 的设计基调:
- 温暖:以暖色调为基础,避免冷硬的科技感
- 宁静:克制的动效和留白,不喧宾夺主
- 质感:毛玻璃、渐变光晕、细腻的阴影层次
- 呼吸:元素有节奏地律动,如岛上的微风
设计原则
- 内容优先:所有视觉设计服务于内容阅读
- 克制装饰:每个装饰元素都有其存在的理由
- 层次分明:通过颜色、字号、间距建立清晰的信息层级
- 温暖一致:从配色到动效,保持统一的温暖气质
色彩系统
浅色模式
| 变量 |
色值 |
用途 |
--bg |
#faf7f2 |
页面背景,温暖的米白色 |
--bg-raised |
#f3ede5 |
卡片背景,略深的暖色 |
--bg-overlay |
rgba(250, 247, 242, 0.85) |
遮罩层背景 |
--ink |
#2c2420 |
主文字色,深棕黑 |
--ink-2 |
#7a6e64 |
次要文字,中灰棕 |
--ink-3 |
#b5a99e |
辅助文字,浅灰棕 |
--rule |
#e8e0d6 |
分隔线、边框 |
--accent |
#d4764e |
强调色,温暖的赤陶橙 |
--accent-hover |
#c4613a |
强调色悬停态,更深的赤陶 |
--accent-bg |
#fdf0e8 |
强调色浅底,用于标签背景 |
--mist-pink |
#f0e4de |
薄雾粉,Hero 渐变用 |
--sea-salt |
#e8e0d6 |
海盐色,与 rule 相同 |
--caramel |
#8b6f5e |
焦糖色,滚动条用 |
--glass-bg |
rgba(250, 247, 242, 0.72) |
毛玻璃背景 |
--glass-border |
rgba(232, 224, 214, 0.5) |
毛玻璃边框 |
深色模式
通过 html.dark 选择器切换,所有颜色变量重新定义:
| 变量 |
色值 |
说明 |
--bg |
#1a1614 |
深棕黑背景 |
--bg-raised |
#242018 |
略浅的卡片背景 |
--ink |
#ede6de |
浅色主文字 |
--ink-2 |
#9a8e84 |
次要文字 |
--ink-3 |
#5e544a |
辅助文字 |
--accent |
#e8955f |
更亮的强调色(保证对比度) |
--accent-hover |
#f0a872 |
更亮的悬停态 |
--accent-bg |
#2a1e16 |
深色强调底 |
阴影系统
| 变量 |
浅色模式 |
深色模式 |
用途 |
--shadow-sm |
0 1px 3px rgba(44, 36, 32, 0.06) |
0 1px 3px rgba(0, 0, 0, 0.2) |
轻微阴影 |
--shadow-md |
0 4px 16px rgba(44, 36, 32, 0.08) |
0 4px 16px rgba(0, 0, 0, 0.25) |
中等阴影 |
--shadow-lg |
0 8px 32px rgba(44, 36, 32, 0.12) |
0 8px 32px rgba(0, 0, 0, 0.35) |
大阴影 |
--shadow-glow |
0 0 40px rgba(212, 118, 78, 0.15) |
0 0 40px rgba(232, 149, 95, 0.12) |
强调色光晕 |
深色模式
切换机制
深色模式通过 html.dark 类名控制:
- 跟随系统(默认):根据
prefers-color-scheme 媒体查询
- 手动切换:通过导航栏的主题切换按钮
- 配置指定:通过
color_scheme 配置项强制指定
切换逻辑
设计要点
- 深色模式不是简单的反色,而是重新定义了所有颜色变量
- 强调色在深色模式下更亮,保证足够的对比度
- 阴影在深色模式下使用纯黑,更自然
- 文字颜色保持温暖色调,不是纯白
字体系统
字体栈
| 变量 |
字体栈 |
用途 |
--font-sans |
'Noto Serif SC', 'Source Han Serif SC', Georgia, serif |
标题、强调文字 |
--font-body |
'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif |
正文、UI 文字 |
--font-mono |
'JetBrains Mono', 'Fira Code', monospace |
代码 |
设计思路
- 标题用衬线体:Noto Serif SC 赋予标题优雅的文艺气质
- 正文用无衬线体:Noto Sans SC 保证长文阅读的舒适度
- 代码用等宽体:JetBrains Mono 专为代码设计
::: tip
这些字体不会自动加载,需要在 Halo 后台或 HTML 中引入对应的字体 CSS。推荐使用 Google Fonts 或国内 CDN 镜像。
:::
间距系统
| 变量 |
值 |
用途 |
--space-xs |
0.25rem |
极小间距 |
--space-sm |
0.5rem |
小间距 |
--space-md |
1rem |
标准间距 |
--space-lg |
1.5rem |
大间距 |
--space-xl |
2rem |
超大间距 |
--space-2xl |
3rem |
区块间距 |
--space-3xl |
4rem |
大区块间距 |
--space-4xl |
6rem |
页面级间距 |
容器宽度
| 变量 |
值 |
用途 |
--container-sm |
640px |
小容器 |
--container-md |
768px |
中容器 |
--container-lg |
1024px |
大容器 |
--container-xl |
1200px |
最大容器 |
--content-max |
800px |
内容最大宽度 |
区块间距
--section-spacing: clamp(3rem, 2rem + 3vw, 6rem) — 响应式区块间距,在小屏幕上更紧凑。
圆角系统
| SCSS 变量 |
值 |
用途 |
$border-radius-sm |
8px |
小元素(标签、代码块) |
$border-radius-md |
12px |
中等元素(卡片、图片) |
$border-radius-lg |
16px |
大元素(卡片、面板) |
$border-radius-xl |
24px |
超大元素 |
$border-radius-full |
9999px |
胶囊按钮、头像 |
配置项
通过 border_radius 配置项可全局调整圆角风格:
| 选项 |
效果 |
small |
较小的圆角 |
medium |
中等圆角(默认) |
large |
较大的圆角 |
动画系统
时间曲线
| 变量 |
值 |
用途 |
--ease-out-expo |
cubic-bezier(0.16, 1, 0.3, 1) |
弹性出场,用于悬停和展开 |
--ease-out-quart |
cubic-bezier(0.25, 1, 0.5, 1) |
平滑出场,用于颜色过渡 |
--ease-in-out-cubic |
cubic-bezier(0.65, 0, 0.35, 1) |
对称缓动,用于循环动画 |
时长
| 变量 |
值 |
用途 |
--duration-fast |
150ms |
快速反馈(颜色变化) |
--duration-normal |
300ms |
标准过渡(悬停效果) |
--duration-slow |
500ms |
慢速过渡(大位移) |
--duration-breath |
3s |
呼吸动画周期 |
关键帧动画
| 动画名 |
效果 |
用途 |
breathe |
透明度 0.4→0.7 + 缩放 1→1.08 |
Hero 光球呼吸 |
fadeInUp |
透明度 0→1 + 上移 20px |
元素入场 |
float |
上下浮动 6px |
装饰元素 |
shimmer |
背景位置平移 |
加载占位 |
scrollHint |
透明度 + 下移 8px |
滚动指示器 |
likeHeartbeat |
缩放 1→1.3→0.9→1 |
点赞心跳 |
动画开关
| 配置 |
说明 |
默认值 |
animation_enabled |
启用动效 |
true |
animation_breath |
呼吸动画 |
true |
animation_scroll_reveal |
滚动渐入 |
true |
animation_cursor_glow |
光感跟随 |
false |
关闭动效时,html 元素添加 wi-no-animations 类名。