六维教程

Astro 局部样式

局部样式基础

组件样式

.astro 组件的模板里写 <style> 标签,Astro 会自动把样式「限定在当前组件」,不会影响别的组件。

---
const { title } = Astro.props; // 接收父组件传来的 title
---
<h2 class="title">{title}</h2>

<style>
  .title {
    color: teal;
    font-size: 1.5rem;
  }
</style>

构建后,Astro 会给这个类名加上一段哈希,变成类似 .title[data-astro-cid-xxx] 的形式,从而保证只在当前组件生效。

为什么需要局部样式

没有局部作用域时,两个组件都写了 .title 就会互相覆盖,Astro 的默认局部化让你放心起名,组件之间彼此隔离,重构时不用担心牵一发动全身。

组合选择器

局部样式里也能写嵌套和组合,作用范围依然只限本组件。

<style>
  .card {
    border: 1px solid #ddd;
  }
  .card:hover {
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  }
  .card .title {
    font-weight: bold;
  }
</style>

写在 style 里的表达式

<style> 标签也支持花括号插值,方便用脚本里的变量。

---
const brand = '#7c3aed'; // 脚本里的变量可在下方 <style> 中通过 {brand} 引用
---
<style>
  a {
    color: {brand};
  }
</style>

走向全局

全局样式

如果某段样式确实要影响全站(比如重置样式、第三方组件),用 is:global 指令。

<style is:global>
  * {
    box-sizing: border-box;
  }
</style>

也可以只在局部样式里挑出个别规则全局化:

<style>
  .local { color: red; }
  :global(.shared) {
    margin: 0;
  }
</style>

这样 .local 仍是局部的,.shared 则对所有元素生效。

引入外部样式文件

除了写在组件里,也可以引入一个独立的 CSS 文件。

---
import '../styles/global.css'; // 引入的 CSS 会作为全局样式生效
---

注意这样引入的 CSS 会作用于全局,也可以用 <style> 配合 @import,但推荐把全局样式统一放到布局(Astro 布局)里管理。

上一篇
Astro 客户端脚本
下一篇
Astro 全局样式