• Stars
    star
    3,037
  • Rank 14,198 (Top 0.3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 12 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Juice inlines CSS stylesheets into your HTML source.

Build Status Dependency Status

Juice

Given HTML, juice will inline your CSS properties into the style attribute.

Some projects using Juice

How to use

Juice has a number of functions based on whether you want to process a file, HTML string, or a cheerio document, and whether you want juice to automatically get remote stylesheets, scripts and image dataURIs to inline.

To inline HTML without getting remote resources, using default options:

var juice = require('juice');
var result = juice("<style>div{color:red;}</style><div/>");

result will be:

<div style="color: red;"></div>

Try out the web client version

What is this useful for ?

  • HTML emails. For a comprehensive list of supported selectors see here
  • Embedding HTML in 3rd-party websites.

Documentation

Juice is exposed as a standard module, and from CLI with a smaller set of options.

Options

All juice methods take an options object that can contain any of these properties, though not every method uses all of these:

  • applyAttributesTableElements - whether to create attributes for styles in juice.styleToAttribute on elements set in juice.tableElements. Defaults to true.

  • applyHeightAttributes - whether to use any CSS pixel heights to create height attributes on elements set in juice.heightElements. Defaults to true.

  • applyStyleTags - whether to inline styles in <style></style> Defaults to true.

  • applyWidthAttributes - whether to use any CSS pixel widths to create width attributes on elements set in juice.widthElements. Defaults to true.

  • extraCss - extra css to apply to the file. Defaults to "".

  • insertPreservedExtraCss - whether to insert into the document any preserved @media or @font-face content from extraCss when using preserveMediaQueries, preserveFontFaces or preserveKeyFrames. When true order of preference to append the <style> element is into head, then body, then at the end of the document. When a string the value is treated as a CSS/jQuery/cheerio selector, and when found, the <style> tag will be appended to the end of the first match. Defaults to true.

  • inlinePseudoElements - Whether to insert pseudo elements (::before and ::after) as <span> into the DOM. Note: Inserting pseudo elements will modify the DOM and may conflict with CSS selectors elsewhere on the page (e.g., :last-child).

  • preserveFontFaces - preserves all @font-face within <style></style> tags as a refinement when removeStyleTags is true. Other styles are removed. Defaults to true.

  • preserveImportant - preserves !important in values. Defaults to false.

  • preserveMediaQueries - preserves all media queries (and contained styles) within <style></style> tags as a refinement when removeStyleTags is true. Other styles are removed. Defaults to true.

  • preserveKeyFrames - preserves all key frames within <style></style> tags as a refinement when removeStyleTags is true. Other styles are removed. Defaults to true.

  • preservePseudos - preserves all rules containing pseudo selectors defined in ignoredPseudos within <style></style> tags as a refinement when removeStyleTags is true. Other styles are removed. Defaults to true.

  • removeStyleTags - whether to remove the original <style></style> tags after (possibly) inlining the css from them. Defaults to true.

  • webResources - An options object that will be passed to web-resource-inliner for juice functions that will get remote resources (juiceResources and juiceFile). Defaults to {}.

  • xmlMode - whether to output XML/XHTML with all tags closed. Note that the input must also be valid XML/XHTML or you will get undesirable results. Defaults to false.

Methods

juice(html [, options])

Returns string containing inlined HTML. Does not fetch remote resources.

  • html - html string, accepts complete documents as well as fragments
  • options - optional, see Options above

juice.juiceResources(html, options, callback)

Callback returns string containing inlined HTML. Fetches remote resources.

  • html - html string
  • options - see Options above
  • callback(err, html)
    • err - Error object or null
    • html - inlined HTML

juice.juiceFile(filePath, options, callback)

Callback returns string containing inlined HTML. Fetches remote resources.

  • filePath - path to the html file to be juiced
  • options - see Options above
  • callback(err, html)
    • err - Error object or null
    • html - inlined HTML

juice.juiceDocument($ [, options])

This takes a cheerio instance and performs inlining in-place. Returns the same cheerio instance. Does not fetch remote resources.

  • $ - a cheerio instance, be sure to use the same cheerio version that juice uses
  • options - optional, see Options above`

juice.inlineContent(html, css [, options])

This takes html and css and returns new html with the provided css inlined. It does not look at <style> or <link rel="stylesheet"> elements at all.

  • html - html string
  • css - css string
  • options - optional, see Options above

juice.inlineDocument($, css [, options])

Given a cheerio instance and css, this modifies the cheerio instance so that the provided css is inlined. It does not look at <style> or <link rel="stylesheet"> elements at all.

  • $ - a cheerio instance, be sure to use the same cheerio version that juice uses
  • css - css string
  • options - optional, see Options above

Global settings

juice.codeBlocks

An object where each value has a start and end to specify fenced code blocks that should be ignored during parsing and inlining. For example, Handlebars (hbs) templates are juice.codeBlocks.HBS = {start: '{{', end: '}}'}. codeBlocks can fix problems where otherwise juice might interpret code like <= as HTML, when it is meant to be template language code. Note that codeBlocks is a dictionary which can contain many different code blocks, so don't do juice.codeBlocks = {...} do juice.codeBlocks.myBlock = {...}

juice.ignoredPseudos

Array of ignored pseudo-selectors such as 'hover' and 'active'.

juice.widthElements

Array of HTML elements that can receive width attributes.

juice.heightElements

Array of HTML elements that can receive height attributes.

juice.styleToAttribute

Object of style property names (key) to their respective attribute names (value).

juice.tableElements

Array of table HTML elements that can receive attributes defined in juice.styleToAttribute.

juice.nonVisualElements

Array of elements that will not have styles inlined because they are not intended to render.

juiceClient.excludedProperties

Array of css properties that won't be inlined.

Special markup

data-embed

When a data-embed attribute is present on a stylesheet <link> that has been inlined into the document as a <style></style> tag by the web-resource-inliner juice will not inline the styles and will not remove the <style></style> tags.

This can be used to embed email client support hacks that rely on css selectors into your email templates.

CLI Options

To use Juice from CLI, run juice [options] input.html output.html

For a listing of all available options, just type juice -h.

Note that if you want to just type juice from the command line, you should npm install juice -g so it is globally available.

CLI Options:

The CLI should have all the above options with the names changed from camel case to hyphen-delimited, so for example extraCss becomes extra-css and webResources.scripts becomes web-resources-scripts.

These are additional options not included in the standard juice options listed above:

  • --css [filepath] will load and inject CSS into extraCss.
  • --options-file [filepath] will load and inject options from a JSON file. Options from the CLI will be given priority over options in the file when there is a conflict.
  • codeBlocks is optionally supported in the options file if you include it. This will allow you to support different template languages in a build process.

Running Juice in the Browser

Attempting to Browserify require('juice') fails because portions of Juice and its dependencies interact with the file system using the standard require('fs'). However, you can require('juice/client') via Browserify which has support for juiceDocument, inlineDocument, and inlineContent, but not juiceFile, juiceResources, or inlineExternal. Note that automated tests are not running in the browser yet.

License

MIT Licensed, see License.md

3rd-party

More Repositories

1

mongoose

MongoDB object modeling designed to work in an asynchronous environment.
JavaScript
26,622
star
2

wp-calypso

The JavaScript and API powered WordPress.com
JavaScript
12,359
star
3

_s

Hi. I'm a starter theme called _s, or underscores, if you like. I'm a theme meant for hacking so don't use me as a Parent Theme. Instead try turning me into the next, most awesome, WordPress theme out there. That's what I'm here for.
CSS
10,849
star
4

node-canvas

Node canvas is a Cairo backed Canvas implementation for NodeJS.
JavaScript
9,820
star
5

kue

Kue is a priority job queue backed by redis, built for node.js.
JavaScript
9,434
star
6

simplenote-electron

Simplenote for Web, Windows, and Linux
TypeScript
4,517
star
7

pocket-casts-android

Pocket Casts Android 🎧
Kotlin
2,440
star
8

cli-table

Pretty unicode tables for the CLI with Node.JS
JavaScript
2,243
star
9

expect.js

Minimalistic BDD-style assertions for Node.JS and the browser.
JavaScript
2,098
star
10

simplenote-ios

Simplenote for iOS
Swift
1,976
star
11

monk

The wise MongoDB API
JavaScript
1,845
star
12

knox

S3 Lib
JavaScript
1,738
star
13

simplenote-android

Simplenote for Android
Java
1,688
star
14

jetpack

Security, performance, marketing, and design tools — Jetpack is made by WordPress experts to make WP sites safer and faster, and help you grow your traffic.
PHP
1,550
star
15

pocket-casts-ios

Pocket Casts iOS app 🎧
Swift
1,464
star
16

simplenote-macos

Simplenote for macOS
Swift
1,420
star
17

antiscroll

OS X Lion style cross-browser native scrolling on the web that gets out of the way.
JavaScript
1,079
star
18

wp-desktop

WordPress.com for Desktop
981
star
19

WP-Job-Manager

Manage job listings from the WordPress admin panel, and allow users to post jobs directly to your site.
PHP
874
star
20

browser-repl

Launch a repl on your command line to any browser in the cloud.
JavaScript
728
star
21

themes

Free WordPress themes made by Automattic for WordPress.org and WordPress.com.
CSS
693
star
22

legalmattic

Democratizing WordPress.com legalese since 2014!
672
star
23

wpcom.js

WordPress.com JavaScript API client designed for Node.js and browsers
JavaScript
658
star
24

Picard

A prototype theme that uses React and WP-API
CSS
631
star
25

fb-instant-articles

Archived (see Readme). Enable Facebook Instant Articles on your WordPress site.
PHP
628
star
26

sensei

Sensei LMS - Online Courses, Quizzes, & Learning
PHP
514
star
27

developer

In your WordPress, developing locally
PHP
470
star
28

wordpress-activitypub

ActivityPub for WordPress
PHP
442
star
29

theme-components

A collection of patterns for creating a custom starter WordPress theme.
PHP
404
star
30

wp-super-cache

WP Super Cache: A fast caching engine for WordPress
PHP
399
star
31

Edit-Flow

WordPress plugin to accelerate your editorial workflow
PHP
341
star
32

o2

The o2 plugin for WordPress — blogging at the speed of thought
JavaScript
332
star
33

newspack-plugin

An advanced open-source publishing and revenue-generating platform for news organizations.
PHP
310
star
34

liveblog

Liveblogging done right. Using WordPress.
PHP
304
star
35

batcache

A memcached HTML page cache for WordPress.
PHP
278
star
36

Co-Authors-Plus

Multiple bylines and Guest Authors for WordPress
PHP
275
star
37

newspack-theme

A theme for Newspack.
PHP
265
star
38

vip-quickstart

Retired
PHP
265
star
39

Iris

A(n awesome) Color Picker
JavaScript
257
star
40

babble

Multilingual WordPress done right.
PHP
244
star
41

syntaxhighlighter

WordPress plugin that makes it easy to post syntax-highlighted code snippets.
CSS
237
star
42

VIP-Coding-Standards

PHP_CodeSniffer ruleset to enforce WordPress VIP coding standards.
PHP
210
star
43

underscores.me

PHP
209
star
44

newspack-blocks

Gutenberg blocks for the Newspack project.
PHP
193
star
45

isolated-block-editor

Repackages Gutenberg's editor playground as a full-featured multi-instance editor that does not require WordPress.
CSS
192
star
46

custom-metadata

A WordPress plugin that provides an easy way to add custom fields to your object types (post, pages, custom post types, users)
PHP
191
star
47

camptix

Moved to https://github.com/WordPress/wordcamp.org/
PHP
182
star
48

browserbuild

JavaScript
170
star
49

woocommerce-payments

Accept payments via credit card. Manage transactions within WordPress.
PHP
162
star
50

vip-go-mu-plugins

The development repo for mu-plugins used on the WordPress VIP Platform.
PHP
158
star
51

Documattic

WordPress presentations and resources shared by WordPress.com VIP
JavaScript
156
star
52

google-docs-add-on

Publish to WordPress from Google Docs
JavaScript
152
star
53

mydb

JavaScript
150
star
54

vip-scanner

Deprecated: Scan all sorts of themes and files and things! Use PHPCS and the VIP coding standards instead
PHP
140
star
55

wp-memcached

Memcached Object Cache for WordPress.
PHP
139
star
56

Genericons

A public mirror of changes to the Genericon release.
CSS
136
star
57

regenerate-thumbnails

WordPress plugin for regenerating thumbnails of uploaded images. Over 1 million active users and counting.
PHP
131
star
58

media-explorer

With Media Explorer, you can now search for tweets and videos on Twitter and YouTube directly from the Add Media screen in WordPress.
PHP
124
star
59

Rewrite-Rules-Inspector

WordPress plugin to inspect your rewrite rules.
PHP
123
star
60

PhpStorm-Resources

PhpStorm is making inroads at Automattic. Here you'll find various helpful files we've made.
123
star
61

wordbless

WorDBless allows you to use WordPress core functions in your PHPUnit tests without having to set up a database and the whole WordPress environment
PHP
122
star
62

vip-go-mu-plugins-built

The generated repo for mu-plugins used on the VIP Go platform.
PHP
120
star
63

social-logos

A repository of all the social logos we use on WordPress.com
JavaScript
119
star
64

Cron-Control

A fresh take on running WordPress's cron system, allowing parallel processing
PHP
116
star
65

block-experiments

A monorepo of Block Experiments
JavaScript
114
star
66

genericons-neue

Genericons Neue are generic looking icons, suitable for a blog or simple website
HTML
114
star
67

nginx-http-concat

WordPress plugin to perform CSS and JavaScript concatenation of individual script files into one resource request.
PHP
114
star
68

php-thrift-sql

A PHP library for connecting to Hive or Impala over Thrift
PHP
113
star
69

wp-e2e-tests

Automated end-to-end tests for WordPress.com
JavaScript
112
star
70

ad-code-manager

Easily manage the ad codes that need to appear in your templates
PHP
112
star
71

gridicons

The WordPress.com icon set
PHP
108
star
72

woocommerce-services

WooCommerce Services is a feature plugin that integrates hosted services into WooCommerce (3.0+), and currently includes automated tax rates and the ability to purchase and print USPS shipping labels.
JavaScript
104
star
73

es-backbone

ElasticSearch Backbone library for quickly building Faceted Search front ends.
JavaScript
103
star
74

syndication

Syndicate your WordPress content.
PHP
102
star
75

theme-tools

Tools for making better themes, better.
JavaScript
99
star
76

mShots

Website Thumbnail/Snapshot Service
JavaScript
94
star
77

prefork

PHP class for pre-loading heavy PHP apps before serving requests
PHP
94
star
78

phpcs-neutron-standard

A set of phpcs sniffs for PHP >7 development
PHP
93
star
79

newspack-newsletters

Author email newsletters in WordPress
PHP
89
star
80

musictheme

A theme for bands and musicians that uses an experimental Gutenberg layout.
CSS
89
star
81

gutenberg-themes-sketch

A set of Sketch files to help you design block-driven WordPress themes.
88
star
82

zoninator

Curation made easy! Create "zones" then add and order your content straight from the WordPress Dashboard.
PHP
85
star
83

cloudup-cli

cloudup command-line executable
JavaScript
83
star
84

go-search-replace

🚀 Search & replace URLs in WordPress SQL files.
Go
81
star
85

lazy-load

Lazy load images on your WordPress site to improve page load times and server bandwidth.
JavaScript
77
star
86

gutenberg-ramp

Control conditions under which Gutenberg loads - either from your theme code or from a UI
PHP
75
star
87

measure-builds-gradle-plugin

Gradle Plugin for reporting build time metrics.
Kotlin
74
star
88

auto-update

Objective-C
73
star
89

wpes-lib

WordPress-Elasticsearch Lib
PHP
73
star
90

vip-go-skeleton

The base repository structure for all VIP Go sites
PHP
72
star
91

msm-sitemap

Comprehensive sitemaps for your WordPress VIP site. Joint collaboration between Metro.co.uk, WordPress VIP, Alley Interactive, Maker Media, 10up, and others.
PHP
70
star
92

jurassic.ninja

A frontend to launching ephemeral WordPress instances that auto-destroy after some time
PHP
69
star
93

gutenberg-block-styles

An example of a simple plugin that adds a block style to Gutenberg.
PHP
68
star
94

atd-chrome

After the Deadline extension for Chrome
JavaScript
66
star
95

wp-api-console

WordPress (.com and .org) API Console written in React/Redux
JavaScript
66
star
96

eventbrite-api

The Eventbrite API plugin brings the power of Eventbrite to WordPress, for both users and developers.
PHP
65
star
97

mongo-query

mongo query API component
JavaScript
65
star
98

site-logo

Add a logo to your WordPress site. Set it once, and all themes that support it will display it automatically.
PHP
65
star
99

vip-go-nextjs-skeleton

A Next.js boilerplate for decoupled WordPress on VIP.
TypeScript
65
star
100

newspack-popups

AMP-compatible popup notifications.
PHP
61
star