skip to content

Units on the Web

In CSS, units are used to define the size, distance, and other dimensions of elements on a web page. There are several types of units in CSS:

Absolute length units

These units are fixed and do not change with screen resolution or zoom level. They include:

Unit Name Equivalent
1cm Centimeters 37.8px
1mm Millimeters 3.78px
1Q Quarter-millimeters 0.95px
1in Inches 96px
1pc Picas 16px
1pt Points 1.33px
1px Pixels 1px

Pixel is the most commonly used absolute unit in CSS. It represents a single dot on a screen and is often used for precise measurements.

You will rarely have use for other absolute units of length on the web, though there are cases where you might want to create a layout that translates well on print. Under those conditions, real world measurements like inches, centimeters and even millimeters might come in handy.


The following examples have their width set to the respective units and measurements:


Relative length units

These units are relative to other elements on the page or to the viewport size. They include:

Unit Relative to
vw % of the viewport's width
vh % of the viewport's height
vmin % of the viewport's smaller dimension
vmax % of the viewport's larger dimension
vb % of the size of the initial containing block in the direction of the root element's block axis
vi % of the size of the initial containing block in the direction of the root element's inline axis
svw svh % of the small viewport's width and height, respectively
lvw lvh % of the large viewport's width and height, respectively
dvw dvh % of the dynamic viewport's width and height, respectively
% % of the parent element


Note how(try resizing your browser window) the width of these elements change according to the size(height and width) of the viewport(your browser window):


Font-relative length units

These units are used to define the size of text, and are relative to the font-size or line-height of the element. They include:

Unit Relative to
em Font size of the parent
rem Font size of the root element
lh Line height of the element
rlh Line height of the root element


These units are commonly used to define the font-size and width of elements:


em and rem are the two relative lengths you are most likely to encounter when sizing anything from boxes to text. It's worth understanding how these work, and the differences between them.

The below examples provide a demonstration.

To start with, we set 16px as the font-size on the <html> element:

html {
    font-size: 16px;

Thanks to the cascading nature of CSS, this means that the default font-size of our document is now 16px and is thusly inherited by all elements that don't otherwise have a specified font-size.

We can now use em and rem to directly reference this unit of measurement, as we've set 1em & 1rem = 16px.

So we can write CSS like this:

p {
    font-size: 2rem /* or 2 * 16px = 32px */

Say we want to change this for a specific element, but not everywhere on the page. All we need to do in this case, is reference the parent element(with em) instead of the root element(with rem) and update the pixel value of the parent accordingly:

.text-block {
    font-size: 20px
.text-block p {
    font-size: 2em /* or 2 * 20px = 40px */

em and rem are very powerful tools when attempting to scale elements in relation to one another.

Other length units

CSS also supports other units such as the ex unit (relative to the x-height of the font), the ch unit (relative to the width of the "0" character in the font), and the fr unit (used in CSS Grid Layout to distribute available space).

Unit Description
fr Used in CSS Grid Layout to distribute available space
ex Relative to the x-height of the the element's font
ch The advance measure (width) of the glyph "0" of the element's font.


With CSS Grid Layout, we get a new flexible unit: the fr unit. This is a fractional unit which means that 1fr takes up 1 part of the available space.

In the following example we're working with 4 columns which in turn means that 1fr = 25%

.grid {
    display: grid;
    gap: 5px;

    grid-template-columns: 1fr 1fr 1fr 1fr;

    grid-template-rows: 100px 200px 100px;
        "head head . side"
        "main main . side"
        "footer footer footer footer";


While you can accomplish a lot with knowledge of just a few of the units available to you, it is very beneficial to have a grasp of them all.

Without insight into the different unit types, you couldn't do fun stuff like fluid typography:

html {
    font-size: calc(16px + 6 * ((100vw - 320px) / 680));