The <length>
CSS data type represents a distance value. Many CSS properties take <length>
values, such as width
, margin
, padding
, font-size
, border-width
, text-shadow
, and many others.
For some properties a negative length is a syntax error, while for others 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.
Syntax
A length consists of a <number>
followed by a unit (px
, em
, pc
, in
, mm
, …). As with all CSS dimensions, there is no space between the unit literal and the number. The length unit is optional after the number 0
.
Interpolation
In animation
s, length values are interpolated as real, floating-point numbers. The interpolation happens on the calculated value. Its speed is determined by the timing function associated with the animation.
Units
Relative length units
Font-relative lengths
em
- Represents the calculated
font-size
of the element. If used on thefont-size
property itself, it represents the inherited font-size of the element.This unit is often used to create scalable layouts, which maintain the vertical rhythm of the page even when the user changes the font size. The CSS propertiesline-height
,font-size
,margin-bottom
, andmargin-top
often have values expressed inem
. ex
- 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. cap
- Represents the "cap height" (nominal height of capital letters) of the element’s
font
. ch
- 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
- Represents the
font-size
of the root element (e.g., the font-size of the<html>
element). When used within the root elementsfont-size
, it represents its initial value (common browser default is 16px, but changes based upon users preferences).This unit is often used to create scalable layouts. 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 the
line-height
property on the root element, converted to an absolute length. When specified on thefont-size
orline-height
properties of the root element, therlh
unit refers to the properties' initial value.
Viewport-percentage lengths
Viewport-percentage lengths define a length relative to the size of the viewport, i.e., the visible portion of the document.
-
If the
html
andbody
are set asoverflow:auto
, space taken by scrollbars is not subtracted from the viewport, whereas it will be subtracted if set asoverflow:scroll
.
Viewport lengths are invalid in @page
declaration blocks.
vh
- Equal to 1% of the height of viewports initial containing block.
vw
- Equal to 1% of the width of viewports initial containing block.
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
- Equal to the smaller of
vw
orvh
. vmax
- Equal to the larger of
vw
orvh
.
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
), and 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 purposes. To allow for usable layouts regardless of 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 always96px.
3pt
is always4px
.25.4mm
is always96px.
Specifications
Specification | Status | Comment |
---|---|---|
Unknown The definition of '<length>' in that specification. |
Unknown | Addition of the vi , vb , ic , lh , and rlh units. |
CSS Values and Units Module Level 3 The definition of '<length>' in that specification. |
Candidate Recommendation | Addition of the ch , rem , vw , vh , vmin , vmax , and q units. |
CSS Level 2 (Revision 1) The definition of '<length>' in that specification. |
Recommendation | Explicit definition of the pt , pc , and px units. |
CSS Level 1 The definition of '<length>' in that specification. |
Recommendation | Initial definition. Implicit definition of the pt , pc , and px units. |
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, rlh, and cap | 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, rlh, and cap | 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
.