This is a bit of documentation I wrote for a Sass mixin that outputs utility classes based on a map of values.
While our colors and other values should come from our design tokens (which only contain colors and font families and line height at the moment), there are many instances where either the design does not match or we haven’t created the token yet, so there is a need to create new utilities on a case by case basis, outside of what’s provided in tokens. The
basic-utility-generator is good for that!
We also have a
token-utility-generator that perhaps I will share another time. On to the docs!
Basic Utility Generator
The basic utility generator will generate utility classes based on a map of values. See the source here.
@mixin basic-utility-generator( $property (string), $values (list), $map-containing-values (map) );
Setting Up Values
Before building UI, it is recommended to assemble all color values that do not fit into tokens (example tokens for ArtNews), in a Sass map in
Here is an example of handling color values that do not fit exactly into tokens –
color-magenta is totally outside of tokens,
color-brand-primary-faded is a modification of a token.
$colors-map: ( 'color-magenta': #913769, 'color-brand-primary-faded': lighten( map-get( $TOKENS-MAP, color-brand-primary ), 20% ) );
The name of the output class will be
u-$KEY, so it is recommended to include the property name in the key of the map for readability.
Each map should consist only of values relevant to a specific property e.g.
color-magenta should not be in a
background-color-magenta: map-get( color-magenta, colors-map ) is an acceptable entry.
Using the generator
Make sure the variables file is included in
src/scss/setup.scss, and then add the following to the utility file to use the generator:
// In src/scss/03-utilities/u-color.common.async.scss @import 'setup'; @include basic-utility-generator( 'color', ( 'color-magenta', 'color-brand-primary-faded', ), $colors-map );
This will output the utilities
See this doc in the wild on the in-progress Larva wiki. I would love to use a tool like SassDoc for something like this. We are currently working out a way to statically host the Twig pattern library so that those docs can be read outside of their READMEs (example), and a sister site for Sass/CSS docs that fits into that architecture is definitely on the roadmap.
How do you eat an elephant? One bite at a time (thanks for that, Liz!).