21 个版本 (重大更新)
0.17.0 | 2023 年 2 月 26 日 |
---|---|
0.15.0 | 2023 年 2 月 5 日 |
0.3.2 |
|
在 Rust 模式 中排名 #1071
130KB
3K SLoC
rtml
描述
(r)ust 宏用于 h(tml) 扩展 => rtml
(r)ust 类型安全 (css) => rcss
用法
fn main() {
use rtml::*;
// Use the macros to generate some HTML
let document = html! {
.lang = "en",
head!{
title!{
"Title of the document"
}
},
body!{
div!{
"text",
h1!{
"This is a heading"
},
p!{
"This is a paragraph"
}
}
}
}.render();
println!("{}", document);
}
输出的 HTML 将是非格式化的。但与以下等效
<!DOCTYPE html>
<html lang="en">
<head>
<title>Page Title</title>
</head>
<body>
<div>
text
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
</div>
</body>
</html>
当存在属性时,它们会先出现,然后再添加任何嵌套的内部 HTML。
div!{ .style="background-color: red;" }
当 HTML 需要构建时,调用 render()
入门指南
将 rtml crate 的最新版本安装到您的项目中
使用您计划使用的特定标签或通过添加此 use
语句引用所有标签。
use rtml::p;
// or
use rtml::*;
CSS
Rtml 还支持类型安全 CSS。
fn main() {
use rtml::*;
// Use the macros to generate some CSS
let css = css! {
p {
background: "yellow",
color: "red"
}
}.render();
println!("{}", css);
}
真实内联 CSS 与 rcss 之间的主要区别是值是字符串。另一个区别是属性以逗号 ,
分隔,而不是以分号 ;
分隔。
尚未实现 At-rules 和 Functions。
类型安全 HTML 属性
rtml 允许通过标签使用提供额外的类型安全层。例如,
a! { .href="/documents", My Documents }
<a href="/documents">My Documents</a>
在 a
标签上允许正确的属性。如果您不熟悉,您可能会尝试使用无效的 src
属性。大多数其他网站构建项目都不会阻止不兼容的属性使用。
在 rtml 中,有一个有用的错误。
a! { .src="/documents", My Documents }
<a src="/documents">My Documents</a>
the trait bound `src: ACompat` is not satisified
the following other types implement the trait `ACompat`:
accesskey
class
contenteditable
dir
download
draggable
hidden
href
and 13 others
将此错误分解如下,
的trait 约束src: ACompat...
src
: 是尝试使用的属性的名称ACompat
: 是需要实现的 trait,每个标签都有自己的版本。例如,DivCompat
和StyleCompat
accesskey class contenteditable
: 是支持的属性中的一小部分,Rust 按字母顺序列出它们,因此不会显示所有
特殊字符
rtml 和 rcss 在幕后使用结构体和特性,以确保最大的类型安全。正因为如此,由于 Rust 与 rtml 之间有一些共享的关键字,所以存在一些特殊的注意事项。字符 -
在标识符中是不允许的。因此,将所有 -
替换为下划线 _
。示例:将 -webkit-line-clamp
使用 _webkit_line_clamp
关键字 | rtml |
---|---|
作为 | _作为 |
类型 | _类型 |
种类 | _种类 |
对于 | _对于 |
循环 | _循环 |
在哪里 | _在哪里 |
异步 | _异步 |
组件
尚未实现