Bird
Raised Fist0
SASSmarkup~10 mins

Typography scale generation in SASS - Browser Rendering Trace

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Render Flow - Typography scale generation
[Define base font size] -> [Define scale ratio] -> [Calculate scale steps] -> [Generate CSS font-size values] -> [Apply to elements] -> [Browser renders text sizes]
The browser first reads the base font size and scale ratio defined in SASS, calculates font sizes for each step in the scale, then applies these sizes to elements, resulting in visually proportional text sizes.
Render Steps - 6 Steps
Code Added:$base-size: 1rem;
Before
[Text all same size]
[ h1 ]
[ h2 ]
[ p  ]
After
[Text base size 1rem]
[ h1 ]
[ h2 ]
[ p  ]
Set the base font size to 1rem, so all text starts from this size.
🔧 Browser Action:Stores base font size for calculations
Code Sample
This code creates a typography scale where headings and paragraph text have font sizes increasing by a ratio of 1.25 steps, producing visually balanced text sizes.
SASS
<main>
  <h1>Heading 1</h1>
  <h2>Heading 2</h2>
  <p>Paragraph text</p>
</main>
SASS
$base-size: 1rem;
$scale-ratio: 1.25;

@function scale($step) {
  @return $base-size * pow($scale-ratio, $step);
}

h1 {
  font-size: scale(3);
}
h2 {
  font-size: scale(2);
}
p {
  font-size: scale(0);
}
Render Quiz - 3 Questions
Test your understanding
After applying step 4, what font size does h1 have relative to base size?
AAbout 1.25 times the base size
BAbout 1.95 times the base size
CEqual to the base size
DAbout 3 times the base size
Common Confusions - 3 Topics
Why does font-size not change if I forget to use the scale function?
Without calling the scale function, font-size stays at default or base size, so no visual difference happens. See render_step 3 where the function is defined but not yet used.
💡 Always apply font-size with scale() to see size changes.
Why do headings look too close in size?
If the scale ratio is too small (like 1.1), steps produce small size differences. Increasing ratio (e.g., 1.25) creates clearer size steps. See render_step 2 for ratio effect.
💡 Use a ratio around 1.2 to 1.3 for visible size differences.
Why does scale(0) return the base size?
Because any number to the power 0 is 1, so scale(0) = base-size * 1 = base-size. This keeps the paragraph text at base size as in render_step 6.
💡 Step 0 means base font size.
Property Reference
PropertyValue AppliedEffect on Font SizeCommon Use
$base-size1remSets starting font size for scaleBase text size
$scale-ratio1.25Multiplies font size per stepControls size difference between steps
scale($step)FunctionCalculates font size by base * ratio^stepGenerates consistent scale sizes
font-sizescale(n)Applies calculated font size to elementStyling headings, paragraphs
Concept Snapshot
Typography scale uses a base font size and a scale ratio. Each step multiplies the base size by the ratio to get new sizes. Use a SASS function to calculate sizes for headings and text. Common ratio values are between 1.2 and 1.3 for clear size differences. Step 0 returns the base font size. This creates visually balanced, consistent typography.

Practice

(1/5)
1. What is the main purpose of a typography scale in Sass?
easy
A. To create random font sizes for variety
B. To add animations to text elements
C. To change colors of text dynamically
D. To keep font sizes balanced and consistent across a website

Solution

  1. Step 1: Understand typography scale concept

    A typography scale is used to keep font sizes balanced and consistent, avoiding random sizes.
  2. Step 2: Identify the correct purpose

    Options A, C, and D describe unrelated tasks like randomness, colors, or animations, which are not the purpose of typography scales.
  3. Final Answer:

    To keep font sizes balanced and consistent across a website -> Option D
  4. Quick Check:

    Typography scale = balanced font sizes [OK]
Hint: Typography scales keep font sizes consistent and balanced [OK]
Common Mistakes:
  • Thinking typography scales create random sizes
  • Confusing typography scale with color or animation features
  • Assuming typography scales are for layout spacing
2. Which of the following is the correct Sass function syntax to calculate a typography scale size with base size $base, ratio $ratio, and step $step?
easy
A. font-size: $base * $ratio ^ $step;
B. font-size: $base * math.pow($ratio, $step);
C. font-size: $base * ($ratio ** $step);
D. font-size: $base * pow($ratio, $step);

