Size: Theme: Gridlines:


The typography in Cutestrap is all oriented around a baseline grid. To get spacing consistent across all elements, we utilize one main custom property: --rhythm.

The --rhythm property and all others that are derived from it are available on every element and changing it will cascade the new values for the matched element and all children.

Code Example

The below code is copied and pasted from core.css. It’s a little complex, but keep reading on and we’ll break it down to make it more digestable.

You don’t need to ever really touch this code, since it’s just powering Cutestrap under the hood, but spending some time with it will give you more control over what you can build.

* {
    --rhythm: 2rem;
    --line-height: var(--sub-rhythm, var(--rhythm));
    --line-height-ratio: 1.4;
    --font-size: calc(var(--line-height) / var(--line-height-ratio));

body {
    font-size: var(--font-size);
    line-height: var(--line-height);

Note: You can ignore the --sub-rhythm custom property until we get to that section below. It is not defined yet, so --rhythm is used as the default.

Line Height

By default, our --line-height custom property is equal to our --rhythm. This is the overall foundation for our baseline grid, in regards to our typography.

Font Size

Our --font-size is calculated off of our --line-height using --line-height-ratio. Dividing the line height by the line height ratio gives a visually-pleasing amount of white-space between our lines.

Sub Rhythm

If --sub-rhythm is set, --line-height will use that value instead of the current --rhythm. This is helpful for when you want text to span multiple lines, but you want the margins or padding around it to still use the --rhythm of the main baseline grid.

As an example, we may want to have our h2 span three lines. So we set our --sub-rhythm to be three lines and we set the line height ratio to be tighter, since a larger font size looks better with a tighter spacing between lines.

h2 {
    --line-height-ratio: 1.2;
    --sub-rhythm: var(--rhythm-triple);
    font-size: var(--font-size);
    line-height: var(--line-height);

Note in that example, we set font-size and line-height to be their respective custom property counter part. When we changed the --line-height-ratio and the --sub-rhythm, those values were recalculated. By setting them again, we’re using those recalculated values for our current scope.