大版本更新
一口气全面统一博客样式,移除部分冗余导航页面,更专注内容展示。
不因虚度年华而悔恨,不因碌碌无为而羞愧
博客系列第11期。主题的显示设置面板有十几个选项,但站点配置只暴露了一半:本篇补齐显隐开关全覆盖,并把每个选项的访客默认值也收进 YAML——站长想要 Hero 布局默认展示,改一行配置就行。

主题的显示设置面板(外观 / 壁纸 / 特效三个 Tab)里有十几个访客可切换的选项:配色九宫格、页面背景模式、全屏布局、覆盖透明参数、水波纹、渐变过渡、樱花特效……但翻配置文件会发现:
displaySettings 只列了 6 个开关,樱花特效和横幅相关的 4 个开关不受控;访客的选择会存到浏览器里覆盖站点默认,但首次访问看到什么、没动过设置的访客看到什么,由站点默认值决定。这个默认值理应归站长管。
displaySettings 补齐面板上的每一个选项:
1displaySettings:2 colorStyle: true # 配色风格 9 宫格3 colorSpec: true # 配色规范(2021/2025)切换4 wallpaperMode: true # 页面背景模式切换5 layoutMode: true # 文章列表布局(列表/网格)6 reduceMotion: true # 减少动效7 texture: true # 背景纹理8 effects: true # 樱花特效开关 ← 新增9 bannerTitle: true # 首页壁纸标题开关 ← 新增10 bannerCarousel: true # 壁纸轮播开关 ← 新增11 bannerWaves: true # 水波纹动画开关 ← 新增12 bannerGradient: true # 渐变过渡开关 ← 新增面板侧用「与逻辑」决定渲染与否:
1{#if siteConfig.banner.carousel.enable && displayConfig.bannerCarousel}2 <div class="m3-toggle-row">...</div>3{/if}盘点所有面板选项的默认值来源后,把它们分成三类:
全屏布局的默认值在类型里早就存在(wallpaperMode.fullscreen.layout),只是配置文件没暴露。现在写进 site.yaml:
1wallpaperMode:2 defaultMode: banner # 站点默认背景模式3 fullscreen:4 layout: classic # classic 内容紧随导航栏 | hero 首屏整屏展示壁纸5 overlay:6 opacity: 0.8 # 覆盖透明默认参数7 blur: 108 cardOpacity: 0.6「渐变过渡」的默认值原来硬编码在工具函数里:
1// 之前:写死2export function getDefaultBannerGradientEnabled(): boolean {3 return true;4}5
6// 现在:读配置7export function getDefaultBannerGradientEnabled(): boolean {8 return siteConfig.banner.gradient?.enable ?? true;9}类型上给 banner 加一个可选域,配置合并规则天然兼容旧配置(没写就是 true,行为不变)。
配色三件套(色相 / 风格 / 规范)、背景纹理预设与浓度、文章列表布局默认值,原本就有配置入口,这次只是把文档补齐。
改配置验证默认值是否生效时,要清掉 localStorage 模拟首次访问——访客偏好优先于站点默认,不清的话改了也「看不到变化」:
1await page.evaluate(() => localStorage.clear());2await page.reload();3// 读取 <html> 的 dataset 验证4document.documentElement.dataset.fullscreenLayout; // "classic" | "hero"把配置临时改成 hero → 同步 → 重启 → 清存储访问,确认 data-fullscreen-layout="hero" 生效后改回。
?? 兜底,旧配置零迁移成本;至此,面板上每一个选项:能不能出现、默认是什么,都可以在内容仓的 YAML 里一行配置解决。
生成精美分享图或复制链接,与更多人分享本文。
最后更新于 ,距今已过 39 天
部分内容可能已过时