Mobile wallpaper 1
1322 字
7 分钟
关于本主题的一些改动
2025-12-25
2026-01-10

前言:#

作为非专业人士,我修改博客主题时常因不知如何提问、怕改代码出错而搁置对默认设置(如偏爱深色而非白色背景)的调整,又因喜欢这款主题风格,故记录修改细节以备日后重新部署参考,避免重复迷茫

改动定位#

主题色#

  • 浅色
  • 深色✅

打开‘src/constants/constants.ts’文件,找到export const LIGHT_MODE = "light",在3-4行添加 DARK_MODE = "dark";#

constants.ts
export const PAGE_SIZE = 8;
export const LIGHT_MODE = "light",
DARK_MODE = "dark";

手机端头像隐藏#

打开‘src/components/widget/Profile.astro’文件,找到<div class="card-base p-3">在17行添加hidden md:block#

Profile.astro
<div class="card-base p-3">
<div class="card-base p-3 hidden md:block">

游戏库#

打开‘src/data/’新建一个文件,命名为‘games.ts’ 作为游戏页面#

games.ts
---
// 游戏库数据配置
export type GameItem = {
title: string;
playTime: number;
lastPlayed: string;
achievements: number;
totalAchievements: number;
cover: string;
link: string;
};
const localGameList: GameItem[] = [
{
title: "斗地主", // 游戏名称
playTime: 66.72, // 小时
lastPlayed: "2016-04-19", // 最后一次游玩时间
achievements: 60, // 已完成的成就数
totalAchievements: 100, // 总成就数
cover: "/assets/desktop-banner/warf.webp", // 游戏封面图片路径
link: "https://store.steampowered.com/app/550/Left_4_Dead_2/", // 游戏Steam页面链接
},
{
title: "反恐精英2",
playTime: 1,
lastPlayed: "2024-03-10",
achievements: 1,
totalAchievements: 100,
cover: "",
link: "https://store.steampowered.com/app/730/CounterStrike_2/",
},
];
export default localGameList;

打开‘src/pages/’新建一个文件,命名为‘games.astro’ 作为游戏库数据配置#

