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
, margin
, padding
, 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.
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.
em
font-size
of the element. If used on the font-size
property itself, it represents the inherited font-size of the element. line-height
, font-size
, margin-bottom
and margin-top
often have values expressed in em.ex
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
font
.rem
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. 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 in the case of overflow:scroll
, it is.
In a @page
at-rule declaration block, the use of the viewport lengths are invalid and the declaration will be dropped.
vh
vw
vmin
vmax
Absolute length units represents a physical measurement and when the physical properties of the output medium are known, such as for print layout. This is done by anchored one of the unit to a physical unit and to defined the other relatively to it. The anchor is done differently for low-resolution devices, like screens, and high-resolution devices, like printers.
For low-dpi devices, the unit px represents the physical reference pixel and the others 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
), 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
mm
q
cm
in
pt
pc
mozmm
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.
Specification | Status | Comment |
---|---|---|
CSS Values and Units Module Level 3 The definition of '<length>' in that specification. | Candidate Recommendation | Added ch , rem , vw , vh , vmin , vmax and q
|
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 |
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 |
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 |
[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
.
© 2005–2017 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/length