2 个不稳定版本
0.2.0 | 2022 年 3 月 26 日 |
---|---|
0.1.22 | 2022 年 3 月 4 日 |
#8 in #minification
用于 lewp
1MB
21K SLoC
lewp-css - 以前称为 css
序言
这个仓库是 https://github.com/lemonrock/css 的一个分支。我喜欢最初的工作,并想进一步维护它。
因为这个crate似乎不再积极维护,并且我无法从作者那里得到回应,所以这个仓库以 lewp-css
的名称在crates.io上发布。
描述
lewp-css 是一个 Rust crate,实现了 CSS 样式表的解析器和序列化器。它使用了 cssparser crate。它封装了从 servo 的样式源代码分叉的源代码。非常感谢Mozilla的Servo团队所做的大量努力和成就。
要开始使用,请将依赖项添加到Cargo.toml中,例如:
[dependencies]
lewp-css = "*"
然后添加一些简单的代码,例如到 lib.rs
的形式:
use ::lewp_css::Stylesheet;
// Parse
let stylesheetUtf8String: String = ...;
let stylesheet = Stylesheet::parse(&stylesheetUtf8String).expect("Wasn't a valid stylesheet");
// Serialize
use ::std::fmt::Write;
let mut destination: Write = ...
const include_source_urls: bool = false;
stylesheet.to_css(&mut destination, include_source_urls).expect("Wrote out a stylesheet");
目的
我构建了这个crate,以便我可以创建 Autoprefixer 和 PurifyCSS 的 Rust 化版本。为什么?因为我的 cordial 网络服务器面向互联网,鉴于NodeJS代码的性质,将其作为依赖项是不可接受的。它还可以用来评估 @media
,@viewport
和 calc() / var() / attr()
规则和表达式。
因此,它还非常不完整。我欢迎补丁来添加对解析常见(以及不太常见)CSS属性的 support。然而,对解析和计算 calc()
,attr()
和 var()
的 full support 已存在。
请注意,与网络浏览器不同,[css] 不会忽略它不理解的内容。这是故意的;这使得在 CSS 代码中捕获假设变得更加容易。如果您认为应该解析某些内容,请修复源代码。
随着成熟,这个 crate 将会经常破坏兼容性。它也不关注 semver。在某些时候,如果我坚持下去,它应该会稳定下来,然后可以采用更谨慎的方法。
[css] 正在开始摆脱其根源,以不同的方法支持 calc()
,attr()
,页面选择器的支持,评估 attr()
,不标准化缩写属性等,所有这些都有助于使 CSS 更容易操作、优化和序列化。
许可
本项目的许可协议为 Mozilla 公共许可证 2.0 (MPL-2.0)。从 Servo 分支的代码也根据 Mozilla 公共许可证 2.0 许可。Servo 开发者(Mozilla 基金会的一部分)保留了未修改的样式源代码的版权,以及其实现方法,该方法是从 Servo 分支的。
在 src/selectors/temporary_fork 中有一个 selectors crate(及其依赖项 servo_arc)的临时分支,也来自 Servo(来自 "https://github.com/servo/servo", rev = "4f984a6428a0f497e311a0800efa55166c15aac6")。一旦发布了 selectors crate 的新版本(例如 0.19.0),就会将其删除。
CSS 修改
这些是 CSS 解析或序列化时的微小调整,主要是为了使其更高效。
@media
- 使用欧几里得算法对 aspect-ratios 进行标准化
- 将分辨率降低到像素密度(例如 DPI 为 96 等于 1)或 DPI(总是更大的)
- '100%' 的关键帧百分比写为 'to'
@font-face
- 删除字体功能设置的重复设置名称
- 将字体功能设置写为 '0' 和 '1' 而不是 'on' 和 'off'
@viewport
- 将 user-zoom 值标准化为 'zoom' 和 'fixed'
CSS 修正和升级
- 将
aural
媒体类型转换为speech
- 将非标准的 -webkit-device-pixel-ratio 媒体查询集 转换为
resolution
TODO
属性声明和类似声明
- 如果值是 0(例如宽度),则不要指定尺寸
- 可以在属性声明列表中省略最后的分号(在 W3C 解析器中始终有效)
- 优化 css 颜色以最小尺寸,无论是十六进制、rgb 还是名称
- 限制可解析的属性的有效范围,用于 @page 规则
@-规则
- 通过删除重复规则、强制定义简写形式等来优化 @viewport
- 输出前缀 -ms-,-o-(对于 @viewport),并删除不受支持的属性(仅针对 Opera 的 orientation,仅针对 IE11/Edge 的宽度和高度)
- 支持解析 @counter-style Symbol::Image()
媒体查询
- 支持第4级操作符语法(例如
>=
) - 支持在布尔上下文中解析,其中省略了值并默认为零(0)或无,例如对于网格、颜色等
- 支持在序列化时压缩CSS,省略默认值零(0)或not()
依赖项
~3.5MB
~69K SLoC