css_inline
是一个高性能库,用于将CSS插入HTML“样式”属性。
该库专为准备HTML电子邮件或将HTML嵌入第三方网页等方案而设计。
例如,板条箱像这样转换HTML:
<html> <head> <样式> h1 {颜色:蓝色; } </style> </head> <body> <h1>大文字</h1> </body> </html>
进入:
<html> <头> </head> <body> <H1 style =“颜色:蓝色;”>大文本</h1> </body> </html>
使用Mozilla伺服项目的可靠组件
来自style
和link
标签的Inline CSS
删除style
和link
标签
解决外部样式表(包括本地文件)
可选地缓存外部样式表
在Linux,Windows和MacOS上工作
支持HTML5&CSS3
Python,Ruby,JavaScript,C和WebAssembly模块的绑定,可以在浏览器中运行。
命令行接口
如果您想尝试css-inline
,则可以检查Websembly驱动的操场以立即查看结果。
要将其包括在项目中,请在项目的Cargo.toml
中的“依赖关系”部分中添加以下行。
[依赖项] CSS-Inline =“ 0.14”
最低支持的RUST版本为1.65。
const html:&str = r#“ <html> <head> <head> <syte> h1 {color:blue;} </style> </head> </head> <hod> <h1>大文本</h1> </h1> </hody> </body> </ html>“#; fn main() - > css_inline :: result <()> {让inlined = css_inline :: inline(html)?; //带有html的东西,例如发送emailok((())}
请注意, css-inline
会自动添加缺少的html
和body
标签,因此输出是有效的HTML文档。
另外,您可以将CSS插入HTML片段,并保留原始结构:
const fragment:&str = r#“ <ain> <h1>你好</h1> <部分> <p>谁是i </p> </pection> </section> </main>”#; const css:&str = r# “ p {color:red;} h1 {color:blue;}”#; fn main() - > css_inline :: result <()> {让inlined = css_inline :: inline_fragment(fragment,css)?; ok((())}
可以使用CSSInliner::options()
来配置css-inline
,以实现构建器模式:
const html:&str =“ ...”; fn main() - > css_inline :: result <()> {让inliner = css_inline :: cssinliner :: option()。load_remote_remote_remote_remote_stylesheets() = inliner.inline(html)?;; //与html一起使用的东西,例如发送emailok(())}
inline_style_tags
。指定是否从“样式”标签内联CSS。默认值: true
keep_style_tags
。指定在内线后是否保留“样式”标签。默认值: false
keep_link_tags
。指定在内联后是否保留“链接”标签。默认值: false
base_url
。基本URL用于解析相对URL。如果您想从文件系统加载样式表,请使用file://
方案。默认值: None
load_remote_stylesheets
。指定是否应加载远程样式表。默认值: true
cache
。指定外部样式表的缓存。默认值: None
extra_css
。额外的CSS被内联。默认值: None
preallocate_node_capacity
。先进的。在解析过程中,预处理HTML节点的能力。当您对HTML文档中的节点数量进行估计时,这可以提高性能。默认值: 32
您还可以通过添加data-css-inline="ignore"
属性来跳过html标签的css插入:
<头> <样式> h1 {颜色:蓝色; } </style> </head> <body> <! - 下面的标签不会收到其他样式 - > <h1 data-css-inline =“忽略”>大文本</h1> </body>
data-css-inline="ignore"
属性还允许您跳过link
和style
标签:
<头> <! - 下面的样式被忽略 - > <样式data-css-inline =“ ignore”> h1 {color:blue; } </style> </head> <body> <h1>大文本</h1> </hody>
另外,您可以使用data-css-inline="keep"
属性来防止style
删除。如果您想在单独的style
标签中保留@media
询问以获取@Media的询问:
<头> <! - 下面的样式未删除 - > <样式data-css-inline =“ keep”> h1 {color:blue; } </style> </head> <body> <h1>大文本</h1> </hody>
即使keep_style_tags
选项设置为false
,此类标签也将保存在结果的HTML中。
如果您想从文件系统加载样式表,请使用file://
方案:
const html:&str =“ ...”; fn main() - > css_inline :: result <()> {让base_url = css_inline :: url :: url :: parse(“ file:// styles/email/email/”).expect (“无效的URL”);让Inliner = css_inline :: cssinliner :: option()。base_url(some(base_url))。build(); let inlined = inliner.inline(html)(html); //使用inlined html做某事,例如,html,例如发送emailok(())}}}}}}}}}}}}}}}}}}}}
为了解决远程样式表,可以实现自定义解析器:
#[derive(debug,默认)] pub struct struct customStyleSheetResolver; inpper css_inline :: stylesheetheetresolver for CustomStylesStyleSheetHeetResolver {fn retireve(&self,soperation:&str) - > css_inline ::> css_inline :: result <string> result <string> erres.un.uns.un.unsupport seffort {不支持“)}}} fn main() - > CSS_INLINE :: RESTER <()> {让Inliner = CSS_INLINE :: CSSINLINER :: option()。分辨率(std :: Sync :: Arc :: arc :: arc :: new(custanStyStyleSheetResolver))。
您还可以缓存外部样式表,以避免过多的网络请求:
使用std :: num :: non necorize;#[cfg(feature =“ stylesheet -cache”)] fn main() - > css_inline :: result <()> {让inliner = css_inline :: cssinliner :: cssinliner ::缓存(//这是LRU cachecss_inline :: stylesheetCache :: new(non negorize :: new(5).expect(“无效缓存size size”))。 not(feature =“ stylesheet -cache”))] fn main() - > css_inline ::结果<()> {ok((())}}
默认情况下禁用缓存。
css-inline
通常会在数百微秒内引入HTML电子邮件,尽管结果可能随输入复杂性而变化。
css-inline==0.14.1
:
基本: 6.44 µs ,230字节
现实1: 128.59 µs ,8.58 kb
现实2: 81.44 µs ,4.3 kb
GitHub页面: 224.89毫秒,1.81 MB
这些基准是在M1 max上使用rustc 1.78
进行的,可以在css-inline/benches/inliner.rs
中找到。
安装cargo
:
cargo install css-inline
以下命令并行多个文档中的CSS。所得文件将被保存为inlined.email1.html
和inlined.email2.html
:
css-inline email1.html email2.html
有关可用选项的完整详细信息,您可以使用--help
标志:
css-inline --help
如果您有兴趣了解该库的创建方式及其在内部的工作方式,请查看以下文章:
生锈的箱子
Python结合
如果您有与此图书馆有关的任何疑问或讨论,请加入我们的Gitter!
该项目是根据MIT许可证的条款获得许可的。