#css #css-class #web #scss #macro #web-apps

turf

在编译时构建 SCSS 到 CSS 并将这些样式注入到您的二进制文件中

19 个版本

0.9.3 2024 年 8 月 8 日
0.9.2 2024 年 7 月 19 日
0.9.0 2024 年 6 月 13 日
0.8.0 2024 年 2 月 19 日
0.5.0 2023 年 7 月 31 日

##1064 in WebAssembly

Download history 7/week @ 2024-04-24 5/week @ 2024-05-01 3/week @ 2024-06-05 130/week @ 2024-06-12 4/week @ 2024-06-19 112/week @ 2024-07-10 131/week @ 2024-07-17 15/week @ 2024-07-24 18/week @ 2024-07-31 147/week @ 2024-08-07

每月 315 下载

MIT 许可证

25KB

turf 🌱

警告 | 仓库可能反映当前的开发状态,可能与官方发布的版本不同。虽然仓库提供了对持续开发和潜在即将推出的功能的洞察,但它可能并不一定代表通过 crates.io 或其他分发渠道提供的版本。

turf 允许您在编译时将 SCSS 构建到 CSS 并将这些样式注入到您的二进制文件中。

Crates.io Docs.rs Build Status MIT licensed

turf 将

  • 🌿 在编译时使用 grass 将您的 SCSS 文件转换为 CSS
  • 🪴 在编译时为您的 CSS 生成唯一且动态的类名
  • 🔬 使用 lightningcss 压缩和优化您的 CSS,确保与各种浏览器目标的兼容性
  • 🎨 将生成的 CSS 注入到您的二进制文件中,确保您需要时可以快速访问这些样式

用法

对于完整的可运行示例项目,您可以查看以下示例之一

leptos-example yew-example dioxus-example axum-askama-htmx

1. 为您的应用程序创建 SCSS 样式

// file at scss/file/path.scss

.TopLevelClass {
    color: red;

    .SomeClass {
        color: blue;
    }
}

2. 使用 style_sheet 宏将生成的 CSS 包含到您的代码中

turf::style_sheet!("scss/file/path.scss");

上述示例中的宏将扩展到以下代码

static STYLE_SHEET: &'static str = "<style_sheet>";
struct ClassName;
impl ClassName {
    pub const TOP_LEVEL_CLASS: &'static str = "<unique_class_name>";
    pub const SOME_CLASS: &'static str = "<another_unique_class_name>";
}

3. 使用 ClassName 结构及其相关常量来访问生成的类名

let top_level_class_name = ClassName::TOP_LEVEL_CLASS;
let some_class_name = ClassName::SOME_CLASS;

配置

turf 的配置可以在 Cargo.toml 文件中使用 [package.metadata.turf][package.metadata.turf-dev] 键进行指定。这允许您在项目清单中方便地管理开发和生产构建的 SCSS 编译设置。

这两个配置文件提供完全相同的配置选项。然而,如果您没有指定一个 [package.metadata.turf-dev] 配置文件,[package.metadata.turf] 的设置也将应用于调试构建。这确保了在不同构建类型之间编译过程的一致性,除非您明确为开发配置定义了单独的配置。

示例配置

[package.metadata.turf]
minify = true
load_paths = ["path/to/scss/files", "path/to/other/scss/files"]

[package.metadata.turf.class_names]
template = "custom-<id>-<original_name>"
excludes = ["exclude-this-class-please", "^abc-[123]{4}"]

[package.metadata.turf.browser_targets]
chrome = [80, 1, 2]
firefox = 65
safari = [12, 3]

[package.metadata.turf.file_output]
global_css_file_path = "path/to/global.css"
separate_css_files_path = "dir/for/separate/css/"