Solution

  1. Step 1: Recall Sass math function syntax

    Sass uses the math module for functions like pow(), so the correct syntax is math.pow($ratio, $step).
  2. Step 2: Check each option

    font-size: $base * pow($ratio, $step); uses pow() without math module, which is invalid. font-size: $base * $ratio ^ $step; uses ^ which is not Sass syntax. font-size: $base * ($ratio ** $step); uses ** which is not Sass syntax for exponentiation. font-size: $base * math.pow($ratio, $step); correctly uses math.pow($ratio, $step).
  3. Final Answer:

    font-size: $base * math.pow($ratio, $step); -> Option B
  4. Quick Check:

    Sass math.pow() = correct syntax [OK]
Hint: Use math.pow() with math module for exponent in Sass [OK]
Common Mistakes:
  • Using ^ for exponent instead of math.pow()
  • Forgetting to use math module prefix
  • Trying pow() without math module
3. Given the Sass code:
$base: 1rem;
$ratio: 1.25;
$step: 3;
$size: $base * math.pow($ratio, $step);

What is the computed value of $size in rem units?
medium
A. 1.953125rem
B. 3.125rem
C. 2.4414rem
D. 4.0rem

Solution

  1. Step 1: Calculate math.pow($ratio, $step)

    1.25 raised to the power 3 = 1.25 * 1.25 * 1.25 = 1.953125.
  2. Step 2: Multiply by $base

    $base is 1rem, so 1rem * 1.953125 = 1.953125rem.
  3. Step 3: Check options carefully

    1.953125rem shows 1.953125rem which matches calculation, but 2.4414rem shows 2.4414rem which is 1.25^4, not ^3.
  4. Final Answer:

    1.953125rem -> Option A
  5. Quick Check:

    1rem * 1.25^3 = 1.953125rem [OK]
Hint: Calculate ratio power step, then multiply by base size [OK]
Common Mistakes:
  • Calculating power incorrectly (e.g., 1.25^4 instead of ^3)
  • Multiplying base size by wrong power result
  • Confusing rem units with pixels
4. Identify the error in this Sass function for typography scale:
@function scale($base, $ratio, $step) {
  @return $base * pow($ratio, $step);
}
medium
A. Missing math module prefix for pow function
B. Incorrect parameter names
C. Using @return instead of return
D. Function syntax is invalid in Sass

Solution

  1. Step 1: Check Sass math function usage

    In Sass, pow() is inside the math module, so it must be called as math.pow().
  2. Step 2: Verify other syntax

    Parameter names are fine, @return is correct Sass syntax, and function syntax is valid.
  3. Final Answer:

    Missing math module prefix for pow function -> Option A
  4. Quick Check:

    Use math.pow() not pow() alone [OK]
Hint: Always prefix pow() with math. in Sass functions [OK]
Common Mistakes:
  • Calling pow() without math prefix
  • Confusing @return with return keyword
  • Thinking function syntax is wrong
5. You want to generate a typography scale in Sass that skips step 0 and starts from step 1, doubling the font size each step from a base of 1rem. Which Sass code correctly generates the size for step 3?
hard
A. $base: 1rem; $ratio: 2; $step: 3; $size: $base * math.pow($ratio, $step + 1);
B. $base: 1rem; $ratio: 2; $step: 3; $size: $base * math.pow($ratio, $step);
C. $base: 1rem; $ratio: 2; $step: 3; $size: $base * math.pow($ratio, $step - 1);
D. $base: 1rem; $ratio: 2; $step: 3; $size: $base * math.pow($ratio, 0);

Solution

  1. Step 1: Understand skipping step 0

    Skipping step 0 means step 1 corresponds to power 0, so power = step - 1.
  2. Step 2: Apply formula for step 3

    For step 3, power = 3 - 1 = 2, so size = 1rem * 2^2 = 4rem.
  3. Step 3: Check options

    $base: 1rem; $ratio: 2; $step: 3; $size: $base * math.pow($ratio, $step - 1); uses $step - 1, correctly skipping step 0. $base: 1rem; $ratio: 2; $step: 3; $size: $base * math.pow($ratio, $step); uses $step directly, which would give 8rem for step 3. Options A and D are incorrect powers.
  4. Final Answer:

    $base * math.pow($ratio, $step - 1); -> Option C
  5. Quick Check:

    Skip step 0 by subtracting 1 from step [OK]
Hint: Subtract 1 from step to skip zero step in scale [OK]
Common Mistakes:
  • Not adjusting step to skip zero
  • Using step directly causing wrong size
  • Confusing power calculation with addition