Renderer
We have learned about all basic renderable elements which are rules, keyframes and fonts. Now we can finally learn how to actually render and use them within our application. In order to do so we need a renderer.
The renderer is a single object that coordinates the whole rendering workflow. It also uses a special caching mechanism to access previously rendered styles faster and reduce the amount of DOM manipulations.
To create a new renderer, Fela provides the 
 function.createRenderer
import { createRenderer } from 'fela'
const renderer = createRenderer()We may optionally pass a configuration object as second parameter.
Read the Renderer Configuration article for further information.
Rendering Styles
The renderer provides dedicated render methods for each of the three renderable components which we introduced in the previous articles.
Tip: Read the tips and tricks of each render method first. Especially the renderRule tips are very helpful for beginners as well as advanced users.
renderRule
Takes a rule and some
propspropsIt maps each declaration to unique atomic CSS classes and returns them combined.
import { createRenderer } from 'fela'
const renderer = createRenderer()
const rule = (props) => ({  fontSize: props.fontSize,  backgroundColor: 'blue',  color: 'red',})
renderer.renderRule(rule) // => a brenderer.renderRule(rule, { fontSize: '12px' }) // => a b crenderer.renderRule(rule, { fontSize: '15px' }) // => a b doutput.css
.a {  background-color: blue;}.b {  color: red;}.c  {  font-size: 12px;}.d {   font-size: 15px;}renderKeyframe
Takes a keyframe and some
propsprops@-webkit-@-moz-import { createRenderer } from 'fela'
const renderer = createRenderer()
const keyframe = (props) => ({  from: { color: 'green' },  to: { color: props.toColor },})
renderer.renderKeyframe(keyframe, { toColor: 'red' }) // => k1renderer.renderKeyframe(keyframe, { toColor: 'blue' }) // => k2output.css
@keyframes k1 {  from {    color: green;  }  to {    color: red;  }}
@keyframes k2 {  from {    color: green;  }  to {    color: blue;  }}renderFont
Rendering fonts is a bit different.
renderFontimport { createRenderer } from 'fela'
const renderer = createRenderer()
const files = ['./fonts/Lato.ttf', './fonts/Lato.woff']
renderer.renderFont('Lato', files)renderer.renderFont('Lato-Bold', files, { fontWeight: 'bold' })renderer.renderFont('Lato-Bold-Alias', files, {  fontWeight: 'bold',  localAlias: ['Lato Bold', 'Lato-Bold'],})output.css
@font-face {  font-family: 'Lato';  src: url('./fonts/Lato.ttf') format(truetype), url('./fonts/Lato.woff') format(woff);}
@font-face {  font-family: 'Lato-Bold';  src: url('./fonts/Lato.ttf') format(truetype), url('./fonts/Lato.woff') format(woff);  font-weight: bold;}@font-face {  font-family: 'Lato-Bold-Alias';  src: local('Lato Bold'), local('Lato-Bold'),    url('./fonts/Lato.ttf') format(truetype), url('./fonts/Lato.woff') format(woff);  font-weight: bold;}Advanced API
Check out the API Reference - Renderer to learn about all of its methods. This article only describes the basic rendering methods. It does not include
clearsubscriberenderStaticRelated
- DOM Rendering
- Server Rendering
- Renderer Configuration
- API Reference - Renderer
- API Reference - createRenderer
Tools
fela-native(new tab)
Renderer for React Native