ts
import { className, attribute, classNames } from 'effcss';
// CSS is written into the shared stylesheet right here
const centerCls = className({ margin: 'auto' });
const markerAttr = attribute({ fontWeight: 'bold' });
const utils = classNames<Utils>((selectors) => {
const { w } = selectors;
return {
[w.s]: { width: '12px' },
[w.m]: { width: '16px' }
};
});ts
import { lazyClassName, lazyAttribute, lazyClassNames } from 'effcss';
// nothing is generated at creation time
const centerCls = className.lazy({ margin: 'auto' });
const markerAttr = attribute.lazy({ fontWeight: 'bold' });
const utils = classNames.lazy<Utils>((selectors) => {
const { w } = selectors;
return {
[w.s]: { width: '12px' },
[w.m]: { width: '16px' }
};
});
// ... later, where the value is actually consumed:
<div className={centerCls()} {...markerAttr()}> // generates the anonymous rules
<div className={utils({ w: 'm' })} /> // generates the stylesheetts
const divider = className.lazy({
width: '100%',
height: '1px'
});
const layout = classNames.lazy<Layout>((selectors) => ({
[selectors.row]: {
display: 'flex'
},
// `divider` coerce to its real `.class` selector
// when `layout` will be used at the first time
[`& ${divider}`]: {
background: 'red'
}
}));ts
const divider = className.lazy(() => {
// you can create other global rules inside
// so that they are created the first time className is used
const width = variable('100%');
return {
width: width(),
height: '1px',
'&:hover': {
[width]: '50%'
}
};
});ts
import { variable, animation, classNames } from 'effcss';
const shadowColor = variable('#58666d');
const spin = animation({ to: { transform: 'rotate(360deg)' } });
const utils = classNames<Utils>((selectors) => {
const { w } = selectors;
return {
[w.s]: { width: '12px' }
};
});ts
import { configure, variable, animation, classNames } from 'effcss';
configure({ lazy: true });
// same API, different timing
const shadowColor = variable('#58666d');
const spin = animation({ to: { transform: 'rotate(360deg)' } });
// nothing is written yet
const utils = classNames.lazy<Utils>((selectors) => {
const { w } = selectors;
return {
[w.s]: { width: '12px' }
};
});
// nothing is written yet
// CSS is produced only on first real use:
`${shadowColor()} or ${shadowColor}`
`${spin()} or ${spin}`
utils({ w: 's' })