# `rule()` Addon `rule()` is a wrapper around [`put()`](./put.md) interface; it is a [3rd generation](https://github.com/streamich/freestyler/blob/master/docs/en/generations.md#3rd-generation) interface. You can find this interface in many other CSS-in-JS libraries, it simply returns a list of class names given a CSS-like object: ```js const css = { color: 'tomato', ':hover': { color: 'blue', }, }; const className = nano.rule(css);
Hello world!
``` --- > __Nota Bene__ > > The code above will automatically generate predictable class names on the server and browser. > However, by default it uses unstable JSON stringify, which is fine in most cases if your > app runs only in a browser, however, if you render on the server side and want to re-hydrate > your CSS, you should use [`stable` addon](./stable.md), which makes sure that class names > are the same between different JavaScript environments. --- Optionally, using the second argument, you can specify a name or your style explicitly for performance and semantic reasons. ```js const className = rule(css, 'RedText'); ``` > __P.S.__ > > If you specify all style names explicitly, you don't need to install `stable` addon. ## Leading Space `nano-css` always returns class names with a leading space, so you can concatenate those with other classes. ```jsx const otherClass = 'foo'; const className = rule(css);
Hello world!
``` This results in: ```html
Hello world!
``` ## Installation Simply add the the `rule` addon. ```js import {create} from 'nano-css'; import {addon} from 'nano-css/addon/rule'; const nano = create(); addon(nano); const {rule} = nano; export { rule } ``` Read more about the [Addon Installation](./Addons.md#addon-installation).