初始化:Astro 站点 + Sveltia CMS 后台 + 部署配置

This commit is contained in:
2026-06-11 17:18:51 +08:00
commit 53092b52db
37 changed files with 7586 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
---
import { getCollection, render } from 'astro:content';
import BaseLayout from '../../layouts/BaseLayout.astro';
export async function getStaticPaths() {
const posts = await getCollection('blog');
return posts.map((p) => ({
params: { id: p.id },
props: { post: p },
}));
}
const { post } = Astro.props;
const { Content } = await render(post);
const d = post.data;
---
<BaseLayout title={d.title} description={d.description}>
<article class="prose">
<a href="/blog" class="back mono">← 返回博客</a>
<h1>{d.title}</h1>
<div class="meta mono muted">
<time>{d.pubDate.toISOString().slice(0, 10)}</time>
{d.updatedDate && <span>· 更新于 {d.updatedDate.toISOString().slice(0, 10)}</span>}
</div>
{
d.tags.length > 0 && (
<div class="tags mono">
{d.tags.map((t) => <span>#{t}</span>)}
</div>
)
}
<hr />
<div class="content">
<Content />
</div>
</article>
</BaseLayout>
<style>
.prose {
max-width: 720px;
margin: 0 auto;
padding: 2.5rem 0;
}
.back {
font-size: 0.85rem;
display: inline-block;
margin-bottom: 1.5rem;
}
.prose h1 {
margin: 0 0 0.5rem;
font-size: clamp(1.6rem, 4vw, 2.2rem);
}
.meta {
font-size: 0.85rem;
display: flex;
gap: 0.5rem;
}
.tags {
display: flex;
gap: 0.75rem;
color: var(--text-faint);
font-size: 0.8rem;
margin-top: 0.6rem;
}
.content :global(h2) {
margin-top: 2rem;
}
.content :global(img) {
max-width: 100%;
border-radius: var(--radius);
border: 1px solid var(--border);
}
.content :global(blockquote) {
border-left: 3px solid var(--accent-dim);
margin: 1.5rem 0;
padding: 0.25rem 1rem;
color: var(--text-dim);
}
</style>