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 每月下载量

MPL-2.0 许可证

18KB
183

学期

学期是一个声明式 CSS 条件类名连接器,类似于 React 的 Reactclassnames。它旨在用于网页框架(如 Yew)和 HTML 模板引擎(如 horrorshow),作为一种高效且编译时检查的方式在 HTML 元素上条件性地激活或禁用 CSS 类。

学期提供了两个类似的宏,classesstatic_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,它会在编译时预计算所有可能的类组合。

除了 rendersemester 还提供了几种其他方式来访问类集,以便您可以使用最适合您用例的方式。有关详细信息,请参阅 ClassesStaticClasses 特性。semesterno_std,并且通常只在特定方法(如 renderto_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