initial-css-builder
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

This library is experimental

To get a super fast first paint of your HTML pages, google recommends that you insert all CSS required to display your above the fold content directly in your page's head. So then loadding your full stylesheets can be moved after content. See https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery

To generate this critical CSS you can use tools like penthouse but as this is spinning a headless chrome under the hood, it shouldn't be used to generate the CSS on the fly. The problem is that calculating above the fold content is complicated and can't be accurate because you don't actually know your clien's browser size. Also, if the user scrolls the page while your full CSS is loading, he may see unstyled content.

initial-css-builder simply takes HTML and CSS strings and returns only the CSS used. Because it's not only above the fold CSS, I call it "initial CSS" rather than "critical CSS". Also it's lighting fast so you can safely use it to generate initial CSS on the fly for each request. It usually takes under 5ms!

Setup

npm i initial-css-builder

Usage

import initialCssBuilder from 'initial-css-builder';
 
// appCss: string containing all your app's CSS.
// If you have multiple steelsheets, simply join them together
 
// Declare getInitialCss as a global variable so CSS parsing is done only once
const getInitialCss = initialCssBuilder(appCss);
 
// For each request, you can now generate your initial CSS
// Usually takes less than 5ms!
const initialCSS = getInitialCss(contentHtml);
 
// then you should inject `initialCSS` in a `<style>` tag in your `head`

Readme

Keywords

none

Package Sidebar

Install

npm i initial-css-builder

Weekly Downloads

1

Version

1.2.0

License

MIT

Unpacked Size

360 kB

Total Files

18

Last publish

Collaborators

  • tomesterez