# `drule()` Addon `drule()` (or *Dynamic Rule*) interface is similar to [`rule()`](./rule.md) interface, but also allows you to create CSS dynamically inside your render function, making it a [5th generation](https://github.com/streamich/freestyler/blob/master/docs/en/generations.md#5th-generation) interface. ```jsx const css = { border: '1px solid #888', color: '#888', }; const classNames = nano.drule(css); ``` Static use case is similar to [`rule()`](./rule.md) interface: ```jsx ``` But `drule()` also allows you to add custom styling overrides on the fly. ```jsx ``` Just like with `rule()` interface you can specify a semantic name. ```js const classNames = drule(css, 'MyButton'); ``` ## Example Below is an example of a React button component that changes its color based on `primary` prop. ```jsx const classNames = drule({ border: '1px solid #888', color: '#fff', }); const Button = ({children, primary}) => ; ``` ## Installation To use, install `drule` addon, which depends on `rule` and `cache` addons. ```js 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](./Addons.md#addon-installation).