以下配置选项可用

  • minify(默认:true):指定生成的CSS是否应进行压缩。如果设置为true,CSS输出将被压缩并优化以减小文件大小。如果设置为false,CSS输出将带有缩进和换行符以增强可读性。

  • load_paths:指定在编译期间搜索要包含的SCSS文件的额外路径。它接受一个字符串值列表,每个值代表要包含的目录路径。此选项允许您从多个目录导入SCSS文件。

  • browser_targets:定义生成CSS时兼容性所需的浏览器版本。它期望一个包含不同浏览器特定版本的架构。每个浏览器都可以指定其自己的版本。

  • class_names:允许配置CSS类名生成。它期望一个包含用于生成CSS类名和从唯一化过程中排除类名的两个值的架构。

  • debug(默认:false):当设置为true时,此选项将启用读取配置和生成的CSS类名的调试输出。这有助于故障排除和理解CSS是如何生成的。

  • file_output:启用编译CSS的输出。它期望一个包含单个全局CSS文件或为每个编译的SCSS文件生成单独CSS文件的架构。

class_names

  • template(默认:"class-<id>"):指定生成随机CSS类名的模板。模板可以包含占位符以自定义输出。<id> 将被替换为每个CSS类名的唯一标识符,而 <original_name> 将被替换为SCSS文件中的原始类名。

  • excludes:一个正则表达式模式数组,用于排除SCSS文件中的类名从唯一化过程中。

file_output

  • global_css_file_path:指定全局CSS文件的文件路径。如果设置,将在提供的路径创建一个CSS文件,并将所有编译的样式写入此文件。这允许您有一个包含所有编译样式的单个CSS文件。

  • separate_css_files_path:指定单独CSS文件的目录路径。如果设置,所有编译的CSS文件都将保存在指定的目录中。每个编译的SCSS文件都将在该目录中对应一个CSS文件,允许进行模块化CSS管理。内联SCSS样式定义的文件名将是从原始SCSS样式计算出的64位哈希。

浏览器版本

支持的浏览器如下

  • android
  • chrome
  • edge
  • firefox
  • ie
  • ios_saf
  • opera
  • safari
  • samsung

浏览器版本格式

支持三种格式

主要版本 主要版本.次要版本 主要版本.次要版本.补丁版本
使用一个整数指定主要版本号。 使用一个数组 [major, minor] 来指定主要和次要版本号。 使用一个数组 [major, minor, patch] 来指定主要、次要和补丁版本号。
示例: 1[1] 表示版本 1.0.0 示例: [1, 2] 表示版本 1.2.0 示例: [1, 2, 3] 表示版本 1.2.3

附加宏

turf 为其他用例提供了一些附加宏。

style_sheet_values

在某些情况下,可能需要有一个结构体的实例来访问类名(例如,当在 askama 模板中使用 turf 时)。turf::style_sheet_values 宏提供了一个直接包含生成的 CSS 并获取相关类名的替代方法。它返回一个包含 (style_sheet: &'static str, class_names: struct) 的元组。

用法

let (style_sheet, class_names) = turf::style_sheet_values!("path/to/style.scss");
let some_class_name = class_names.some_class;

inline_style_sheet

如果您不想将样式表放在另一个文件中,可以使用 turf::inline_style_sheet 宏。它允许您编写内联 SCSS,然后将其编译为 CSS。

用法

turf::inline_style_sheet! {
    .TopLevelClass {
        color: red;

        .SomeClass {
            color: blue;
        }
    }
}

// ...

let some_class_name = ClassName::SOME_CLASS;

inline_style_sheet_values

此宏结合了 style_sheet_valuesinline_style_sheet 宏的功能。它允许您编写内联 SCSS,并返回一个包含 (style_sheet: &'static str, class_names: struct) 的元组。

用法

let (style_sheet, class_names) = turf::inline_style_sheet_values! {
    .TopLevelClass {
        color: red;

        .SomeClass {
            color: blue;
        }
    }
};
let some_class_name = class_names.some_class;

贡献

对 turf 的贡献总是受欢迎!无论您是否有新功能或改进的想法,请不要犹豫,提出一个问题或提交一个 pull request。 🤝

许可

turf 在 MIT 许可下发布。有关更多详细信息,请参阅 LICENSE 文件。 📄

依赖项

~18MB
~272K SLoC