css_inline
、CSSをHTML「スタイル」属性に挿入するための高性能ライブラリです。
このライブラリは、HTMLメールの準備やHTMLのサードパーティのWebページへの埋め込みなどのシナリオ用に設計されています。
たとえば、クレートは次のようにHTMLを変換します。
<html> <head> <style> h1 {color:blue; } </style> </head> <body> <h1>大きなテキスト</h1> </body> </html>
の中へ:
<html> <ヘッド> </head> <body> <h1 style = "color:blue;">大きなテキスト</h1> </body> </html>
Mozillaのサーボプロジェクトの信頼できるコンポーネントを使用しています
style
とlink
タグからのCSSをインラインします
style
とlink
タグを削除します
外部スタイルシート(ローカルファイルを含む)を解決する
オプションでは、外部スタイルシートをキャッシュします
Linux、Windows、およびMacOSで動作します
HTML5およびCSS3をサポートします
Python、Ruby、JavaScript、C、およびブラウザで実行するWebAssemblyモジュール用のバインディング。
コマンドラインインターフェイス
css-inline
を試してみたい場合は、WebAssemblyを搭載した遊び場を確認して、結果を即座に確認できます。
プロジェクトにそれを含めるには、プロジェクトのCargo.toml
ファイルの依存関係セクションに次の行を追加します。
[依存関係] css-inline = "0.14"
サポートされている最小錆バージョンは1.65です。
const html:&str = r# "<html> <head> <style> h1 {color:blue;} </style> </head> <body> <h1> Big Text </h1> </body> </ html> "#; fn main() - > css_inline :: result <()> {let inlined = css_inline :: inline(html)?; // doインラインドHTMLがあるもの、例:Emailok(())を送信します}
css-inline
欠落しているhtml
とbody
タグを自動的に追加するため、出力は有効なHTMLドキュメントであることに注意してください。
または、CSSをHTMLフラグメントにインライン化して、元の構造を保存できます。
const fragment:&str = r# "<main> <h1> hello </h1> <section> <p>誰がi </p> </section> </main>; const css:&str = r# "p {color:red;} h1 {color:blue;}"#; fn main() - > css_inline :: result <()> {let inlined => { css_inline :: inline_fragment(fragment、css)??; ok(())}
css-inline
ビルダーパターンを実装するCSSInliner::options()
を使用して構成できます。
const html:&str = "..."; fn main() - > css_inline :: result <()> {let inliner = css_inline :: cssinliner :: options()。load_remote_stylesheets(false).build(); = 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インラインをスキップすることもできます。
<head> <style> h1 {color:blue; } </style> </head> <body> <! - 以下のタグは追加のスタイルを受け取りません - > <h1 data-css-inline = "Ingrore">大きなテキスト</h1> </body>
data-css-inline="ignore"
属性を使用すると、 link
やstyle
タグをスキップすることもできます。
<head> <! - 以下のスタイルは無視されます - > <style data-css-inline = "Ingrore"> h1 {color:blue; } </style> </head> <body> <h1>大きなテキスト</h1> </body>
または、 data-css-inline="keep"
属性を使用して、 style
が削除されないようにすることもできます。これは、別のstyle
タグでレスポンシブメールの@media
クエリを保持する場合に役立ちます。
<head> <! - 以下のスタイルは削除されません - > <style data-css-inline = "keep"> h1 {color:blue; } </style> </head> <body> <h1>大きなテキスト</h1> </body>
このようなタグは、 keep_style_tags
オプションがfalse
に設定されている場合でも、結果のHTMLに保持されます。
ファイルシステムからスタイルシートをロードしたい場合は、 file://
スキームを使用します。
const html:&str = "..."; fn main() - > css_inline :: result <()> {let base_url = css_inline :: url :: parse( "file:// styles/email/").expect ( "Invalid URL"); let inliner = css_inline :: cssinliner :: options()。base_url(some(base_url))。build(); let inlined = inliner.inline(html); //インラインドhtmlで何かをします。
リモートスタイルシートを解決するには、カスタムリゾルバーを実装することが可能です。
#[derive(debug、default)] pub struct customstylesheetresolver; inpl css_inline :: customstylesheetresolver {fn retraine(&self、location:&st&str) - > css_inline :: result <string> {err(self.unsupported( "external styleSported("サポートされていない "))}} fn main() - > css_inline :: result <()> {let inliner = css_inline :: cssinliner :: cssinliner :: options()。resolver(std :: sync :: arc :: new(customstylesheetresolver))。
また、外部スタイルシートをキャッシュして、過剰なネットワークリクエストを回避することもできます。
std :: num :: nonzoursize;#[cfg(feature = "styleSheet -cache")] fn main() - > css_inline :: result <()> {let inliner = css_inline :: cssinliner :: options()。キャッシュ(//これはLRUですcachecss_inline :: stylesheetcache :: new(nonzourgenize :: new(5).expect( "nivalidキャッシュサイズ")))。 not(feature = "styleSheet -cache"))] fn main() - > css_inline :: result <()> {わかりました(())}
キャッシュはデフォルトで無効になります。
css-inline
通常、数百マイクロ秒以内にHTML電子メールをインラインしますが、結果は入力の複雑さによって異なる場合があります。
css-inline==0.14.1
:
基本: 6.44 µs 、230バイト
Realistic-1: 128.59 µs 、8.58 kb
Realistic-2: 81.44 µs 、4.3 kb
GitHubページ: 224.89 ms 、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ライセンスの条件に基づいてライセンスされています。