跳转到主要内容
Extension.js 无需任何配置即可支持纯 CSS 以及 Sass、Less 预处理器。对页面上下文(popup、options、side panel)和 content script 上下文,它会采用不同的样式路由方式。 页面样式会作为关联的资源发布。Extension.js 会把 content script 的样式注入到网页的 document 中,使其作用于当前活动标签页。

模板示例

content-sass

content-sass template screenshot 带有 Sass 样式的 content script,注入到网页中。
npx extension@latest create my-extension --template=content-sass
仓库:extension-js/examples/content-sass

content-custom-font

content-custom-font template screenshot 演示通过 CSS 加载自定义字体的 content script。
npx extension@latest create my-extension --template=content-custom-font
仓库:extension-js/examples/content-custom-font

CSS 能力

能力你会得到什么
多上下文样式对页面和 content script 使用同一种编写模型
Sass/Less 编译当相关依赖存在时编译 Sass/Less
上下文感知的输出将页面 CSS 与 content script CSS 分别输出到正确的目标
开发期更新流程在受支持时通过热模块替换(HMR)/重新挂载应用样式更新

在哪里引用 CSS

  • manifest.jsoncontent_scripts[].css
  • HTML 文件(<link rel="stylesheet" href="...">
  • 脚本导入(import "./styles.css",启用时也包括 Sass/Less)

CSS 支持

Manifest CSS 入口:
Manifest 字段期望的文件类型
content_scripts.css.css.scss.sass.less

示例:manifest.json 中的 CSS

{
  "manifest_version": 3,
  "name": "My Extension",
  "version": "1.0.0",
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "css": ["./styles/content.css"],
      "js": ["./scripts/content.ts"]
    }
  ]
}

示例:扩展页面脚本中的 CSS

import "./styles/popup.scss";

按上下文的输出行为

上下文输出行为
HTML/页面上下文Extension.js 将 CSS 与页面入口一起打包(feature.css
Content scriptExtension.js 将 CSS 作为 content_scripts/[name].[contenthash:8].css 资源输出
Extension.js 会根据哪个入口导入了 CSS 自动拆分上下文。

开发期行为

  • Content script 的 CSS 导入会参与 content script 的 HMR/重新挂载流程。
  • Extension.js 会为只有 CSS 的 content script 入口添加一个开发期辅助脚本,使更新得以传播。
  • 页面 CSS 遵循常规的页面 HMR 管线行为。
  • 结构性的 manifest/content script 变更仍可能需要扩展完整重载或重启。

模块化与预处理器

  • CSS 模块在扩展页面上下文中表现最好。
  • 当你安装相关依赖时,Extension.js 会启用 Sass/Less 支持。
  • 当 Extension.js 检测到项目中存在 PostCSS 配置,或者你显式配置时,会自动运行 PostCSS。

最佳实践

  • 把 content script 样式有意识地限定作用范围,减少与宿主页面的冲突。
  • 对扩展页面 UI,优先使用组件级的模块样式。
  • 显式地维护预处理器和 PostCSS 配置,避免随时间发生非预期的构建行为变化。
  • 在持续集成(CI)中校验 manifest 字段所引用的 CSS 路径。

下一步