【发布时间】:2011-04-13 21:12:14
【问题描述】:
我注意到像 Chrome 和 Safari (Windows) 这样的 Web-kit 浏览器倾向于将 em 值四舍五入到最接近的像素,而 Firefox、IE、?歌剧?可以使用子像素值。这通常不是什么大问题,但是当我使用 em 来精确对齐字母间距或使用文本阴影在不同的客户端分辨率中获得一致的效果时,这让我很头疼。看看下面的测试用例。
您会看到,在 FF 中,即使是最小的字母仍然有阴影,而 Chrome 将 em 值向下舍入为零,前两段没有阴影。
编辑 这与单位无关。如果将 0.03em 替换为 0.9, 0.8, 0.7 .. px FF 会显示越来越小的阴影,而当 Chrome 低于 1px 时它会突然不显示任何内容。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="bg" xml:lang="bg" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">body {font-size: 18px;} p {color: cyan; text-shadow: -0.03em -0.03em 0 rgb(0, 0, 0);}</style>
</head>
<body>
<p style="font-size:1em">No Shadow Test</p>
<p style="font-size:1.5em">No Shadow Test</p>
<p style="font-size:2em">Test</p>
<p style="font-size:2.5em">Test</p>
<p style="font-size:3em">Test</p>
<p style="font-size:3.5em">Test</p>
<p style="font-size:4em">Test</p>
<p style="font-size:4.5em">Test</p>
<p style="font-size:5em">Test</p>
</body>
</html>
【问题讨论】:
-
我不会依赖像素完美的设计。他们实现它们的唯一方法是使用图像......
-
我的设计就是一切,但像素完美。我不在任何地方使用像素。
-
em基于m的高度和当前字体大小。因为这是基于像素的,所以em。 -
@Blender:其实我认为你的意思是
em是基于当前字体中大写M的宽度。Originally the unit was derived from the width of the capital "M" in the currently used typeface- Wiki。这就是为什么在元素使用相对于字体的单位时,应该使用em作为宽度值,使用ex作为高度值。 -
@avok00:如果将其设置为 1.2px、1.6px 等会怎样?这将验证它确实是一个舍入错误。