Astro 最有代表性的东西,是 .astro 文件。
它很像一份“展馆建筑蓝图”:
- 上半部分是策展脚本和准备工作
- 下半部分是最终展馆结构
<style>默认只作用于当前展馆- 没有“天然常驻在浏览器里的组件状态系统”
来看一个最小的展馆组件:
---
// src/components/HeroHall.astro
interface Props {
title: string;
intro: string;
ctaHref?: string;
}
const { title, intro, ctaHref = '/tickets' } = Astro.props;
---
<section class="hero">
<p class="eyebrow">内容展馆群岛</p>
<h1>{title}</h1>
<p class="intro">{intro}</p>
<a href={ctaHref}>预约参观</a>
</section>
<style>
.hero {
padding: 4rem 1.5rem;
border: 1px solid #d9d1c5;
background: linear-gradient(180deg, #fffdf8, #f7f2e8);
}
.eyebrow {
letter-spacing: 0.18em;
text-transform: uppercase;
color: #7a6a55;
}
h1 {
margin: 0.5rem 0 1rem;
font-size: clamp(2rem, 5vw, 4rem);
}
.intro {
max-width: 42rem;
line-height: 1.8;
}
a {
display: inline-block;
margin-top: 1rem;
color: #1d4d4f;
}
</style>这里最关键的几个点:
---里的代码运行在服务端或构建期,不是浏览器常驻逻辑Astro.props是传进这座展馆的“展陈参数”- HTML 写法非常接近原生 HTML
<style>默认作用域隔离,不会漏到别的展馆
所以 .astro 给人的感觉通常是:
不像“浏览器状态机”
更像“服务端/构建时生成展馆 HTML 的模板语言”这也是 Astro 很适合内容站的原因之一:
你写的是“展馆长什么样”,不是“如何让整个站常驻在一个前端运行时里”。