🪶 @slimr/css 
tiny css-in-js features, inspired by the popular emotion library
Demo: CodeSandbox
Features:
- Much smaller (less bundle size)
- Less is more: faster, less bugs, no breaking changes
- Is progressive -- lazy loads styles
- Css shorthand props like chakra-ui
- CSS responsive shorthand props like chakra-ui
Context
@slimr is a set of slim React (hence '@slimr') libs. Check them all out on github!
Setup/Install
npm i @slimr/css
API
addCss
Injects css to the page head
- Queues and batches injections for better performance
- Has local cache to recall prior adds, to reduce duplicates and dom changes
import {addCSs} from '@slimr/css'
addCss(`.foo { color: green; }`)
addCss(`.foo { color: green; }`)
addCss(`.foo { background: purplse`)
css (alias for createClass)
Upserts and returns a unique css class for a given css string
- Leverages addCss under the hood, so very performant
- Supports several css short-hands, inspired by Chakra-UI's box
- Supports array values for responsive styles, similar to Chakra-UI's box. More here
import {createClass, css} from '@slimr/css'
c1 = createClass('c: red;')
c2 = createClass('c: red;')
c3 = createClass`c: red;`
c4 = css`c: red;`
<div className={css`c: red;`} />
c5 = css`c: blue;`
c6 = css`w: [100%, null, 400px]`
...and the queue will be executed next javascript tick
classJoin
Joins class names and omits falsey props
import {classJoin} from '@slimr/css'
classJoin('a', 'b', 'c')
classJoin('a', 0, 'b', null, 'c')
Comparisons
- A popular css-in-js lib that inspired this lib
Pros
Cons
- Is huge (>10kb)
- Many features require addons, which make bundle even larger
- Does not support zx prop or css shorthand props
- A popular css-in-js lib similar to Emotion but compiles out the css into css stylesheets
Pros
- More performant (zero kbs, no need for caching or Map lookups)
- Support for all the PostCSS magic you may desire
Cons
- Requires babel/bundler config
- Does not support zx prop or css shorthand props
- Is not progressive -- all styles for all components is loaded and blocks initial page paint
- Pretty much identical to Astroturf, but maybe better Vite support