The <length> CSS data type denotes distance measurements. It is a <number> immediately followed by a length unit (px, em, pc, in, mm, …). Like for any CSS dimension, there is no space between the unit literal and the number. The length unit is optional after the <number> 0.

Many CSS properties take <length> values, such as width, marginpadding, font-size, border-width, text-shadow, …

For some properties, using negative lengths is a syntax error, but for some properties, negative lengths are allowed. Please note that although <percentage> values are also CSS dimensions, and are accepted by some CSS properties that accept <length> values, they are not themselves, <length> values.

Interpolation

Values of the <length> CSS data type can be interpolated in order to allow animations. In that case they are interpolated as real, floating-point, numbers. The interpolation happens on the calculated value. The speed of the interpolation is determined by the timing function associated with the animation.

Units

Relative length units

Font-relative lengths

em
This unit represents the calculated font-size of the element. If used on the font-size property itself, it represents the inherited font-size of the element.
This unit is often used to create scalable layouts, which keep the vertical rhythm of the page, even when the user changes the size of the fonts. The CSS properties line-height, font-size, margin-bottom and margin-top often have values expressed in em.
ex
This unit represents the x-height of the element's font. On fonts with the 'x' letter, this is generally the height of lowercase letters in the font; 1ex ≈ 0.5em in many fonts.
ch
This unit represents the width, or more precisely the advance measure, of the glyph '0' (zero, the Unicode character U+0030) in the element's font.
ic
Equal to the used advance measure of the “水” (CJK water ideograph, U+6C34) glyph found in the font used to render it.
rem
This unit represents the font-size of the root element (e.g. the font-size of the <html> element). When used on the font-size on this root element, it represents its initial value.
This unit is practical in creating perfectly scalable layout. If not supported by the targeted browsers, such layout can be achieved using the em unit, though this is slightly more complex.
lh
Equal to the computed value of the line-height property of the element on which it is used, converted to an absolute length.
rlh
Equal to the computed value of line-height property on the root element, converted to an absolute length. When specified on the font-size or line-height properties of the root element, the rlh units refer to the properties' initial value.

Viewport-percentage lengths

Viewport-percentage lengths defined a length relatively to the size of viewport, that is the visible portion of the document. Only Gecko-based browsers are updating the viewport values dynamically, when the size of the viewport is modified; by modifying the size of the window on a desktop computer, or by turning the device on a phone or a tablet.

In conjunction with overflow:auto, space taken by eventual scrollbars is not subtracted from the viewport, whereas it is subtracted in the case of overflow:scroll.

In a @page at-rule declaration block, the use of the viewport lengths are invalid and the declaration will be dropped.

vh
1/100th of the height of the viewport.
vw
1/100th of the width of the viewport.
vi
Equal to 1% of the size of the initial containing block, in the direction of the root element’s inline axis.
vb
Equal to 1% of the size of the initial containing block, in the direction of the root element’s block axis.
vmin
1/100th of the minimum value of the height and the width of the viewport.
vmax
1/100th of the maximum value of the height and the width of the viewport.

Absolute length units

Absolute length units represent a physical measurement when the physical properties of the output medium are known, such as for print layout. This is done by anchoring one of the units to a physical unit, and then defining the others relative to it. The anchor is done differently for low-resolution devices, such as screens, and high-resolution devices, such as printers.

For low-dpi devices, the unit px represents the physical reference pixel and then other units are defined relative to it. Thus, 1in is defined as 96px which equals 72pt. The consequence of this definition is that on such devices, length described in inches (in), centimeters (cm) or millimeters (mm) doesn't necessary match the length of the physical unit with the same name.

For high-dpi devices, inches (in), centimeters (cm), millimeters (mm) are defined as their physical counterparts. Therefore the px unit is defined relative to them (1/96 of 1 inch).

Users may increase font size for accessibility purpose. To allow for usable layouts whatever is the used font size, use only absolute length units when the physical characteristics of the output medium are known, such as bitmap images. When setting length related to font-size, prefer relative units like em or rem.

px
Relative to the viewing device.
For screen display, typically one device pixel (dot) of the display.
For printers and very high resolution screens one CSS pixel implies multiple device pixels, so that the number of pixel per inch stays around 96.
mm
One millimeter.
q
A quarter of a millimeter (1/40th of a centimeter).
cm
One centimeter (10 millimeters).
in
One inch (2.54 centimeters).
pt
One point (1/72nd of an inch).
pc
One pica (12 points).
mozmm
An experimental unit which attempts to render at exactly one millimeter regardless of the size or resolution of the display. This is rarely actually what you want, but may be useful in particular for mobile devices.

CSS units and dots-per-inch

The unit in doesn't represent a physical inch on screen, but represents 96px. That means that whatever is the real screen pixel density, it is assumed to be 96dpi. On devices with a greater pixel density, 1in will be smaller than 1 physical inch. Similarly mm, cm, and pt are not absolute length.

Some specific examples:

  • 1in is always 96px.
  • 3pt is always 4px.
  • 25.4mm is always 96px.

Specifications

Specification Status Comment
Unknown
The definition of '<length>' in that specification.
Unknown Added the vi, vb, ic, lh and rlh units
CSS Values and Units Module Level 3
The definition of '<length>' in that specification.
Candidate Recommendation Added the ch, rem, vw, vh, vmin, vmax and units
CSS Level 2 (Revision 1)
The definition of '<length>' in that specification.
Recommendation pt, pc, px are explicitly defined (were implicitly defined in CSS1)
CSS Level 1
The definition of '<length>' in that specification.
Recommendation Initial definition

Browser compatibility

 

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 1 1.0 (1.7 or earlier) 3.0 3.5 1.0
ch 27 1.0 (1.7 or earlier)[1] 9.0 20.0 7.0
ex (Yes) (Yes) (Yes) (Yes) (Yes)
rem 4 (532.3) 3.6 (1.9.2) 9.0 11.6 4.1
vh, vw 20 19 (19) 9.0 20.0 6.0
vmin 20 19 (19) 9.0[2] 20.0 6.0
vmax 26 19 (19) No support 20.0 (Yes)
Viewport-percentage lengths invalid in @page ? 21 (21) ? ? ?
mozmm No support 4.0 (2.0) No support No support No support
1in always is 96dpi (Yes) 4.0 (2.0) (Yes) (Yes) (Yes)
q No support 49.0 (49.0) No support No support No support
vi, vb, ic, lh and rlh No support No support No support No support No support
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
ch No support (Yes) 7.8 ? 7.1.1
ex ? (Yes) ? ? ?
rem 2.1 (Yes) ? 12.0 4.0
vh, vw, vmin (Yes) 19.0 (19) ? No support 6.0
vmax 1.5 19.0 (19) ? No support 4.0
Viewport-percentage lengths invalid in @page ? 21.0 (21.0) ? ? ?
q ? 49.0 (49.0) ? ? No support
vi, vb, ic, lh and rlh No support No support No support No support No support

[1] In Gecko 1.0-1.9.0 (Firefox 1.0-3.0) ch was the width of 'M' and it didn't work for border-width and outline-width CSS properties.

[2] Internet Explorer implements this with the non-standard name vm.