Skip to content

样式与配色

WarmIsland 主题的视觉设计围绕「暖夜中的小岛」这一意象展开,追求温暖、宁静、有质感的阅读体验。

设计哲学

暖夜小岛

想象一座深夜里温暖的小岛——远处是深邃的夜空,近处是篝火般的暖光。这就是 WarmIsland 的设计基调:

  • 温暖:以暖色调为基础,避免冷硬的科技感
  • 宁静:克制的动效和留白,不喧宾夺主
  • 质感:毛玻璃、渐变光晕、细腻的阴影层次
  • 呼吸:元素有节奏地律动,如岛上的微风

设计原则

  1. 内容优先:所有视觉设计服务于内容阅读
  2. 克制装饰:每个装饰元素都有其存在的理由
  3. 层次分明:通过颜色、字号、间距建立清晰的信息层级
  4. 温暖一致:从配色到动效,保持统一的温暖气质

色彩系统

浅色模式

变量色值用途
--bg#faf7f2页面背景,温暖的米白色
--bg-raised#f3ede5卡片背景,略深的暖色
--bg-overlayrgba(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-bgrgba(250, 247, 242, 0.72)毛玻璃背景
--glass-borderrgba(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-sm0 1px 3px rgba(44, 36, 32, 0.06)0 1px 3px rgba(0, 0, 0, 0.2)轻微阴影
--shadow-md0 4px 16px rgba(44, 36, 32, 0.08)0 4px 16px rgba(0, 0, 0, 0.25)中等阴影
--shadow-lg0 8px 32px rgba(44, 36, 32, 0.12)0 8px 32px rgba(0, 0, 0, 0.35)大阴影
--shadow-glow0 0 40px rgba(212, 118, 78, 0.15)0 0 40px rgba(232, 149, 95, 0.12)强调色光晕

深色模式

切换机制

深色模式通过 html.dark 类名控制:

  1. 跟随系统(默认):根据 prefers-color-scheme 媒体查询
  2. 手动切换:通过导航栏的主题切换按钮
  3. 配置指定:通过 color_scheme 配置项强制指定

切换逻辑

javascript
// 优先级:localStorage > 配置项 > 系统偏好
var stored = localStorage.getItem("wi-theme");
var prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
var scheme = document.currentScript.getAttribute("data-scheme");

if (stored === "dark") { isDark = true; }
else if (stored === "light") { isDark = false; }
else if (scheme === "dark") { isDark = true; }
else if (scheme === "light") { isDark = false; }
else if (!stored && prefersDark) { isDark = true; }

设计要点

  • 深色模式不是简单的反色,而是重新定义了所有颜色变量
  • 强调色在深色模式下更亮,保证足够的对比度
  • 阴影在深色模式下使用纯黑,更自然
  • 文字颜色保持温暖色调,不是纯白

字体系统

字体栈

变量字体栈用途
--font-sansGeorgia, 'Noto Serif SC', 'Source Han Serif SC', serif标题、强调文字
--font-body-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans SC', sans-serif正文、UI 文字
--font-mono'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace代码

设计思路

  • 标题用衬线体:Georgia 赋予标题优雅的文艺气质,回退到系统中文字体
  • 正文用系统字体:使用各平台原生系统字体栈,确保最佳阅读体验与加载性能
  • 代码用等宽体:优先使用 JetBrains Mono,回退到系统等宽字体

TIP

主题使用系统默认字体栈,无需额外加载字体文件,可显著提升页面加载速度。如需使用自定义字体,可通过 自定义 CSS 覆盖 --font-sans--font-body 等变量。

间距系统

变量用途
--space-xs0.25rem极小间距
--space-sm0.5rem小间距
--space-md1rem标准间距
--space-lg1.5rem大间距
--space-xl2rem超大间距
--space-2xl3rem区块间距
--space-3xl4rem大区块间距
--space-4xl6rem页面级间距

容器宽度

变量用途
--container-sm640px小容器
--container-md768px中容器
--container-lg1024px大容器
--container-xl1200px最大容器
--content-max800px内容最大宽度

区块间距

--section-spacing: clamp(3rem, 2rem + 3vw, 6rem) — 响应式区块间距,在小屏幕上更紧凑。

圆角系统

SCSS 变量用途
$border-radius-sm8px小元素(标签、代码块)
$border-radius-md12px中等元素(卡片、图片)
$border-radius-lg16px大元素(卡片、面板)
$border-radius-xl24px超大元素
$border-radius-full9999px胶囊按钮、头像

配置项

通过 border_radius 配置项可全局调整圆角风格:

选项效果
small较小的圆角
medium中等圆角(默认)
large较大的圆角

动画系统

时间曲线

变量用途
--ease-out-expocubic-bezier(0.16, 1, 0.3, 1)弹性出场,用于悬停和展开
--ease-out-quartcubic-bezier(0.25, 1, 0.5, 1)平滑出场,用于颜色过渡
--ease-in-out-cubiccubic-bezier(0.65, 0, 0.35, 1)对称缓动,用于循环动画

时长

变量用途
--duration-fast150ms快速反馈(颜色变化)
--duration-normal300ms标准过渡(悬停效果)
--duration-slow500ms慢速过渡(大位移)
--duration-breath3s呼吸动画周期

关键帧动画

动画名效果用途
breathe透明度 0.4→0.7 + 缩放 1→1.08Hero 光球呼吸
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 类名。

基于 GPL-3.0 许可发布