css_inline -это высокоэффективная библиотека для внедрения CSS в атрибуты стиля HTML.
Эта библиотека предназначена для сценариев, таких как подготовка электронных писем HTML или внедрение HTML в сторонние веб-страницы.
Например, ящик преобразует HTML, как это:
<html>
<head> <style> H1 {Color: Blue; } </style>
</head>
<body> <h1> Большой текст </h1>
</body> </html>в:
<html> <Head> </head> <body> <h1 style = "color: blue;"> Большой текст </h1> </body> </html>
Использует надежные компоненты из сервопривода Mozilla
Встроенные CSS из тегов style и link
Удаляет теги 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)?; // do Что -то с вставленным HTML, например, отправить emailok (())}}}}} Обратите внимание, что css-inline автоматически добавляет отсутствующие html и теги body , поэтому вывод является допустимым документом HTML.
В качестве альтернативы, вы можете внедрить CSS в фрагмент HTML, сохраняя исходную структуру:
Const Fragment: & str = r#"<main> <h1> hello </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 (fragment, css)?; ok (())} css-inline может быть настроен с помощью CSSInliner::options() , который реализует шаблон застройщика:
const html: & str = "..."; fn main () -> css_inline :: result <()> {letiner = css_inline :: cssinliner :: options (). = 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
Вы также можете пропустить CSS, внедренные для тега HTML, добавив атрибут data-css-inline="ignore" :
<голова>
<style> H1 {цвет: синий; } </style> </head> <body>
<!-тег ниже не получит дополнительных стилей->
<h1 data-css-inline = "игнорировать"> Большой текст </h1> </body> Атрибут data-css-inline="ignore" также позволяет пропустить link и теги style :
<голова>
<!-Стили ниже игнорируются->
<стиль data-css-inline = "игнорировать"> h1 {color: blue; } </style> </head> <body>
<h1> Большой текст </h1> </body> В качестве альтернативы, вы можете удержать style от удаления, используя атрибут data-css-inline="keep" . Это полезно, если вы хотите сохранить запросы @media для адаптивных электронных писем в отдельных тегах style :
<голова>
<!-стили ниже не удалены->
<стиль data-css-inline = "Keep"> H1 {Color: Blue; } </style> </head> <body>
<h1> Большой текст </h1> </body> Такие теги будут храниться в полученном HTML, даже если опция keep_style_tags установлена на false .
Если вы хотите загрузить таблицы стилей из вашей файловой системы, используйте схему file:// :
const html: & str = "..."; fn main () -> css_inline :: result <()> {let base_url = css_inline :: url :: parse ("file: // email/emike/"). ("Неверный URL"); пусть Inliner = css_inline :: cssinliner :: options (). base_url (некоторые (base_url)). build (); let Inliced = inliner.inline (html); // Сделать что -нибудь с вставленным html, например, Отправить emailok (())}}}}}}}}}}}}Для разрешения удаленных таблиц стилей можно реализовать пользовательский резолювер:
#[derive (debug, default)] Pub struct customstylesheetresolver; Impl css_inline :: styleSheetResolver для CustomStylesheetResolver Не поддерживается "))}} fn main () -> css_inline :: result <()> {let inliner = css_inline :: cssinliner :: options (). Resolver (std :: sync :: arc :: new (CustomStyLesheetResolver)). Build (); OK (()) }Вы также можете кэшировать внешние таблицы стилей, чтобы избежать чрезмерных сетевых запросов:
Используйте std :: num :: nonzecysize;#[cfg (feature = "stylesheet -cache")] fn main () -> css_inline :: result <()> {letiner = css_inline :: cssinliner :: options (). кэш (// это LRU cachecss_inline :: styleSheetCache :: new (nonzEnceedize :: new (5) .expect ("Размер недействительного кэша"))). Build (); OK (())} // Этот блок здесь для тестирования#[cfg (()} // этот блок#[cfg () NOT (feature = "styleShie -cache"))] fn main () -> css_inline :: result <()> {Хорошо(())}Кэширование отключено по умолчанию.
css-inline , как правило, внедряет HTML-электронные письма в пределах сотен микросекунд, хотя результаты могут варьироваться в зависимости от сложности ввода.
Тесты для css-inline==0.14.1 :
Базовый: 6,44 мкс , 230 байтов
Реалистичный-1: 128,59 мкс , 8,58 КБ
Реалистично-2: 81,44 мкс , 4,3 КБ
GitHub Page: 224,89 мс , 1,81 МБ
Эти тесты, проведенные с использованием 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 :
css-inline --helpЕсли вы заинтересованы в том, чтобы узнать, как была создана эта библиотека и как она работает внутри, ознакомьтесь с этими статьями:
Ржавчатый ящик
Привязки Python
Если у вас есть какие -либо вопросы или дискуссии, связанные с этой библиотекой, присоединяйтесь к нашему дручке!
Этот проект лицензирован в соответствии с условиями лицензии MIT.