Bird
Raised Fist0
CSSmarkup~5 mins

Relative units in CSS

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
Introduction

Relative units help your website look good on different screen sizes and devices by adjusting sizes based on something else.

Making text size adjust when the user changes their browser settings.
Creating layouts that fit well on both phones and big screens.
Spacing elements so they scale nicely when the page size changes.
Setting widths or heights that depend on the size of the parent container.
Adjusting sizes based on the user's default font size for better accessibility.
Syntax
CSS
property: valueunit;

Relative units depend on something else, like the size of the parent or the root element.

Common relative units include em, rem, %, vw, and vh.

Examples
Text size is 1.5 times the size of its parent element's font size.
CSS
font-size: 1.5em;
Margin is 10% of the width of the parent element.
CSS
margin: 10%;
Width is 50% of the viewport's width (the visible part of the browser window).
CSS
width: 50vw;
Padding is 2 times the root element's font size, usually the browser default.
CSS
padding: 2rem;
Sample Program

This example shows a box that is half the width of the browser window. The text sizes and spacing use relative units so they scale nicely if you resize the window or change your browser's font size.

CSS
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Relative Units Example</title>
  <style>
    :root {
      font-size: 16px;
    }
    body {
      font-family: Arial, sans-serif;
      margin: 2rem;
    }
    .container {
      width: 50vw;
      padding: 1rem;
      border: 2px solid #4a90e2;
      background-color: #e6f0fa;
    }
    h1 {
      font-size: 2rem;
      margin-bottom: 1rem;
    }
    p {
      font-size: 1.2em;
      margin-bottom: 1rem;
    }
    button {
      font-size: 1rem;
      padding: 0.5em 1em;
      background-color: #4a90e2;
      color: white;
      border: none;
      border-radius: 0.3rem;
      cursor: pointer;
    }
    button:hover {
      background-color: #357abd;
    }
  </style>
</head>
<body>
  <main class="container" role="main">
    <h1>Relative Units Demo</h1>
    <p>This box is 50% of the viewport width (50vw).</p>
    <p>The font sizes and spacing use <code>rem</code> and <code>em</code> units.</p>
    <button aria-label="Click me button">Click Me</button>
  </main>
</body>
</html>
OutputSuccess
Important Notes

em units are relative to the font size of the parent element.

rem units are relative to the root (html) font size, usually 16px by default.

Viewport units like vw and vh depend on the browser window size, useful for responsive design.

Summary

Relative units help your page adapt to different screen sizes and user settings.

Use em for sizes relative to the parent element's font size.

Use rem for sizes relative to the root font size, and vw/vh for viewport-based sizes.

Practice

(1/5)
1. Which CSS unit is relative to the root element's font size?
easy
A. em
B. rem
C. px
D. vw

Solution

  1. Step 1: Understand root-relative units

    The rem unit always refers to the font size set on the root <html> element.
  2. Step 2: Compare with other units

    em is relative to the parent element's font size, px is fixed pixels, and vw is relative to viewport width.
  3. Final Answer:

    rem -> Option B
  4. Quick Check:

    Root font size = rem [OK]
Hint: Root font size uses rem, not em or px [OK]
Common Mistakes:
  • Confusing em with rem
  • Thinking px is relative
  • Mixing viewport units with font units
2. Which of the following is the correct syntax to set a font size to 2 times the parent element's font size?
easy
A. font-size: 2vw;
B. font-size: 2rem;
C. font-size: 2px;
D. font-size: 2em;

Solution

  1. Step 1: Identify the unit for parent-relative size

    em units scale relative to the parent element's font size.
  2. Step 2: Check other options

    rem is root-relative, px is fixed, and vw is viewport width relative.
  3. Final Answer:

    font-size: 2em; -> Option D
  4. Quick Check:

    Parent-relative font size = em [OK]
Hint: Use em for parent-relative sizes, rem for root-relative [OK]
Common Mistakes:
  • Using rem instead of em for parent size
  • Using px which is fixed size
  • Confusing vw with font size units
3. Given the CSS below, what will be the width of the <div> if the viewport width is 1000px?
div {
  width: 50vw;
}
medium
A. Depends on parent width
B. 50px
C. 500px
D. 1000px

Solution

  1. Step 1: Understand vw unit

    1vw equals 1% of the viewport width. So 50vw is 50% of viewport width.
  2. Step 2: Calculate width

    Viewport width is 1000px, so 50vw = 50% of 1000px = 500px.
  3. Final Answer:

    500px -> Option C
  4. Quick Check:

    50vw = 50% viewport width = 500px [OK]
Hint: vw is % of viewport width, multiply by viewport size [OK]
Common Mistakes:
  • Thinking vw depends on parent width
  • Confusing vw with px
  • Calculating 50vw as 50px
4. What is wrong with this CSS if the goal is to make the font size 1.5 times the parent font size?
p {
  font-size: 1.5rem;
}
medium
A. rem is root-relative, not parent-relative
B. 1.5rem is invalid syntax
C. font-size cannot use rem units
D. Should use px instead of rem

Solution

  1. Step 1: Identify unit behavior

    rem units are relative to the root font size, not the parent element.
  2. Step 2: Match goal with unit

    To scale relative to the parent font size, em should be used instead of rem.
  3. Final Answer:

    rem is root-relative, not parent-relative -> Option A
  4. Quick Check:

    Parent-relative size needs em, not rem [OK]
Hint: Use em for parent-relative font size, not rem [OK]
Common Mistakes:
  • Thinking rem scales with parent
  • Believing 1.5rem is invalid syntax
  • Using px for scalable font sizes
5. You want a button width to be 30% of the viewport width but never smaller than 200px. Which CSS snippet correctly uses relative units and a minimum width?
hard
A. button { width: 30vw; min-width: 200px; }
B. button { width: 30%; min-width: 200vw; }
C. button { width: 30rem; min-width: 200px; }
D. button { width: 30em; min-width: 200%; }

Solution

  1. Step 1: Understand width units

    30vw means 30% of viewport width, which matches the requirement.
  2. Step 2: Check minimum width

    min-width: 200px ensures the button never shrinks below 200 pixels.
  3. Step 3: Verify other options

    Other options fail: 30rem is root font-relative; 30% with min-width: 200vw uses parent-relative width and huge min-width; 30em with min-width: 200% uses font-relative and parent-relative units incorrectly.
  4. Final Answer:

    button { width: 30vw; min-width: 200px; } -> Option A
  5. Quick Check:

    30vw + min-width: 200px [OK]
Hint: Use vw for viewport %, min-width in px for fixed minimum [OK]
Common Mistakes:
  • Using % for viewport width instead of vw
  • Setting min-width in vw or % incorrectly
  • Confusing rem/em with viewport units