feat(layout): 基础布局/导航/页脚/明暗不闪烁

- BaseLayout:字体三轨统持、viewport-fit=cover、theme-color 双套、skip-link
- Header:≤4 项导航纪律 + sticky 毛玻璃 + aria-current;搜索 icon 占位待 T8
- Footer:ICP 备案链接(法定保留)+ built-from 具名槽位待 T7
- ThemeScript:head 内联先于首帧,手选 > 系统偏好,防白闪

验证: pnpm astro build exit 0;dist/index.html 含 ICP 文案与跳到正文链

Spec: 2026-10-24_add-blog-skeleton
Co-authored-by: GLM-5.3
This commit is contained in:
wait4xandGLM-5.3 committed 2026-10-24 23:09:45 +08:00
1 parent ee53279822
commit b50eddf2bb
5 files changed
+185 -13

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
---
// 基础布局:字体/样式统一在此持有(页面不再各自引包)
// 明暗不闪烁:ThemeScript 必须在 <head> 内联先于首帧执行
import 'lxgw-wenkai-screen-webfont/lxgwwenkaiscreen.css';
import '@fontsource/noto-sans-sc/400.css';
import '@fontsource/noto-sans-sc/500.css';
import '@fontsource/noto-sans-sc/700.css';
import '@fontsource/jetbrains-mono/400.css';
import '@fontsource/jetbrains-mono/700.css';
import '../styles/global.css';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
import ThemeScript from '../components/ThemeScript.astro';
interface Props {
title: string;
description?: string;
/** 正文轨:reading 书评纸墨 / tech 技术(body 级字体氛围) */
track?: 'reading' | 'tech';
}
const { title, description = 'wait4x 的博客:阅读 · 技术 · 摄影', track = 'tech' } = Astro.props;
---
<!doctype html>
<html lang="zh" data-track={track}>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<meta name="generator" content={Astro.generator} />
<meta name="description" content={description} />
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)" />
<meta name="theme-color" content="#191d23" media="(prefers-color-scheme: dark)" />
<title>{title}</title>
<ThemeScript />
</head>
<body>
<a class="skip-link" href="#main">跳到正文</a>
<Header />
<main id="main" class="container">
<slot />
</main>
<Footer />
</body>
</html>