4 个稳定版本
1.0.3 | 2023年1月7日 |
---|---|
1.0.2 | 2022年10月13日 |
1.0.1 | 2022年10月4日 |
1.0.0 | 2022年10月1日 |
#2027 in 网页编程
27 每月下载量
18KB
183 行
学期
学期是一个声明式 CSS 条件类名连接器,类似于 React 的 React 的 classnames。它旨在用于网页框架(如 Yew)和 HTML 模板引擎(如 horrorshow),作为一种高效且编译时检查的方式在 HTML 元素上条件性地激活或禁用 CSS 类。
学期提供了两个类似的宏,classes
和 static_classes
,用于创建类集。每个宏都有不同的操作模式,但它们都使用相同的简单语法并执行相同的检查和保证
- 该宏接受一个 CSS 类列表作为输入,并返回一个
impl Classes
use semester::{classes, Classes as _};
let classes = classes!(
"class1",
"class2",
"class3"
);
assert_eq!(classes.render(), "class1 class2 class3");
- 每个类可以可选地包含一个条件
use semester::{classes, Classes as _};
let classes = classes!(
"always",
"yup": 10 == 10,
"nope": 10 == 15,
);
assert_eq!(classes.render(), "always yup");
semester
将按声明顺序渲染所有启用的类,由一个空格分隔。它将尽可能预计算输出的一部分(例如,通过连接所有连续的无条件类),并且您可以进一步使用 static_classes
,它会在编译时预计算所有可能的类组合。
除了 render
,semester
还提供了几种其他方式来访问类集,以便您可以使用最适合您用例的方式。有关详细信息,请参阅 Classes
和 StaticClasses
特性。semester
是 no_std
,并且通常只在特定方法(如 render
和 to_string
)上进行分配。
此外,semester
在您的类上执行了多个编译时正确性检查
- 类必须由可打印的 ASCII 字符组成
// This does not compile
use semester::classes;
classes!("null\0class")
- 类不得包含任何空白
// This does not compile
use semester::classes;
classes!("class pair")
- 类不得为空
// This does not compile
use semester::classes;
classes!("")
- 类应排除HTML不安全字符:
<
>
&
'
"
// This does not compile
use semester::classes;
classes!("<injected-class>")
- 类不得重复。请注意,
semester
无法检测互斥条件,因此无条件地防止重复。
// This does not compile
use semester::classes;
let x = 10;
classes!(
"class1": x == 10,
"class1": x != 10,
);
许可证:MPL-2.0
依赖项
~2MB
~44K SLoC