inline styler

Creates HTML emails with maximal CSS compatibility by inlining external CSS files.

207
52
Python

Inline Styler makes CSS compatible with email clients.

It’s a service which, when given a block of HTML including CSS, will parse the CSS and convert it to inline style="" attributes on each elements matched by the CSS rules found.

The benefit of this is primarily in developing HTML emails. The most common email clients have patchy support for <style> or <link> elements, but do on the whole support a varied set of CSS properties. Its therefore necessary to instead define styles in “style” attributes on each of the elements themselves, which is tedious for anything but the simplest of emails and introduces significant code maintenance problems. The Inline Styler frees up the developer to write CSS in less tedious/more maintainable ways: using proper selectors and rules, grouped in either a stylesheet or a <style> block. The Inline Styler converts these rules into the inline “style” attributes for you.

Additionally, among the email clients who do support CSS, support for individual CSS properties is variable. The Inline Styler will analyse your CSS and estimate a compatibility rating across all the email clients as a whole, alerting you to any particular properties likely to reduce compatibility.

Usage

To use this app, CSS you wish to be “inlined” must be declared in the HTML either:

  • linked absolutely e.g <link rel="stylesheet" href="http://mysite.com/styles.css" /> or
  • provided in a <style> block in the <head> of the HTML, without @imports

Self-hosting requirements

This file requires periodic updates as Campaign Monitor update their spreadsheet. Comparing the existing file to CM’s spreadsheet, the key differences are that their XLS has been stripped of formatting, blank lines or duplicate groups of selector/element information.

Support

Inline Styler was written several years ago partly as a personal “Hello World” experiment to learn Django/Python. I welcome anyone willing to fork and contribute to the code, but unfortunately I don’t have time to maintain this myself - for example updating the css compliance CSV. I’m instead releasing it to the public after many requests for the source.

Questions/Discussion

  • Find me on twitter at @davecranwell