It can be advantageous to write some components with some local CSS rules. This package leverages the native CSS nesting and produces a fast CSS-in-JS/Component solution: there is no parsing, just directly adding a style element to the <head> tag of the DOM.
We have produced a less than 700B package to write CSS-in-JS/Component for:
These packages uses document so is not suited for SSR.
It exports the primitives: css, styled, createGlobalStyles and keyframes.
The api is very close to standard libraries.
Class
You write a template CSS string and pass it to the css function to produce a class:
const bluediv = css` background-color: bisque; color: midnightblue; `; You can use it:
<p className={bluediv}>A nice paragraph</p> Styled component
You can use styled components in the form below. An example with an animation via keyframes:
const rescale = keyframes` 0% {transform: scale(0.5)} 100% {transform: scale(1)} `; const AnimSurf = (props) => styled("span", props)` font-size: ${props.size}em; animation: ${rescale} 2s ease infinite; `; You can use it:
<AnimSurf size={3}>🏄</AnimSurf>; Conditional classes
You have two ways to use it. Define a function or object that returns CSS strings:
const styles = (props) => { base: ` cursor: pointer; font-size: ${props.size ?? 1}em; border-radius: 0.3em; padding: 0.3em; `, danger: ` color: red; animation: ${rescale} 1s ease infinite; `, disabled: ` pointer-events: none; opacity: ${props.opacity}; `; } You can write:
const Btn = (props)=> styled('button', props)` ${styles(props).base + props.danger ? styles(props).danger : ""} ` <Btn>Base button</Btn> <Btn danger={true} onClick={()=> alert('danger')}>Danger button</Btn> To make life easier, the primitive styled can read the props and sets the class.
const Button = (props) => styled("button", props)` ${styles(props).base} ${styles(props)} `; We can use it:
<Button size={3}>Base button</Button> <Button disabled className={css` box-shadow: 6px -6px teal; `} > Disabled with shadow </Button> You can use reactive styles with the style prop, extend classes for styled components, define global styles. Check the Readme and the example.
Top comments (0)