css_inline
เป็นไลบรารีประสิทธิภาพสูงสำหรับการ inlining CSS ลงในแอตทริบิวต์ HTML 'Style'
ห้องสมุดนี้ได้รับการออกแบบมาสำหรับสถานการณ์เช่นการเตรียมอีเมล HTML หรือฝัง HTML ลงในหน้าเว็บของบุคคลที่สาม
ตัวอย่างเช่นลังแปลง HTML เช่นนี้:
<html> <head> <style> H1 {color: blue; } </style> </head> <body> <h1> ข้อความใหญ่ </h1> </body> </html>
เข้าไปข้างใน:
<html> <head> </head> <body> <h1 style = "color: blue;"> big text </h1> </body> </html>
ใช้ส่วนประกอบที่เชื่อถือได้จากโครงการเซอร์โวของ Mozilla
Inlines CSS จาก style
and link
Tags
ลบแท็ก 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> ข้อความใหญ่ </h1> </body> </ html> "#; fn main () -> css_inline :: result <()> {let inlined = css_inline :: inline (html)?; // ทำ บางสิ่งบางอย่างที่มี HTML Inlined เช่นส่งอีเมล ((())}
โปรดทราบว่า css-inline
จะเพิ่ม html
และแท็ก body
ที่หายไปโดยอัตโนมัติดังนั้นเอาต์พุตจึงเป็นเอกสาร HTML ที่ถูกต้อง
หรือคุณสามารถอินไลน์ CSS เป็นชิ้นส่วน HTML รักษาโครงสร้างดั้งเดิม:
Fragment const: & str = r#"<main> <h1> สวัสดี </h1> <section> <p> ฉันเป็นใคร </p> </section> </main>"#; const css: & str = r# "p {color: red;} h1 {color: blue;}"#; fn main () -> css_inline :: result <()> {let inlined = css_inline :: inline_fragment (แฟรกเมนต์, css)?; ok (())}
css-inline
สามารถกำหนดค่าได้โดยใช้ CSSInliner::options()
ที่ใช้รูปแบบการสร้าง:
const html: & str = "... "; fn main () -> css_inline :: ผลลัพธ์ <()> {ปล่อยให้ inliner = css_inline :: cssinliner :: ตัวเลือก (). load_remote_stylesheets (เท็จ) .build (); = inliner.Inline (html)?; // ทำอะไรบางอย่างกับ html inlined เช่นส่งไฟล์ emailok (())}
inline_style_tags
ระบุว่าจะอินไลน์ CSS จากแท็ก "Style" หรือไม่ ค่าเริ่มต้น: true
keep_style_tags
ระบุว่าจะเก็บแท็ก "Style" ไว้หลังจาก inlining หรือไม่ ค่าเริ่มต้น: false
keep_link_tags
ระบุว่าจะเก็บแท็ก "ลิงก์" หลังจากการ inlining หรือไม่ ค่าเริ่มต้น: false
base_url
URL พื้นฐานที่ใช้ในการแก้ไข URL ที่สัมพันธ์กัน หากคุณต้องการโหลด Stylesheets จากระบบไฟล์ของคุณให้ใช้ file://
Scheme ค่าเริ่มต้น: None
load_remote_stylesheets
ระบุว่าควรโหลดสไตล์ชีทระยะไกลหรือไม่ ค่าเริ่มต้น: true
cache
ระบุแคชสำหรับสไตล์ชีทภายนอก ค่าเริ่มต้น: None
extra_css
CSS พิเศษที่จะถูก inlined ค่าเริ่มต้น: None
preallocate_node_capacity
ขั้นสูง . preallocates ความจุสำหรับโหนด HTML ในระหว่างการแยกวิเคราะห์ สิ่งนี้สามารถปรับปรุงประสิทธิภาพเมื่อคุณมีการประมาณจำนวนโหนดในเอกสาร HTML ของคุณ ค่าเริ่มต้น: 32
นอกจากนี้คุณยังสามารถข้าม CSS Inlining สำหรับแท็ก HTML ได้โดยการเพิ่มแอตทริบิวต์ data-css-inline="ignore"
ลงไป:
<head> <style> H1 {สี: สีน้ำเงิน; } </style> </head> <body> <!-แท็กด้านล่างจะไม่ได้รับสไตล์เพิ่มเติม-> <h1 data-css-inline = "ละเว้น"> ข้อความใหญ่ </h1> </body>
แอตทริบิวต์ data-css-inline="ignore"
ยังช่วยให้คุณข้าม link
และแท็ก style
:
<head> <!-สไตล์ด้านล่างถูกละเว้น-> <สไตล์ data-css-inline = "ละเว้น"> h1 {color: blue; } </style> </head> <body> <H1> ข้อความใหญ่ </h1> </body>
อีกทางเลือกหนึ่งคุณอาจป้องกันไม่ให้มีการลบ style
โดยใช้แอตทริบิวต์ data-css-inline="keep"
สิ่งนี้มีประโยชน์หากคุณต้องการเก็บ @media
Queries สำหรับอีเมลตอบสนองในแท็ก style
แยกต่างหาก:
<head> <!-สไตล์ด้านล่างจะไม่ถูกลบ-> <สไตล์ data-css-inline = "Keep"> h1 {color: blue; } </style> </head> <body> <H1> ข้อความใหญ่ </h1> </body>
แท็กดังกล่าวจะถูกเก็บไว้ใน HTML ผลลัพธ์แม้ว่าตัวเลือก keep_style_tags
จะถูกตั้งค่าเป็น false
หากคุณต้องการโหลด Stylesheets จากระบบไฟล์ของคุณให้ใช้ file://
Scheme:
const html: & str = "... "; fn main () -> css_inline :: result <()> {ให้ base_url = css_inline :: url :: parse ("ไฟล์: // styles/email/") ("URL ไม่ถูกต้อง"); ให้ inliner = CSS_INLINE :: CSSINLINER :: OPTIONS (). BASE_URL (บาง (base_url)). build (); ปล่อยให้ inlined = inliner.Inline (html); // ทำอะไรกับ html ที่ inlined, เช่นส่งอีเมล
สำหรับการแก้ไขสไตล์ชีทระยะไกลเป็นไปได้ที่จะใช้ตัวแก้ไขที่กำหนดเอง:
#[Derive (Debug, Default)] Pub struct customstylesheetresolver; INDIM CSS_INLINE :: StylesHeetResolver สำหรับ CustomStylesheetResolver {FN Retrieve (& Self, Location: & Str) -> CSS_INLINE :: ผลลัพธ์ <String> ไม่รองรับ "))}} fn main () -> css_inline :: ผลลัพธ์ <()> {ปล่อยให้ inliner = css_inline :: cssinliner :: ตัวเลือก (). ตัวแก้ไข (std :: sync :: arc :: ใหม่ }
นอกจากนี้คุณยังสามารถแคชสไตล์ชีทภายนอกเพื่อหลีกเลี่ยงคำขอเครือข่ายที่มากเกินไป:
ใช้ std :: num :: nonzerousize;#[cfg (feature = "stylesheet -cache")] fn main () -> css_inline :: result <()> {let inliner = css_inline :: cssinliner :: ตัวเลือก () แคช (// นี่คือ LRU cachecss_inline :: stylesheetcache :: new (nonzerueize :: ใหม่ (5) .Expect ("ขนาดแคชที่ไม่ถูกต้อง"))). build (); ok (())} // บล็อกนี้อยู่ที่นี่เพื่อจุดประสงค์ในการทดสอบ#[CFG (CFG (CFG (CFG ไม่ใช่ (feature = "stylesheet -cache"))] fn main () -> css_inline :: result <()> {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 ms , 1.81 MB
มาตรฐานเหล่านี้ดำเนินการโดยใช้ rustc 1.78
บน M1 Max สามารถพบได้ใน css-inline/benches/inliner.rs
ติดตั้งด้วย cargo
:
cargo install css-inline
คำสั่งต่อไปนี้มีสาย CSS ในหลายเอกสารในแบบคู่ขนาน ไฟล์ผลลัพธ์จะถูกบันทึกเป็น inlined.email1.html
และ inlined.email2.html
:
css-inline email1.html email2.html
สำหรับรายละเอียดทั้งหมดของตัวเลือกที่มีอยู่คุณสามารถใช้ --help
Flag:
css-inline --help
หากคุณสนใจที่จะเรียนรู้ว่าห้องสมุดนี้ถูกสร้างขึ้นอย่างไรและทำงานภายในอย่างไรให้ตรวจสอบบทความเหล่านี้:
ลัง
การผูก Python
หากคุณมีคำถามหรือการอภิปรายที่เกี่ยวข้องกับห้องสมุดนี้โปรดเข้าร่วม Gitter ของเรา!
โครงการนี้ได้รับใบอนุญาตภายใต้ข้อกำหนดของใบอนุญาต MIT