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.