网站导航

集成

在 Angular 中配置 Master CSS

将 CLI 生成的 CSS 接入 Angular,同时运行两个开发监听进程,并验证生产样式表或可选的浏览器运行时。

本页内容

保留 Angular 构建器,并使用 Master CSS CLI 生成它可以加载的样式表。开发时,请同时运行两个监听进程:Master CSS 更新生成的 CSS,Angular 则提供导入该 CSS 的应用。

本配置假设你已有在浏览器中渲染的 Angular 应用,包含全局 src/styles.css、正常工作的 npm start 命令和受支持的 Node.js 24 版本。它使用 Angular 默认的模拟封装,使全局样式能够作用于组件模板。Shadow DOM 组件则需要在自己的 shadow root 中放置样式。

#安装

  1. #添加 Master CSS

    从 Angular 项目根目录运行安装程序:

    npm create @master/css@2.0.0 -- --framework angular --yes

    静态配置会添加 @master/css 和 @master/css-cli。安装程序可选的工具及预览选项,请参阅安装。

  2. #检查样式表连接

    安装程序会在项目根目录创建 Master CSS 源入口:

    master.css
    @import '@master/css';

    它还会保留现有内容,并将以下导入加入 Angular 的全局样式表:

    src/styles.css
    @import './master.generated.css';

    在 angular.json 中,请将 src/styles.css 保留在应用的 build.options.styles 数组内。Angular 的全局样式配置决定生成的 CSS 能否传递到页面。如果工作区结构非标准布局,请一并调整输出路径和导入。

    将 @theme、@utility 等 Master CSS 定义放在 master.css 中。Angular 使用生成后的原生 CSS;普通 CSS 构建器不会编译这些定义。请勿编辑 src/master.generated.css,或将其重新导入 master.css。

  3. #生成 CSS

    在一个终端中生成样式表,并持续监听变更:

    npx master-css generate --output src/master.generated.css --watch

    等待首次生成完成,再于第二个终端启动 Angular:

    npm start

    请让两个进程持续运行。添加类名时,仅 Angular 监听进程不会重新生成 Master CSS。

  4. #开始使用 Master CSS

    将以下标记加入根组件引用的模板。按照 Angular 当前的命名约定,通常是 src/app/app.html;现有项目可能使用 src/app/app.component.html。

    检查模板样式

    <p id="master-check" class="w-fit m(0) p-md b-solid b(1) b-line-divider r-md text-sm font-regular bg-surface-raised fg-text-strong">Hello Angular</p>
    生成的 CSS
    @layer theme {  :root,  :host {    --color-zinc-90: oklch(24.6% .0022 265);    --color-zinc-100: oklch(15% .0016 265)  }  :root,  :host {    --color-surface-raised: light-dark(var(--color-white), var(--color-zinc-90));    --color-line-divider: light-dark(oklch(0% 0 none / .12), oklch(100% 0 none / .12));    --color-text-strong: light-dark(var(--color-zinc-100), var(--color-white))  }  :root,  :host {    --color-white: oklch(100% 0 none)  }  :root,  :host {    --font-weight-regular: 400;    --font-size-sm: .875rem;    --text-sm: var(--font-size-sm);    --text-sm--line-height: 1.5;    --text-sm--letter-spacing: 0;    --radius-md: .375rem;    --spacing-md: 1rem  }}@layer utilities {  .text-sm {    font-size: var(--text-sm);    line-height: var(--text-sm--line-height, normal);    letter-spacing: var(--text-sm--letter-spacing, normal)  }  .bg-surface-raised {    background-color: var(--color-surface-raised)  }  .b-line-divider {    border-color: var(--color-line-divider)  }  .r-md {    border-radius: var(--radius-md)  }  .b-solid {    border-style: solid  }  .b\(1\) {    border-width: calc(1 * 1px)  }  .fg-text-strong {    color: var(--color-text-strong)  }  .font-regular {    font-weight: var(--font-weight-regular)  }  .m\(0\) {    margin: calc(0 * 1px)  }  .p-md {    padding: var(--spacing-md)  }  .w-fit {    width: fit-content  }}
    段落具有中性色表面、细边框、小圆角,以及四边各 1rem 的内边距。

#验证结果

打开 Angular 应用。段落的间距和表面应与示例一致。将模板中的 p-md 改为 p-lg:两个监听进程都在运行时,内边距应从 1rem 增加到 1.5rem。确认更新后恢复原值。

如果没有样式,请按顺序追查连接:

  • 检查 Master CSS 终端是否存在生成错误,并确认 src/master.generated.css 存在。
  • 检查 src/styles.css 中的导入,以及该文件在 angular.json 中的注册。
  • 在浏览器开发者工具中检查段落,查找匹配规则以及是否存在覆盖它的组件样式。

静态生成需要源代码中的完整类名字符串,或显式的安全列表。条件类名也应保持完整;动态值请使用 CSS 自定义属性。如果生成输出中缺少类名,请参阅扫描类名。

#构建以部署

先生成 CSS,再由 Angular 打包应用:

npx master-css generate --output src/master.generated.cssnpm run build

CI 也使用相同顺序。提供旧的生成文件可能掩盖样式缺失问题,因此请在重新生成后检查生产构建。

静态描述的是 CSS 生成步骤。浏览器渲染的 Angular 应用仍需要 JavaScript 才能创建 HTML。

#选择其他渲染模式

默认使用静态渲染。如果需要根据浏览器 DOM 变更,而非已知源代码字符串生成类名,请使用运行时渲染。

模式安装程序选项CSS 交付方式
静态无由 src/styles.css 导入 CLI 输出
运行时--mode runtime从 src/main.ts 启动浏览器运行时
在浏览器中生成新类名

运行时配置请执行:

npm create @master/css@2.0.0 -- --framework angular --mode runtime --yes

安装程序会从 src/main.ts 启动 MasterCSSRuntime,加载 @master/css-runtime/default-program,并观察文档中的类名变更。

**启动 Angular 前,请先完成全局样式表配置。**当前安装程序会将 @import '@master/css'; 加入 src/styles.css。请用下方原生基础样式表替换此导入,保留应用需要的其他原生 CSS 导入和规则。如果从静态配置切换,还请移除 ./master.generated.css 导入;此运行时路径不需要 CSS 监听进程。

src/styles.css
@import '@master/css/base.css';

默认程序提供预设词汇。在 Angular 的普通 CSS 中加入 @theme 或 @utility,不会编译出自定义运行时程序。对于项目自定义词汇,请使用静态 CLI 路径,或通过运行时 API提供单独编译的程序。

构建并提供 Angular 应用,再在浏览器控制台运行以下代码。无需重新构建,示例段落就应出现下划线:

document.querySelector('#master-check').classList.add('underline')

此运行时从浏览器入口启动。Angular SSR 应用需要单独的初始 CSS 策略;本指南涵盖的是浏览器渲染配置。