绝对大小使用CSS
Absolute sizing using CSS
我知道CSS中有一些绝对大小的单位。例如,cm, in, mm…但是当我在我的网页中使用它们时,它们很少受到尊重。
有关屏幕物理尺寸和像素分辨率的信息应该可以从EDID中获得-因此浏览器可以访问它们并计算该特定设备上每1厘米的像素数量。我说的是普通的CRT/LED/等离子屏幕,不是投影机。
我想在移动设备上使用它。一个常见的标准是每个触摸目标的尺寸至少为9毫米。但是当我在CSS代码中使用height: 9mm
时,在我的HTC Desire HD上实际尺寸约为3毫米。
那么我如何让浏览器使用绝对大小显示元素呢?
你不能。无论出于何种原因,移动设备上的浏览器都会一致地告诉您,宽度为1in
("一英寸")的元素大小为96像素宽。实际分辨率是多少并不重要;他们都这么说。
解决这个问题而不失去理智的唯一方法是将"虚拟像素"适当大小的所有责任交给设备制造商(和设备软件供应商)。换句话说,你必须相信苹果、谷歌、三星、LG、HTC、摩托罗拉等公司会为公众提供设备,让你的16px文本在用户看到的任何设备上都能读懂,而不管一个16px字形涉及多少实际像素。
有时候,你输了;新款iPad Mini就是一个很好的例子,因为它的屏幕尺寸与iPad 2相同,但屏幕要小得多。这意味着在iPad 2上清晰的16px在iPad Mini上就显得很小了。你的网页几乎不可能弄清楚它是在iPad Mini还是iPad 2上(这是设计的!)苹果故意这样做(em> ),所以最终的结果是,倒霉的iPad Mini购买者得到了制造商的不公平服务。
相比之下,Nexus 7平板电脑的实际屏幕分辨率高于iPad Mini,但它向你的网页报告的屏幕尺寸小于。这意味着你在上的16px文本设备看起来很棒—Nexus 7的用户得到了该制造商的良好服务。(你当然可以提供工具让用户调整布局。对于一个响应式网站,由于浏览器的各种特性(bug ),很难使一个网站工作得很好,可以用熟悉的移动设备手势缩放。
这很大程度上取决于设备设置。在许多情况下——出于"兼容性的原因"——真正的互操作性与产品进入市场是对立的。
或者换句话说:设备供应商为他们的客户固定了网站,这样他们就可以"随心所欲"地上网了。
Your Desire HD:
- 对角厘米(在): 11 (4.3)
- 的决议: 480×800
- ppcm (PPI): 85(217) <一口> * 一口>
- CSS像素比:1.5
*基于给定显示尺寸的近似计算。
如果你看到这个列表,你可以想象这在每个设备上是不同的。所以你不能相信设备本身。
如果您想解决这个问题,您需要为您的用户提供一种配置它的方法,以便您可以采用。一些供应商/浏览器提供头文件,告诉这些设备做真正的事情。这要看情况而定,我手头没有很好的资源来简单地解决这个问题。我会从研究不同的模型和它们的浏览器软件开始,然后创建一个矩阵,如果有一些通用的程序可用,如果它们能一起工作。
在此之前,我只是要求用户使用相关设置,但根据用户的偏好对body元素进行采用设置。
9mm
与9毫米的物理测量值有两个基本的区别。
首先,在显示设备中,锚定单元(CSS Values and Units Module Level 3)通常是像素,mm
单元被解释为满足方程1in
= 25.4mm
= 96px
。(即使在印刷媒体中,mm
原则上应该固定在物理毫米上,它也多少偏离了它。)你对此无能为力。
其次,在移动设备中,浏览器通常会自动缩放页面。原因是,否则大多数页面将表现得非常糟糕,因为它们是为更大的屏幕设计的(即使是在每个方向的像素数量方面)。可以使用像
这样的标签来防止这种情况。<meta name="viewport" content="width=device-width, initial-scale=1">
如果这些真实世界的测量值是可靠的,那么它们只会在用于打印格式时才可靠。任何电子产品都会考虑像素,而不是这些像素在现实世界的测量中转化成什么。例如,当您将设备插入投影仪或具有不同分辨率和DPI的外部显示器时,cm和mm应该意味着什么?
哪个设备能记录mm和cm的换算?是显示设备还是发送显示数据的设备?太乱了。RL测量仅用于打印,即使在我的经验中,它们也可能有点冒险。至少我几年前的经历是很冒险的。
我想到了一个方法:大多数浏览器在user-agent header中沿HTTP请求发送设备类型。基于这些信息,我可以在服务器上找到真正的DPI,并将其发送回响应中(例如,作为修改后的CSS)。
然而,保持和维护设备数据库以获得精确的DPI是昂贵的。我最终使用了一组公共参数的近似DPI。在这种情况下,1mm不是恒定的,但差异应该最小化(通常)。
- 没有找到相关文章