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)