如何在所有设备上绘制相同长度的线



在HTML页面上,我想画一条定义长度的线,比如5cm。这条线应该总是正好5厘米,

  • 在每种类型的显示器上
  • 无论物理监视器大小
  • 选择每个监视器分辨率
  • 选择任何屏幕缩放
  • 每个浏览器的缩放级别

我找到了一种方法来做到这一点,但这需要用户校准:显示一些可伸缩的线,让用户在旁边放一张银行卡(长度已知(,让用户调整线的大小,直到它适合卡的长度,然后计算完美的比例。

但是,如果没有用户操作,我怎么能得到结果呢?

我认为,最简单的方法是在CSS中使用"cm"。没有。一个"厘米"在我的智能手机上是4毫米,但在我的显示器上是12毫米。

我试过用window.devicePixelRatio进行除法。在现代显示器上,这可以处理大约20%的错误,设置为建议的分辨率。当我更改浏览器缩放和刷新时,长度保持不变。它在我的智能手机上不起作用,因为我的长度要小得多,横向和纵向的效果也不一样。当我将显示器分辨率设置为较低的值时,这不起作用。如果我将24〃;和一个27〃;具有相同分辨率的监视器。

我想在浏览器(也许还有openlayers(中使用html/css/javascript来实现这一点。

不幸的是,这是最难做的事情之一。CSS中有一个单位cmmm,但它们实际上是直接从像素值转换而来的:1 cm = 37.795 px。像素值,其本身在每个显示器上是相对的。

对于使用厘米单位,你可以写:

<div id="line-5cm"></div>
<style>
#line-5cm{
height: 4px;
width: 5cm;
background-color: black;
}
</style>

我试过了,divwidth: 10cm;测量的是10.1cm,所以这看起来很准确。但我确信在某些设备上它不会起作用。

您可能想玩的另一个选项是head:中的元viewport

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0">

尝试更改这些值,看看是否可以提高准确性。

更多信息:

  • https://medium.com/level-up-web/the-difference-between-css-units-px-pt-rem-em-vh-vw-ch-ex-and-the-rest-b2cfdf069230
  • https://www.smashingmagazine.com/2021/07/css-absolute-units/

相关内容

  • 没有找到相关文章

最新更新