Inky
Inky is an HTML-based templating language that converts simple HTML into complex, responsive email-ready HTML. Designed for Foundation for Emails, a responsive email framework from ZURB.
To include only the Foundation for Emails styles in your Asset Pipeline, without Inky, use the foundation_emails gem.
Give Inky simple HTML like this:
<row>
<columns large="6"></columns>
<columns large="6"></columns>
</row>
And get complicated, but battle-tested, email-ready HTML like this:
<table class="row">
<tbody>
<tr>
<th class="small-12 large-6 columns first">
<table>
<tr>
<th class="expander"></th>
</tr>
</table>
</th>
<th class="small-12 large-6 columns first">
<table>
<tr>
<th class="expander"></th>
</tr>
</table>
</th>
</tr>
</tbody>
</table>
Getting Started
Add the following gems to your Gemfile:
gem 'inky-rb', require: 'inky'
# Stylesheet inlining for email **
gem 'premailer-rails'
Then execute:
bundle install
Run the following command to set up the required styles and mailer layout:
rails g inky:install
(You can specify the generated mailer layout filename like so: rails g inky:install some_name
)
Rename your email templates to use the .inky
file extension. Note that you'll still be able to use ERB within the .inky
templates:
welcome.html => welcome.html.inky
pw_reset.html.erb => pw_reset.html.inky
You're all set!
** The majority of email clients ignore linked stylesheets. By using a CSS inliner like premailer-rails
or roadie
, you're able to leave your stylesheets in a separate file, keeping your markup lean.
Custom Elements
Inky simplifies the process of creating HTML emails by expanding out simple tags like <row>
and <column>
into full table syntax. The names of the tags can be changed with the components
setting.
Here are the names of the defaults:
{
button: 'button',
row: 'row',
columns: 'columns',
container: 'container',
inky: 'inky',
block_grid: 'block-grid',
menu: 'menu',
center: 'center',
callout: 'callout',
spacer: 'spacer',
wrapper: 'wrapper',
menu_item: 'item'
}
Programmatic Use
The Inky parser can be accessed directly for programmatic use.