【发布时间】:2017-04-25 00:47:15
【问题描述】:
假设我们有以下test.htm:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style type="text/css">
.testdiv, .testdivB, .testdivC {
width: 50%;
height: 30%;
margin: 6px;
border: 2px solid gray;
font-size: 4em;
}
.testdivB {
font-size: 12px;
}
.testdivC {
font-size: 30pt;
}
</style>
</head>
<body>
<div class="testdiv">Test one writing</div>
<div class="testdivB">Test another writing</div>
<div class="testdivC">Test three writing</div>
</body>
</html>
我尝试在 Chromium 中使用开发者工具对此进行测试,该工具允许我模拟不同的设备;这里:
* Apple iPhone 4 : device resolution 320 x 480 , a/r 0.666667
* Google Nexus 10 : device resolution 800 x 1280 , a/r 0.625
* Amazon Kindle Fire HDX: device resolution 1600 x 2560 , a/r 0.625
结果是这样的:
在此示例中,所有设备都是纵向的,并且具有“几乎”相同的纵横比 (~ 0.6+),即使它们的分辨率差异很大。
因此,在前两种情况下,相对于设备屏幕大小,我得到的字体大小大致相同,这是我想要实现的(尽管我很困惑testdivB 也显示几乎相同的大小,但它应该更小) - 这一切都很好。
但是,在第三个示例中,在具有最大分辨率的设备上,testdivB(在px 中定义)相对于设备屏幕尺寸要小得多。 testdivA 也不足为奇,因为em 是相对于浏览器的“计算字体大小”而言的——如果我没记错的话,它也以像素表示。
但是,我认为pt 会考虑设备屏幕分辨率,但它似乎没有:
http://www.w3.org/Style/Examples/007/units.en.html
过去,CSS 要求实现即使在计算机屏幕上也能正确显示绝对单位。但由于错误实现的数量超过了正确实现的数量,而且情况似乎没有改善,CSS 在 2011 年放弃了这一要求。目前,绝对单位必须仅在打印输出和高分辨率设备上正确工作。
好的,那么我有哪些选项可以在所有三种情况下实现大致相同的字体大小(相对于设备屏幕大小):
- 如果我不想使用 JavaScript(仅 HTML + CSS)?
- 如果我确实想使用 JavaScript(我猜有一种方法可以查询设备屏幕 - 而不是视口 - 分辨率,但我不确定是否真的有)?
【问题讨论】:
-
我相信媒体查询可以在这里与 Roberrrt 的答案一起使用,并使用类而不是 ID,并根据 Roberrrt 的代码使用相同的类名但大小不同,所以你最终会得到类似 @987654335 的东西@ 在不同的媒体查询和
font-size: calc(Xem + Xvmin);类型的事物中。不过,这只是我的 “2 美分”。 -
我很好奇,我的一个解决方案真的有帮助/有效吗:)?
-
确实,@Teepeemm,应该是
.testdivC- 我更正了,但现在我不确定截图是用错误的.testdivB还是正确的.testdivC(但看起来它是用正确的) -
嗨@Roberrrt,你的回答我已经posted a comment,但它似乎在那里迷路了;我现在还有基于 JavaScript 的posted my own answer,它应该更详细地解释我在寻找什么;简而言之,我的问题是
vmin是用视口表示的,而不是设备分辨率,如果在桌面上使用并且浏览器不是“全屏”,这可能会给出错误的结果。