Bird
Raised Fist0
CSSmarkup~5 mins

Viewport 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

Viewport units help you size elements based on the visible area of the browser window. This makes your design adjust smoothly when the window size changes.

To make text or images scale with the browser size for better readability.
To create full-screen sections that always fill the entire browser window.
To set margins or padding relative to the screen size for consistent spacing.
To build responsive layouts that adapt to different devices without fixed pixel sizes.
Syntax
CSS
width: 50vw;
height: 100vh;
font-size: 5vmin;

vw means 1% of the viewport's width.

vh means 1% of the viewport's height.

vmin is the smaller value between vw and vh.

vmax is the larger value between vw and vh.

Examples
This makes the div fill the entire browser window width and height.
CSS
div {
  width: 100vw;
  height: 100vh;
}
The paragraph text size adjusts based on the smaller side of the viewport, keeping it readable on all devices.
CSS
p {
  font-size: 3vmin;
}
The header has vertical padding based on viewport height and horizontal padding based on viewport width.
CSS
header {
  padding: 5vh 10vw;
}
Sample Program

This example shows a blue box that fills the whole browser window. The text inside scales with the viewport size using vmin. When you resize the browser, the box and text adjust smoothly.

CSS
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Viewport Units Example</title>
  <style>
    body, html {
      margin: 0;
      height: 100%;
    }
    .full-screen {
      width: 100vw;
      height: 100vh;
      background-color: #4a90e2;
      display: flex;
      justify-content: center;
      align-items: center;
      color: white;
      font-size: 5vmin;
      text-align: center;
      padding: 2vmin;
    }
  </style>
</head>
<body>
  <div class="full-screen">
    <p>This box fills the entire browser window.<br>Resize the window to see the text and box adjust.</p>
  </div>
</body>
</html>
OutputSuccess
Important Notes

Viewport units are great for responsive design but be careful on mobile browsers where the viewport height can change when the address bar shows or hides.

Use vmin and vmax to keep sizes balanced between width and height.

Summary

Viewport units let you size elements relative to the browser window size.

Use vw, vh, vmin, and vmax for flexible, responsive layouts.

They help your design look good on all screen sizes without fixed pixels.

Practice

(1/5)
1. What does the CSS unit 1vw represent?
easy
A. 1% of the viewport's width
B. 1% of the viewport's height
C. 1 pixel
D. 1% of the parent element's width

Solution

  1. Step 1: Understand viewport width unit

    The unit vw stands for viewport width, so 1vw equals 1% of the browser window's width.
  2. Step 2: Compare with other units

    Unlike vh which is viewport height, vw relates only to width, not height or pixels.
  3. Final Answer:

    1% of the viewport's width -> Option A
  4. Quick Check:

    1vw = 1% viewport width [OK]
Hint: Remember vw = viewport width percent [OK]
Common Mistakes:
  • Confusing vw with vh
  • Thinking vw is pixels
  • Mixing viewport units with parent size
2. Which of the following is the correct CSS syntax to set an element's height to 50% of the viewport height?
easy
A. height: 50vw;
B. height: 50vmax;
C. height: 50vmin;
D. height: 50vh;

Solution

  1. Step 1: Identify viewport height unit

    The unit vh means viewport height, so 50vh means 50% of the viewport height.
  2. Step 2: Check other units

    vw is viewport width, vmin is the smaller of width or height, and vmax is the larger. Only vh sets height relative to viewport height directly.
  3. Final Answer:

    height: 50vh; -> Option D
  4. Quick Check:

    Use vh for viewport height in CSS [OK]
Hint: Use vh for height, vw for width [OK]
Common Mistakes:
  • Using vw for height
  • Confusing vmin and vmax
  • Forgetting semicolon in CSS
3. Given this CSS:
div {
  width: 10vw;
  height: 20vh;
}

If the browser window is 1000px wide and 800px tall, what will be the div's width and height in pixels?
medium
A. Width: 200px, Height: 400px
B. Width: 10px, Height: 20px
C. Width: 100px, Height: 160px
D. Width: 1000px, Height: 800px

Solution

  1. Step 1: Calculate width from vw

    10vw means 10% of viewport width. 10% of 1000px = 100px.
  2. Step 2: Calculate height from vh

    20vh means 20% of viewport height. 20% of 800px = 160px.
  3. Final Answer:

    Width: 100px, Height: 160px -> Option C
  4. Quick Check:

    vw and vh convert to % of viewport size [OK]
Hint: Multiply vw/vh % by viewport pixels [OK]
Common Mistakes:
  • Mixing width and height values
  • Calculating percentages incorrectly
  • Confusing vh with vw
4. This CSS code is intended to make a box fill the smaller dimension of the viewport, but it doesn't work as expected:
.box {
  width: 50vmin;
  height: 50vmin;
}

What is the likely problem?
medium
A. The viewport units need a unit like px after vmin
B. The viewport size might be changing, causing unexpected results
C. vmin is not supported by browsers
D. The CSS syntax is correct; problem is elsewhere

Solution

  1. Step 1: Understand vmin behavior

    vmin uses the smaller of viewport width or height. If viewport changes size (like resizing window), the box size changes too.
  2. Step 2: Identify dynamic viewport effect

    Because viewport size can change, the box size changes dynamically, which may look like it doesn't work as expected.
  3. Final Answer:

    The viewport size might be changing, causing unexpected results -> Option B
  4. Quick Check:

    vmin depends on viewport size changes [OK]
Hint: Remember viewport units react to window resizing [OK]
Common Mistakes:
  • Thinking vmin needs px unit
  • Assuming viewport units are fixed
  • Believing vmin is unsupported
5. You want a square element that always fits inside the viewport without scrolling, using viewport units. Which CSS rule ensures the square's size adapts to the smaller viewport dimension?
hard
A. width: 100vmin; height: 100vmin;
B. width: 100vw; height: 100vh;
C. width: 100vmax; height: 100vmax;
D. width: 100%; height: 100%;

Solution

  1. Step 1: Understand vmin and vmax

    vmin is the smaller of viewport width or height, vmax is the larger.
  2. Step 2: Choose unit for fitting inside viewport

    To fit inside viewport without scrolling, use vmin so the square fits the smaller dimension.
  3. Step 3: Confirm width and height match

    Setting both width and height to 100vmin creates a square that fits inside viewport.
  4. Final Answer:

    width: 100vmin; height: 100vmin; -> Option A
  5. Quick Check:

    Use vmin for square fitting smaller viewport side [OK]
Hint: Use vmin for size based on smaller viewport side [OK]
Common Mistakes:
  • Using vmax causes overflow
  • Using 100% depends on parent size
  • Confusing vw/vh with vmin/vmax