Mastering Different Units for Sizing Text CSS is a crucial skill for any web developer. You can size text using various units in CSS, including pixels, points, inches, centimeters, millimeters, and percentages.
Pixels are a popular choice for setting font sizes, as they allow for precise control. A pixel is a single point on a screen, and it's the smallest unit of measurement in CSS.
Points are another common unit for sizing text, with 1 point equal to 1/72 of an inch. Points are often used for printing, as they provide a more traditional unit of measurement.
Inches, centimeters, millimeters, and other units are less common for sizing text, but they can be useful for specific projects or designs.
Use Relative Units
Relative units are the way to go when it comes to sizing text in CSS. They're scalable and can adjust to the size of the screen, making them perfect for responsive web design.
One of the best practices is to use relative units instead of absolute units, such as pixels (px), inches (in), and centimeters (cm). Relative units include percentages, em, and rem.
Relative units are based on other measurements, such as the size of the parent element, the root element, or the viewport. Here are some examples of relative units:
- em: Relative to the font-size of the nearest parent element.
- rem: Relative to the font-size of the root element.
- vh (viewport height): 1% of the height of the viewport.
- vw (viewport width): 1% of the width of the viewport.
- % (percentage): Relative to the size of the parent element.
- vmin: 1% of the smaller dimension of the viewport (width or height).
- vmax: 1% of the larger dimension of the viewport.
- ch: Relative to the width of the “0” (zero) character in the current font.
- ex: Relative to the x-height of the current font (height of the lowercase “x”).
- cap: Relative to the height of capital letters in the current font.
- ic: Relative to the size of the “水” (water) character in the current font.
- lh: Relative to the line-height of the element.
- rlh: Relative to the line-height of the root element.
Using relative units can help you avoid issues related to overriding user preferences. For example, if you use em to define font size, it will adjust according to the screen size, making it easier to read on different devices.
The em unit is equal to the font size of the parent element, so if the font-size of body is 16px, a child paragraph with a font-size of 1em would show the text as 16 pixels. The rem unit, on the other hand, is relative to the font size of the root element, making it ideal for setting global sizing for elements like padding, margin, and borders.
Absolute Units
Absolute units in CSS are fixed and don't change based on other elements or the viewport. They provide exact measurements.
A pixel (px) represents a single dot on the screen, making it a useful unit for digital designs. You can also use centimeters (cm) and millimeters (mm) for precise measurements.
Inches (in) are another absolute unit, as well as points (pt) and picas (pc), which have fixed values of 0.0138 inches and 0.1666 inches respectively.
Here's a quick rundown of the absolute units we've covered:
- px (pixels): Represents a single dot on the screen.
- cm (centimeters): Represents a centimeter.
- mm (millimeters): Represents a millimeter.
- in (inches): Represents an inch.
- pt (points): Represents 1/72 of an inch.
- pc (picas): Represents 1/6 of an inch.
Viewport Units
Viewport units are a game-changer for sizing text in CSS. They allow you to set font sizes based on the dimensions of the viewport, eliminating the need for multiple breakpoint values.
Relative to the width of the viewport, one vw equals 1% of the width of the current viewport. This means text will grow and shrink proportionally as you resize the browser window.
Viewport width (vw) units are great for making text smoothly scale with the browser window, but be aware that there's no limiter on how large or small the text can appear. This can result in text looking ridiculously large or small on different devices.
Viewport height (vh) is similar to viewport width, but it's less frequently used. It's also subject to the same sizing issues as vw.
The vmin and vmax units are based on the values of vw and vh. 1vmin is 1% of the viewport's smallest dimension, while 1vmax is 1% of the viewport's largest dimension. This can help you set font sizes that scale well across different devices and screen sizes.
Combining relative units like vw, vmin, and vmax can help mitigate the sizing issues that come with using just one unit. By using these units in combination, you can create typography that looks great on a wide range of devices and screen sizes.
Responsive Text
Responsive text is a must-have for any website, especially with the rise of mobile devices. It's essential to make your website more usable and accessible across different screen sizes.
Using static font sizes can lead to readability issues, as text that looks perfect on a smartphone might be too small on a desktop, and vice versa. For example, a font size of 32 pixels for headings on a desktop might be too large on a mobile screen.
One way to solve this problem is by using breakpoints in CSS, which are specific viewport widths that change the page layout. For instance, you can use media queries to set a font size of 16px for paragraph text if the viewport width is 550px or smaller, and 32px if the viewport width is 501px or wider.
Using relative units like em and rem can also help with responsive text. Em is a relative unit that adjusts to the size of the screen, while rem stands for "root em" and scales based on the font size of the root element. Using em for font sizes allows users to adjust the font size in their browser settings, making your website more accessible.
CH
The ch unit is an exact measurement for monospaced fonts like Courier, but it can be unpredictable with proportional fonts like Arial.
In a monospaced font, setting an element's width to 60ch will result in exactly 60 characters being displayed.
Characters may overflow or fall short in proportional fonts, making the ch unit unreliable in such cases.
For example, if your font is Courier, you can rely on the ch unit for precise measurements, but with Arial, it's anyone's guess how wide the element will be.
Responsive Text Benefits
Responsive text is crucial for making your website more usable and accessible across different screen sizes. This is because users have come to expect generally larger fonts on desktop websites and generally smaller fonts on mobile websites.
If your text is hard to read, your website will look unprofessional and leave a negative impression on visitors. So, take the time to apply either of the methods mentioned, then test your site on different screens.
Using em for font sizes is a good idea because it allows users to adjust the font size in their browser settings. This is because em is a relative unit that adjusts to the size of the screen.
Breakpoints are specific viewport widths that, when reached, change the page layout in some way. In our case, breakpoints will trigger a font size change.
Fluid text scales continuously as the screen dimensions change to fit the viewing device. This is because it uses the vw unit and the calc() function to make things fluid.
Responsive text can be achieved using two methods: breakpoints and fluid text. While breakpoints only change the font size at defined increments, fluid text scales continuously as the screen dimensions change.
Setting Font Size with Keywords
You can use keywords to set the font size of your text, and it's actually quite straightforward. There are two types of keywords: absolute and relative.
Absolute keywords refer to a font size table computed by different user agents, and they include xx-small, x-small, small, medium, large, x-large, and xx-large.
Using absolute keywords ensures that the font size is consistent across different devices and browsers.
If you use relative keywords, the font size will be calculated based on the values in the font size table and the computed font-size of the parent element.
Relative keywords include larger and smaller, which can be used to adjust the font size relative to the parent element's font size.
For example, if the parent element has a font-size value close to x-small, setting the font size to larger will set the element's font size to small.
Sizing Methods
Using em for font sizes is a good idea because it allows users to adjust the font size in their browser settings. For example, setting the font size of the p element to 1em means it will be the same size as the parent element's font size.
Em is a relative unit that adjusts to the size of the screen. This makes it a good choice for font sizes.
Using a relative unit like em for font sizes is essential because it ensures the text remains readable on different screen sizes.
Browser Support
Absolute units like px, pt, pc, in, cm, and mm are supported in all browsers. These units are widely used and understood, making them a safe choice for most projects.
The em unit is also supported in all major browsers, including older versions of IE. This means you can use em units with confidence, even on older browsers.
IE8 and lower don't support the rem unit, so it's best to avoid using it in these browsers. This is a significant limitation, especially if you're targeting older versions of IE.
In IE9 and IE10, using rem with the shorthand font property will make the whole declaration invalid. This can cause unexpected behavior and is something to watch out for.
Viewport units have the least browser support, which means you should use them with caution.
Sources
- Best Practices for Size Units in CSS | by jjcx (medium.com)
- formally defined (csswg.org)
- was originally a reference to the width of the capital M in the typeface and size being used (wikipedia.org)
- the height of the letter x in the font (wikipedia.org)
- this article (meyerweb.com)
- reference pixel (csswg.org)
- Setting Font Size in rem Units (codepen.io)
- Setting Font Size in Viewport Units (codepen.io)
- viewport unit based typography (zellwk.com)
- CSS units rem, em, px, vh, vw, percentage (saeloun.com)
- Responsive Text: em units (codepen.io)
Featured Images: pexels.com