games.astro
---
import ImageWrapper from "../components/misc/ImageWrapper.astro";
import { sidebarLayoutConfig, siteConfig } from "../config";
import localGameList from "../data/games";
import I18nKey from "../i18n/i18nKey";
import { i18n } from "../i18n/translation";
import MainGridLayout from "../layouts/MainGridLayout.astro";
// 检查游戏库页面是否启用
if (!siteConfig.featurePages.games) {
return Astro.redirect("/404/");
}
// 检查是否为双侧边栏模式
const isBothSidebarMode = sidebarLayoutConfig.position === "both";
// 确保localGameList不是undefined
const gameList = localGameList || [];
// 计算统计数据
const stats = {
total: gameList.length,
totalPlayTime: gameList.reduce((sum, game) => sum + game.playTime, 0),
avgAchievements: (() => {
const totalAchievements = gameList.reduce(
(sum, game) => sum + game.achievements,
0,
);
const totalPossible = gameList.reduce(
(sum, game) => sum + game.totalAchievements,
0,
);
if (totalPossible === 0) return "0.0";
return ((totalAchievements / totalPossible) * 100).toFixed(1);
})(),
};
---
<MainGridLayout title="游戏库" description="我的游戏收藏">
<div class="flex w-full rounded-[var(--radius-large)] overflow-hidden relative min-h-32">
<div class="card-base z-10 px-9 py-6 relative w-full">
<!-- 页面标题 -->
<div class="relative w-full mb-8">
<div class="mb-6">
<h1 class="text-4xl font-bold text-black/90 dark:text-white/90 mb-2 relative
before:w-1 before:h-8 before:rounded-md before:bg-[var(--primary)]
before:absolute before:top-1/2 before:-translate-y-1/2 before:-left-4">
游戏库
</h1>
<p class="text-black/75 dark:text-white/75">我的游戏收藏与游玩记录</p>
</div>
</div>
<!-- 统计数据 -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-8">
<div class="bg-[var(--card-bg)] border border-[var(--line-divider)] rounded-[var(--radius-large)] p-4">
<div class="text-2xl font-bold text-black/90 dark:text-white/90">{stats.total}</div>
<div class="text-sm text-black/60 dark:text-white/60">游戏总数</div>
</div>
<div class="bg-[var(--card-bg)] border border-[var(--line-divider)] rounded-[var(--radius-large)] p-4">
<div class="text-2xl font-bold text-black/90 dark:text-white/90">{stats.totalPlayTime.toFixed(1)}</div>
<div class="text-sm text-black/60 dark:text-white/60">总游玩时间(小时)</div>
</div>
<div class="bg-[var(--card-bg)] border border-[var(--line-divider)] rounded-[var(--radius-large)] p-4">
<div class="text-2xl font-bold text-black/90 dark:text-white/90">{stats.avgAchievements}%</div>
<div class="text-sm text-black/60 dark:text-white/60">平均成就完成率</div>
</div>
</div>
<!-- 游戏列表 -->
<div class="mb-8">
{gameList.length > 0 ? (
<div id="game-list-container" class={`game-grid-container grid gap-4 md:gap-6 list-mode ${isBothSidebarMode ? "both-sidebar" : "single-sidebar"}`}>
{gameList.map(game => {
const achievementPercent = game.totalAchievements > 0 ? (game.achievements / game.totalAchievements) * 100 : 0;
return (
<div class="group relative bg-[var(--card-bg)] border border-[var(--line-divider)] rounded-[var(--radius-large)] overflow-hidden transition-all duration-300 hover:shadow-lg hover:scale-[1.02]">
<!-- 封面区域 -->
<div class="relative aspect-video overflow-hidden bg-gray-200 dark:bg-gray-800">
<a href={game.link} target="_blank" rel="noopener noreferrer" class="block w-full h-full">
{game.cover ? (
<ImageWrapper
src={game.cover}
alt={game.title}
class="w-full h-full object-cover transition-transform duration-300 group-hover:scale-110"
/>
) : (
<div class="w-full h-full flex items-center justify-center">
<svg class="w-16 h-16 text-gray-400" fill="currentColor" viewBox="0 0 24 24">
<path d="M21 6H3v12h18V6zm-1 10H4V8h16v8z"/>
</svg>
</div>
)}
</a>
</div>
<!-- 内容区域 -->
<div class="p-4">
<h3 class="text-lg font-bold text-black/90 dark:text-white/90 mb-2 line-clamp-1">{game.title}</h3>
<!-- 游玩时间 -->
<div class="flex justify-between items-center mb-2">
<span class="text-sm text-black/60 dark:text-white/60">游玩时间</span>
<span class="text-sm font-medium text-black/90 dark:text-white/90">{game.playTime} 小时</span>
</div>
<!-- 最后游玩 -->
<div class="flex justify-between items-center mb-2">
<span class="text-sm text-black/60 dark:text-white/60">最后游玩</span>
<span class="text-sm font-medium text-black/90 dark:text-white/90">{game.lastPlayed}</span>
</div>
<!-- 成就进度 -->
<div class="mb-1">
<div class="flex justify-between items-center mb-1">
<span class="text-sm text-black/60 dark:text-white/60">成就</span>
<span class="text-sm font-medium text-black/90 dark:text-white/90">{game.achievements}/{game.totalAchievements}</span>
</div>
<div class="w-full bg-gray-200 dark:bg-gray-700 rounded-full h-1.5">
<div class="bg-gradient-to-r from-blue-400 to-purple-500 h-1.5 rounded-full transition-all duration-300" style={`width: ${achievementPercent}%`}></div>
</div>
<div class="text-xs text-black/50 dark:text-white/50 text-right mt-1">{achievementPercent.toFixed(1)}%</div>
</div>
</div>
</div>
);
})}
</div>
) : (
<div class="text-center py-12">
<div class="text-5xl mb-4">😢</div>
<h3 class="text-xl font-medium text-black/80 dark:text-white/80 mb-2">
游戏库为空
</h3>
<p class="text-black/60 dark:text-white/60">
还没有添加任何游戏到收藏库
</p>
</div>
)}
</div>
</div>
</div>
<!-- 游戏列表布局样式 -->
<style>
/* 容器查询支持 */
.card-base {
container-type: inline-size;
}
/* 游戏网格容器 - 使用容器查询实现响应式列数 */
.game-grid-container {
/* 基础配置 - 移动端 */
display: grid;
grid-template-columns: repeat(2, 1fr);
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
/* 单侧栏模式 */
.game-grid-container.single-sidebar {
@container (min-width: 900px) {
grid-template-columns: repeat(4, 1fr);
}
@container (min-width: 600px) and (max-width: 899px) {
grid-template-columns: repeat(3, 1fr);
}
@container (max-width: 599px) {
grid-template-columns: repeat(2, 1fr);
}
}
/* 双侧栏模式 */
.game-grid-container.both-sidebar {
@container (min-width: 950px) {
grid-template-columns: repeat(3, 1fr);
}
@container (min-width: 650px) and (max-width: 949px) {
grid-template-columns: repeat(2, 1fr);
}
@container (max-width: 649px) {
grid-template-columns: repeat(2, 1fr);
}
}
</style>
</MainGridLayout>

打开‘src/config.ts'打开config.ts文件,找到'export const config'#

config.ts
export const config = {
featurePages: {
anime: true, // 番剧页面开关
diary: true, // 日记页面开关
friends: true, // 友链页面开关
projects: true, // 项目页面开关
skills: true, // 技能页面开关
timeline: true, // 时间线页面开关
albums: true, // 相册页面开关
devices: true, // 设备页面开关
games: true, // 游戏库页面开关
},
}

打开 ‘src/config.ts’找到'export const navBarConfig: NavBarConfig'菜单栏配置#

config.ts
export const navBarConfig: NavBarConfig = {
links: [
LinkPreset.Home,
LinkPreset.Archive,
// 支持自定义导航栏链接,并且支持多级菜单,3.1版本新加
{
name: "Links",
url: "/links/",
icon: "material-symbols:link",
children: [
{
name: "GitHub",
url: "https://github.com/matsuzaka-yuki/Mizuki",
external: true,
icon: "fa6-brands:github",
},
{
name: "Bilibili",
url: "https://space.bilibili.com/14516536?spm_id_from=333.1007.0.0",
external: true,
icon: "fa6-brands:bilibili",
},
{
name: "游戏库",
url: "/games/",
icon: "material-symbols:sports-esports",
},

音乐播放器收起#

默认是关闭❌

我设置了收起,打开 ‘src/components/widget/MusicPlayer.svelte’文件,找到'isHidden'变量,将false设置为true即可#

MusicPlayer.svelte
// 播放器是否隐藏,默认为 false
let isHidden = false;
// 播放器是否隐藏,默认为 true(默认显示小圆球)
let isHidden = true;
关于本主题的一些改动
https://wxh168.vip/posts/theme/
作者
冷梗续命
发布于
2025-12-25
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00