Recommendations of unit types per media type:
| Media | Recommended | Occasional use | Infrequent use | Not recommended |
|---|---|---|---|---|
| Screen | em, rem, % | px | ch, ex, vw, vh, vmin, vmax | cm, mm, in, pt, pc |
| em, rem, % | cm, mm, in, pt, pc | ch, ex | px, vw, vh, vmin, vmax |
Absolute length units should rarely be used, since their calculated values don't adjust to their contexts.
| Unit | Description |
|---|---|
| px | pixel (a dot on the computer screen) |
Relative units play nicely with both screen and print media types and should be the most frequently used CSS units.
| Unit | Description |
|---|---|
| % | percentage, relative to inherited value |
| em | relative to font size of the element |
| rem | relative to font size of the root element |
| ch | relative to width of the "0" (ZERO, U+0030) glyph in the element's font |
| ex | relative to x-height of the font |
Physical length units should only be used for print style sheets, never for the screen.
| Unit | Description |
|---|---|
| cm | centimeter |
| mm | millimeter |
| in | inch (1in equals 2.54cm, 72pt, and 6pc) |
| pt | point (1pt equals 1/72in and 1/12pc) |
| pc | pica (1pc equals 12pt and 1/6in) |
Viewport-percentage length units should be used with caution, as there is still some lingering bugs with their implementation.
| Unit | Description |
|---|---|
| vw | relative to 1% of viewport's width |
| vh | relative to 1% of viewport's height |
| vmin | relative to 1% of viewport's smaller dimension |
| vmax | relative to 1% of viewport's larger dimension |
Adjust the root font size in order to make relative units (e.g. em and rem)
based on a 10px scale (i.e. 1em and 1rem equals 10px),
rather than a typical 16px scale.
html {
font-size: 62.5%;
}Most likely use px, as most of the time, the border shouldn't need to scale.
.Component {
border-bottom: 1px solid #ccc;
}Font-size should only be applied at the lowest possible child elements, in order to minimize its cascading impact on relative units. While both of the following two examples are essentially equivalent, only the first is recommended.
DO:
.Component {
}
.Component-heading {
font-size: 1.2em;
}
.Component-body {
font-size: 0.9em;
}DO NOT:
.Component {
font-size: 1.2em;
}
.Component-heading {
font-size: 1em;
}
.Component-body {
font-size: 0.75em;
}In order to ensure consistent use of whitespace throughout the application,
given a component could be used in a variety of contexts,
it may be best to use rem for margin and padding than em.
.Component {
margin: 1rem 0;
padding: 1rem;
}Only use em within media query definitions, never pixels.
Until there's wider rem support within media queries,
rem should be avoided in media queries as well.
@media (min-width: 20em) {
.Component {
background-color: blue;
}
}
Great overview/reference!