Typographic styling with SCSS
Filed under #erskinedesign on March 03, 2012Originally published at web.archive.org on March 03, 2012
Friday, right after Erskine’s end-of-week pub rituals, Phil and I went back to the office with hopes of building a website. At the beginning of last week we got fairly obsessed with typographic styling, so this would be a good time to experiment with that process a bit more.
We fired up Sublime, fetched the Ultimate Package and jumped in. We started with a simple page including kitchen sink-ish html
for headings, paragraphs, links and all the other elements that get me going.
We chose a base font-size
, Phil created a baseline.png file and I ate two American style hotdogs. We got keyboard shortcuts for toggling the baseline plugged in and cranked up Lynyrd Skynyrd. It was time to make Instapaper for cats.
Typography + SCSS = love
What I love about SCSS, besides variables, is its most dangerous feature: nesting. When used smartly, nesting can make your stylesheets much more modulular, reusable and maintanable. Lets take a look at the standard workflow of styling typography and how it can be applied with SCSS.
Standard workflow
- Setup default
font-size
,line-height
andmargin
to be inherited by generic elements and ensure they’re inline with the baseline. - Put an
h1
at the top of the page, give it someline-height
andmargin
so everything is still inline with the baseline. - Do the same with
h2
throughh6
, but also ensurep + h(n)
has propermargin
and doesn’t break the baseline. - Ensure
h2 + h3
, etc., has propermargin
and doesn’t break the baseline. - Lastly, do the same for
blockquote
,table
and ALL THE OTHER THINGS.
That list isn’t too daunting, but it takes about 2 hours of pair brogramming to get right, 4-6 if you’re me and Phil. With SCSS, we can modularise this process by creating a little typographic skeleton. This doesn’t exactly speed up the process, but it’s a good example of how we can use SCSS to clean up our development.
Typographic skeleton with SCSS
First, we setup the defaults to be inherited by all of our generic elements. I know this is standard practise but for the sake of the case study I’ll include it:
body {
font:$normal percentage($basefont / 16) sans-serif;
line-height:(24 / $basefont);
}
Now that that’s done, we need to ensure p + h(n)
has proper styling and doesn’t break the baseline. Not only p
, but the other generic elements as well. This can be done beautifully with SCSS.
p, ul, dl, ol, address, figure, hr, pre, table {
margin-bottom:;
& + h2 {
padding-top:;
}
& + h3 {
padding-top:;
}
& + h4 {
padding-top:;
}
& + h5 {
padding-top:;
}
& + h6 {
padding-top:;
}
}
We need to ensure that h1 + h2
, etc. have proper styling too.
h1 {
font-size:($baseh1 / $basefont) * 1em;
line-height:;
margin:;
& + h2 {
padding-top:;
}
}
h2 {
font-size:($baseh2 / $basefont) * 1em;
line-height:;
margin:;
& + h3 {
padding-top:;
}
}
You get the point, same for h3
through h6
. Tada!
Summary
This exersise helped me learn a lot about the importance of extreme readability. It’s something I don’t think I’ve paid enough attention to in the past so effective immediately I’m adding it to my list of Things to take over-the-top on every single project.