字体大小 em 在某些设备上显示不同

3

我正在为移动设备设计的web聊天程序中工作,主要问题是我尝试尽可能适合移动设备,但我放弃了像素字体大小而采用了em,然而在我的桌面电脑上使用火狐浏览器时,li文本显示得非常小,在iPad上也是如此。但在我的Nokia Lumia 800 Windows手机上它显示得更大。

我的CSS:

* { margin:0; padding:0; font-family:arial; }
body > div { width:auto; margin:10px; }
h1 { font-size:1.5em; }
h2 { font-size:4em; text-align:center; }
h2#signIn > a { color:#aaaaaa; }
h2#signIn > a:hover { color:#000000; }
h3 { text-align:left; font-weight:normal; margin:10px; }

ul { list-style:none; }
ul > li { font-size:0.8em; font-weight:normal; padding:5px; text-align:center; }

a { color:#000000; text-decoration:none; font-variant:small-caps; }
a:hover { color:#aaaaaa; }
div.fieldContainer { display:block; border:1px solid #000000; padding:5px; }
span.yell, span.wire { font-variant:small-caps; }
span.wire { color:#aaaaaa; }

input[type="text"], input[type="password"]
{
    width:100%; margin:0;
    font-size:2em; border:0;
}

input[type="button"]
{
    width:100%; padding:10px; font-size:2em;
    font-variant:small-caps; letter-spacing:2px;
    border:1px solid #000000; background-color:#dddddd;
}

#messages
{
    width:100%; height:200px;
    border:0; padding:0; margin:0;
    overflow:auto; font-size:0.9em;
}

span.msgTime { font-size:0.7em; }

.fromMe { color:#aaaaaa; }
.fromYou { color:#000000; }
.clear { clear:both; }

正如您所看到的,列表元素使用了0.8em。我意识到浏览器存在不一致性,但这真的是不可避免的吗?

我还使用这个方法来确保网页的比例显示正确:

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;"> 

更新 1

我认为值得一提的是,所有其他相关字体大小看起来都很好,似乎只有移动浏览器中的列表元素不同。


你能在不同的移动浏览器中发布屏幕截图吗? - Samuel Neff
4个回答

4

em是相对于当前字体大小的度量单位。如果浏览器都有不同的默认基础字体大小,那么它们看起来会不同。尝试使用pt代替,它仍然适用于不同大小的屏幕,并且不像px一样固定。

http://www.w3schools.com/cssref/css_units.asp


2
pt也是一个固定大小。可能与px不同,但仍然是固定的。 - Jukka K. Korpela
1
@JukkaK.Korpela,它是基于英寸而不是像素固定的。优点是具有超高分辨率的屏幕仍将以相同的物理尺寸显示它们,即使需要更多的像素才能达到该尺寸。 - Samuel Neff
1
@SamuelNeff,但在CSS中,“inch”并不真正意味着“英寸”。它也可以锚定到px单位。在http://www.w3.org/TR/css3-values/中有解释。 - Jukka K. Korpela
1
谢谢Samuel,这正是我想要的效果。在Windows手机上使用IE浏览器,它的显示比例与我在桌面上使用的Firefox浏览器看到的相对一致。 - Lee
1
@SamuelNeff,不是的,它描述了两个可能的系统,并且明确定义了:“1px等于1/96英寸”。 - Jukka K. Korpela
显示剩余2条评论

1
每个浏览器都有自己的默认样式表,它设置了基本文本大小。em是相对单位,根据默认文本大小改变大小。尝试给你的body设置font-size:16px,只是一个例子,看看是否会使文本显示相同大小。
为了更清楚,这里有一个链接来帮助解释我建议在body元素上使用像素大小,而且仅限于该元素。http://www.alistapart.com/articles/fluidgrids/

谢谢你的回答。我明白em大小是相对的,这就是为什么我采用了它们。我曾考虑过使用像素大小,但这对于移动设备来说不是个好主意,对吗? - Lee
我建议您使用像素大小一次来为所有ems设置基线。每个浏览器的默认文本大小不同,因此ems以不同的基线大小开始。在body上设置显式大小可以使所有ems从相同的大小开始。在这种情况下,1em = 16px。 - hradac

0

在 CSS 文件中第一行显示

* { margin:0; padding:0; font-family:arial; }

将其替换为

* { margin:0; padding:0; font-family:arial; font-size: 1em; }

它会工作的!


-1

如果您希望让每个浏览器使用其默认字体大小,适合设备的预设值,请不要设置正文字体大小,并且不要使用 meta 标签来防止缩放,就像您现在所做的那样。

如果您认为“一刀切”是您的方式,那么请使用像素或点(不同的方法)来设置字体大小,而不是尝试使用 em 单位来实现。


好的,但是没有元标记时,缩放会失效,需要用户手动缩放。使用“pt”可以完美解决这个问题。 - Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接