22 个版本
使用旧的 Rust 2015
0.0.22 | 2017年11月10日 |
---|---|
0.0.21 | 2017年11月10日 |
0.0.7 | 2017年10月15日 |
#1648 in 网页编程
40 个月下载量
在 3 个 crates(2 个直接使用) 中使用
785KB
18K SLoC
css
css 是一个 Rust crate,实现了 CSS 样式表解析器和序列化器。它使用 cssparser crate。它封装了从 servo 中分叉的原始样式源代码。对构建 Servo 的 Mozillians 的辛勤工作和成就表示衷心的感谢。
要开始使用,请向 Cargo.toml 添加依赖项,例如:
[dependencies]
css = "*"
然后添加一些简单的代码,例如 lib.rs
的形式:
extern crate css;
use ::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 属性的支持。然而,对解析和计算 calc()
、attr()
和 var()
的完整支持是存在的。
请注意,与网络浏览器不同,css 不会忽略它不理解的内容。这是故意的;这使得捕获 CSS 代码中的假设变得更容易。如果您认为应该解析某些内容,请修补源代码。
这个crate在成熟过程中会经常破坏兼容性,并且根本不关心semver。如果我一直坚持下去,它应该会稳定下来,然后适合采用更谨慎的方法。
css正在开始偏离其起源,采用了不同的方法来处理calc()
、attr()
、页面选择器的支持、评估attr()
、不归一化缩写属性等,所有这些都有助于使CSS更容易操作、优化和序列化。
许可
本项目采用Mozilla Public License 2.0 (MPL-2.0)许可。从Servo分叉的代码也采用Mozilla Public License 2.0许可。Servo开发者(Mozilla基金会的一部分)保留了未经修改的样式源代码的版权,以及从Servo分叉的实现方法。
在src/selectors/temporary_fork(来自"https://github.com/servo/servo",rev = "4f984a6428a0f497e311a0800efa55166c15aac6")中有一个临时分叉的selectors crate(及其依赖servo_arc),也来自Servo。一旦发布了新的selectors crate版本(如0.19.0),它就会被移除。
CSS修改
这些是对CSS在解析或序列化时的微小调整,主要是为了使其更高效。
@media
- 使用欧几里得算法归一化纵横比
- 分辨率降低到像素密度(例如,96 DPI = 1密度)或每厘米点数(总是更大)
- '100%'的关键帧百分比写作'to'
@font-face
- 移除字体特征设置中重复的设置名称
- 字体特征设置以'0'和'1'的形式编写,而不是'开'和'关'
@viewport
- 将用户缩放值归一化到'zoom'和'fixed'
CSS修正和升级
- 将
aural
媒体类型转换为speech
- 将非标准的
-webkit-device-pixel-ratio
媒体查询集转换为resolution
TODO
属性声明和类似声明
- 如果值是0(例如宽度),则不要指定维度
- 可以在属性声明列表中省略最后的';'(在任何情况下都有效于W3C解析器)
- 优化css颜色到最小的大小,无论是十六进制、rgb还是名称
- 限制可以解析的@page规则的有效属性范围
@-rules
- 通过删除重复的规则、强制定义到缩写形式等来优化@viewport
- 输出前缀 -ms-、-o- 用于 @viewport,并删除不受支持的属性(仅针对Opera的orientation,仅针对IE11 / Edge的width和height)
- 支持解析 @counter-style Symbol::Image()
媒体查询
- 支持第4级运算符语法(例如
>=
) - 支持在布尔上下文中解析,其中省略了值并默认为零(0)或无,例如对于网格、颜色等
- 支持通过在序列化时省略默认值为零(0)或not()来压缩CSS
依赖关系
~4MB
~79K SLoC