drule() Addon
March 18, 2018 ยท View on GitHub
drule() (or Dynamic Rule) interface is similar to rule() interface, but also allows you
to create CSS dynamically inside your render function, making it a 5th generation
interface.
const css = {
border: '1px solid #888',
color: '#888',
};
const classNames = nano.drule(css);
Static use case is similar to rule() interface:
<button className={classNames()}>Click me!</button>
<button className={classNames.toString()}>Click me!</button>
<button className={'' + classNames}>Click me!</button>
<button className={String(classNames)}>Click me!</button>
But drule() also allows you to add custom styling overrides on the fly.
<button className={classNames({color: 'red'})}>Click me!</button>
Just like with rule() interface you can specify a semantic name.
const classNames = drule(css, 'MyButton');
Example
Below is an example of a React button component that changes its color based on primary prop.
const classNames = drule({
border: '1px solid #888',
color: '#fff',
});
const Button = ({children, primary}) =>
<button className={classNames({
background: primary ? 'blue' : 'grey'
})}>
{children}
</button>;
Installation
To use, install drule addon, which depends on rule and cache addons.
import {create} from 'nano-css';
import {addon as addonCache} from 'nano-css/addon/cache';
import {addon as addonRule} from 'nano-css/addon/rule';
import {addon as addonDrule} from 'nano-css/addon/drule';
const nano = create();
addonCache(nano);
addonRule(nano);
addonDrule(nano);
const {rule, drule} = nano;
export {
rule,
drule
}
Read more about the Addon Installation.