假设我们有以下 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(我想有一种方法可以查询设备屏幕 - 而不是视口 - 分辨率,但我不确定是否真的有)?
原文由 sdbbs 发布,翻译遵循 CC BY-SA 4.0 许可协议
不久前,我写了一个关于如何使用纯 HTML/CSS 实现此目的的小教程/示例:
响应单位 (
vmin
/vmax
)规则
vmin
在您的上下文中非常有用。它需要 vmin:屏幕最小边的 1/100。不论方向。将它与calc()
font-size
应用小型自定义响应方面的好方法。替代方法(
vw
/vh
)如果您希望对实际纵横比应用更多控制,我建议您使用
vw
而不是vmin
。视口宽度 (vw) 占视口宽度的 1/100。基于视口纵横比的响应单元(
vmin
和vmax
):我对这个解决方案非常满意,这种方式允许我们同时考虑视口宽度和长度。我们将基本字体大小一分为二(在本例中为 .4em)并将其与 1vmin 和 1vmax 相乘,然后将这两个值相加以确定字体大小。