样式
Rspeedy 支持多种方式来对你的应用程序进行样式设计,包括:
-
CSS Modules: 创建具有局部作用域的 CSS 类,以避免命名冲突并提高可维护性。
-
Global CSS: 使用全局 CSS,对于习惯传统 CSS 的人来说很熟悉,但可能生成更大的 CSS 文件并且随着应用程序的增长难以管理样式。
-
CSS pre-processors: 使用常见的 CSS 预处理器,如
sass或者less通过变量、嵌套规则等特性扩展了 CSS。 -
PostCSS: 用于转换 CSS 的工具。
-
Tailwind CSS: 一个 CSS 框架,通过组合工具类(utility classes)快速进行自定义设计。
使用 CSS Modules
CSS Modules 允许以模块化的方式编写 CSS 代码,并且这些样式可以在 JavaScript 文件中被导入并使用。使用 CSS 模块可以自动生成唯一的类名,隔离不同模块之间的样式,并避免类名冲突。
如果想要使用非隔离的 CSS 样式,可以使用 Global CSS。
Rspeedy 默认支持 CSS Modules,你不需要添加额外的配置。我们的约定是使用 [name].module.css 文件名来启用 CSS Modules。
示例
- 与正常样式一样编写 CSS 代码
- 像模块一样使用样式
或者使用 Named Imports:
配合 CSS Pre-Processor 使用
CSS Modules 也可以与 CSS 预处理器一起使用。只需按照 *.module.* 的模式命名样式文件即可。
E.g.: 下面这些文件都将会被认为是 CSS Modules
*.module.css*.module.less*.module.sass*.module.scss
识别规则
默认情况下,只有以 *.module.{css,scss,less} 结尾的文件才会被识别为 CSS Modules。
如果你想将其他 CSS 文件也视为 CSS Modules,可以通过在 Rspeedy 中配置 output.cssModules.auto 来实现。
如下面的例子所示:
给定此配置,以下 imports 将被识别为 CSS Modules:
类型声明
当你在 TypeScript 代码中导入 CSS Modules 时,TypeScript 可能会提示该模块缺少类型定义:
要解决这个问题,你需要为 CSS 模块添加一个类型声明文件,请创建一个 src/rspeedy-env.d.ts 文件,并添加相应的类型声明。
create-rspeedy 会自动为你创建这个文件。
如果在添加类型声明后仍然存在类型错误,你可以尝试重启当前的 IDE,以确保 TypeScript 能正确识别类型定义。
生成 TS 类型定义
@lynx-js/rspeedy/client 将提供如下类型声明:
它对于每个 CSS Modules 中含有的类名不够精确。
使用 Typed CSS Modules Plugin 将为所有 CSS Modules 生成具有精确类型声明的类型声明文件。
- 安装
@rsbuild/plugin-typed-css-modules
- 将
pluginTypedCSSModules添加至lynx.config.ts
在执行 rspeedy build 或者 rspeedy dev 后,将会自动生成详细的类型定义。
你还需要设置 "allowArbitraryExtensions": true 以及 "moduleResolution": "Bundler" 来让 TypeScript 正确工作。
使用 Global CSS
在某些情况下,你可能希望 CSS 样式与一些复杂的选择器一起使用,或者一些样式能够被所有 JSX 所使用。这在 Rspeedy 中被称为全局 CSS。
只需编写 CSS 代码,并从 JavaScript 文件中导入即可。
示例
- 像往常一样编写 CSS 文件
- 从 JSX 中引入 CSS 并指定类名