Introducing the vr unit to create simple vertical rhythm—using PostCSS
With Sass, I use a function to create simple vertical rhyhtm—generated from the base line-height—without the complexity of maintaining a baseline grid. With PostCSS, we can take this further and create a new unit.
Function-able Sass
The Sass (SCSS) function I use is very simple. It essentially returns a multiple of the base line-height to help create vertical rhythm. The function looks a little like this:
$line-height: 32px;
@function vr($amount) {
@return $line-height * $amount;
}And we can use it in our stylesheet like this:
.selector { margin-bottom: vr(2); }This will multiply the line-height by the number passed in, so the result here would be 64px.
Extending with PostCSS
After digging into PostCSS, I decided to re-create the Sass function with a PostCSS plugin. Because PostCSS is a post-processer, we are able to extend CSS. The result was postcss-vertical-rhythm, which replicates the Sass function, but using a custom CSS unit—vr—instead of a function. For example:
.selector { margin-bottom: 2vr; }This method works more like using plain CSS.
How do I use the vr unit?
Firstly, install postcss-vertical-rhythm via npm:
npm install postcss-vertical-rhythm --save-devIf you’re using gulp, you can then add it to your project like this:
gulp.task('styles', function () {
return gulp.src('source.css')
.pipe(postcss(
require('postcss-vertical-rhythm')()
))
.pipe(gulp.dest('output.css'));
});Next, we need to define the base font-size and line-height using the shorthand font property:
body {
font: 1rem/2 sans-serif;
}The font-size can be either em, rem, px or % based. postcss-vertical-rhythm will parse the property and calculate the px line-height value automatically—no variable set up required. In the case above, the line-height would be 32px.
Once this is set up, we can now use the vr unit:
p {
padding-top: 1vr
margin-bottom: 2vr;
}And with the line-height at 32px from the above font property, the output is:
p {
padding-top: 32px;
margin-bottom: 64px;
}postcss-vertical-rhythm also supports decimal values so we can easily use half or quarter values, for example: .5vr, .25vr.
Thoughts
If you have any feedback, please leave a comment below or you can find me on Twitter. If you’d like to know more more about PostCSS, I wrote about it here. Happy vertical rhythm-ing!