TL;DR:使用px。
事实
First, it's extremely important to know that per spec, the CSS px unit does not equal one physical display pixel. This has always been true – even in the 1996 CSS 1 spec.
CSS defines the reference pixel, which measures the size of a pixel on a 96 dpi display. On a display that has a dpi substantially different than 96dpi (like Retina displays), the user agent rescales the px unit so that its size matches that of a reference pixel. In other words, this rescaling is exactly why 1 CSS pixel equals 2 physical Retina display pixels.
That said, up until 2010 (and the mobile zoom situation notwithstanding), the px almost always did equal one physical pixel, because all widely available displays were around 96dpi.
Sizes specified in ems are relative to the parent element. This leads to the em's "compounding problem" where nested elements get progressively larger or smaller. For example:
body { font-size:20px; }
div { font-size:0.5em; }
Gives us:
<body> - 20px
<div> - 10px
<div> - 5px
<div> - 2.5px
<div> - 1.25px
The CSS3 rem, which is always relative only to the root html element, is now supported on 99.67% of all browsers in use.
意见
我想每个人都同意,设计你的页面是很好的,以适应每个人,并考虑到视力受损。其中一个需要考虑的问题(但不是唯一的!)是允许用户将网站的文本变大,这样就更容易阅读。
最初,为用户提供缩放文本大小的唯一方法是使用相对大小单位(例如ems)。这是因为浏览器的字体大小菜单只是改变了根字体大小。因此,如果您在px中指定字体大小,当更改浏览器的字体大小选项时,它们将不会缩放。
现代浏览器(甚至不那么现代的IE7)都改变了默认的缩放方法,只需要放大所有内容,包括图像和盒子大小。本质上,它们使参考像素变大或变小。
是的,有些人仍然可以改变他们的浏览器默认样式表来调整默认字体大小(相当于老式字体大小选项),但这是一种非常深奥的方式,我敢打赌没有人会这样做。(在Chrome中,它被隐藏在高级设置、网页内容、字体大小下面。在IE9中,它更加隐蔽。你必须按Alt键,然后去查看,文本大小。)在浏览器的主菜单中选择缩放选项(或使用Ctrl++/-/鼠标滚轮)要容易得多。
1 -在统计误差之内,自然
如果我们假设大多数用户使用缩放选项缩放页面,我发现相对单位基本上是不相关的。当所有东西都指定在同一个单位(图像都以像素为单位处理)时,开发页面要容易得多,而且不必担心复合。(“我被告知没有数学”——要计算1.5em实际是多少。)
仅使用相对单位表示字体大小的另一个潜在问题是,用户调整字体大小可能会破坏布局的假设。例如,这可能会导致文本被剪切或运行太长。如果你使用绝对单位,你不必担心意外的字体大小会破坏你的布局。
所以我的答案是使用像素单位。所有都用px表示。当然,您的情况可能会有所不同,如果您必须支持IE6(愿rfc之神宽恕您),那么无论如何您都必须使用ems。