Font size in CSS - % or em?

CssFontsFont Size

Css Problem Overview


When setting the size of fonts in CSS, should I be using a percent value (%) or em? Can you explain the advantage?

Css Solutions


Solution 1 - Css

There's a really good article on web typography on A List Apart.

Their conclusion:

> Sizing text and line-height in ems, > with a percentage specified on the > body (and an optional caveat for > Safari 2), was shown to provide > accurate, resizable text across all > browsers in common use today. This is > a technique you can put in your kit > bag and use as a best practice for > sizing text in CSS that satisfies both > designers and readers.

Solution 2 - Css

From http://archivist.incutio.com/viewlist/css-discuss/1408

> %: Some browsers doesn't handle > percent for font-size but interprets > 150% as 150px. (Some NN4 versions, > for instance.) IE also has problems > with percent on nested elements. It > seems IE uses percent relative to > viewport instead of relative to > parent element. Yet another problem > (though correct according to the W3C > specs), in Moz/Ns6, you can't use > percent relative to elements with no > specified height/width. > > em: Sometimes browsers use the wrong > reference size, but of the relative > units it's the one with least > problems. You might find it > interpreted as px sometimes though. > > pt: Differs greatly between > resolutions, and should not be used > for display. It's quite safe for > print use though. > > px: The only reliable absolute unit on > screen. It might be wrongly > interpreted in print though, as one > point usually consist of several > pixels, and thus everything becomes > ridiculously small.

Solution 3 - Css

Both adjust the font-size relative to what it was. 1.5em is the same as 150%. The only advantage seems to be readability, choose whichever you are most comfortable with.

Solution 4 - Css

The real difference comes apparent when you use it not for font-sizes. Setting a padding of 1em is not the same as 100%. em is always relative to the font-size. But % might be relative to font-size, width, height and probably some other things I don't know about.

Solution 5 - Css

Given that (nearly?) all browsers now resize the page as a whole, rather than just the text, previous issues with px vs. % vs. ems in terms of accessible font resizing are rather moot.

So, the answer is that it probably doesn't matter. Use whatever works for you.

>% is nice because it allows for relative resizing. > >px is nice because it's fairly easy to manage expectations when using it. > >em can be useful when also used for layout elements as it can allow for proportional sizing related to the text size.

Solution 6 - Css

As Galwegian mentions, px is the most reliable for web typography, as everything else you do on the page is mostly laid out in reference to a computer monitor. The problem with absolute sizes is that some browsers (IE) won't scale pixel-value elements on a web-page, so when you try to zoom in/out, everything adjusts except for those elements.

I do not know whether IE8 handles this properly, but all other browser vendors handle pixels just fine and it is still a minority case where a user needs to enlarge/diminish text (this text box on SO perhaps being the exception). If you want to get really dirty, you could always add a javascript function for making your text size larger and offer a "small"/"larger" button to the user.

Solution 7 - Css

Regarding the difference between the css units % and em.

As far as I understand (at least theoretically/conceptually, but possibly not how these two units might be implemented in browsers) these two units are equivalent, i.e. if you multiply your em value with 100 and then replace em with % it should be the same thing ?

If there actually is some real difference between em and % then can someone explain it (or provide a link to an explanation) ?

(I wanted to add this comment of mine where it would belong, i.e. indented just below the answer by "Liam, answered Sep 25 '08 at 11:21" since I also want to know why his answer was downvoted, but I could not figure out how to put my comment there and therefore had to write this "thread global" reply)

Solution 8 - Css

http://developer.yahoo.com/yui/">Yahoo User Interface library (http://developer.yahoo.com/yui/)</a> has a nice set of base css classes used to "reset" the browser specific settings so that the basis for displaying the site is same for all (supported) browsers.

With YUI one is supposed to use percentages.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMatsView Question on Stackoverflow
Solution 1 - CssGlenn SlavenView Answer on Stackoverflow
Solution 2 - CssGalwegianView Answer on Stackoverflow
Solution 3 - CssLiamView Answer on Stackoverflow
Solution 4 - CssBjörn TantauView Answer on Stackoverflow
Solution 5 - CssDA.View Answer on Stackoverflow
Solution 6 - CssChristian P.View Answer on Stackoverflow
Solution 7 - Cssuser743436View Answer on Stackoverflow
Solution 8 - CsskosoantView Answer on Stackoverflow