Eleventy plugin to extract and inline critical (above-the-fold) CSS from your HTML templates.
You can easily add this plugin to your Eleventy project in just two steps or you can use index.js as a reference for your own implementation of critical CSS!
- Install
eleventy-critical-css
npm install eleventy-critical-css --save- Add the plugin to your Eleventy configuration in
.eleventy.js
const criticalCss = require("eleventy-critical-css");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(criticalCss);
};This plugin uses Critical by Addy Osmani to extract and inline critical from HTML templates i.e. any template with an output path ending in .html.
You can pass options to Critical as a second parameter of addPlugin:
const criticalCss = require("eleventy-critical-css");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(criticalCss, {
height: 1080,
width: 1920,
});
};You can see all options for Critical in the GitHub repository.
The default options passed to Critical are:
{
assetPaths: [path.dirname(outputPath)],
base: outputDir,
html: content,
inline: true,
rebase: ({ originalUrl }) => originalUrl,
}Where content and outputPath are the arguments passed to Eleventy transforms and outputDir is the output directory specified in your Eleventy configuration.
Node.js will print a warning if more than 10 listeners are added for a particular event. This is a useful default that helps finding memory leaks.
So that you don't see warnings when using eleventy-critical-css, the plugin respects the maximum number of listeners. You can use process.setMaxListeners() to increase the concurrency of eleventy-critical-css above the default, but be aware that it may be harder to detect memory leaks in your application as a result.
const criticalCss = require("eleventy-critical-css");
// Increase concurrency to 100
process.setMaxListeners(100);
// Unlimited concurrency
process.setMaxListeners(0);
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(criticalCss);
};