我有一个CSS样式表,使用媒体查询根据页面宽度(例如,如果小于4英寸或在手持设备上显示),改变页面的显示方式以适应移动端。但是,我的问题在于它的内容。主页上有一个类似于码头的接口,根据窗口的当前高度和宽度动态更改高度,以便文本和项目永远不会离开屏幕。然而,我用于确定此大小的JS不知道样式表何时已更改 以适应手持设备或小屏幕,因此在此模式下行为将不可预测。如何使用JavaScript检测页面是否小于或等于4英寸,以便禁用自动调整大小的码头?
这是一个不容易解决的问题。
这里有一个网站链接,其中包含一个函数(getUnits
),可以获取您选择的测量单位(包括英寸)中的当前计算样式:https://web.archive.org/web/20120427144951/http://upshots.org:80/javascript/javascript-get-current-style-as-any-unit
使用这个函数,您可以检查 if (getUnits(document.body, "width").inch < 4)
。对于好奇的人来说,这个函数的工作原理是通过在所需的测量空间中创建临时元素并读取与像素的比率来完成的。通过这种方式,您让浏览器根据其自己的知识响应设备的PPI。因此,这是一种window.devicePixelRatio
的polyfill,但是浏览器大多数情况下会关于它们的PPI撒谎。不过,出于这些目的,这并不重要,因为它们将对您的英寸单位CSS应用相同的谎言。
1in
视为与屏幕尺寸无关的96px
的同义词。 - Pointy我没有在真正的浏览器上测试过,但它应该可以运行:
在你的HTML中设置一个隐藏的 <div id="screen" style="display:none">
。
在CSS中,使用媒体查询,例如:
@media screen
{ div#screen{color: blue;} }
@media screen and (min-width: 13in)
{ div#screen{color: red;} }
你能做的只是读取已知元素的当前样式。通过查看外层包装 DIV 的宽度等信息,你可以确定媒体查询中正在使用哪个样式表。
1in
解释为96px
,而不考虑实际屏幕点密度。在这方面,只有当屏幕实际上每英寸有96个物理像素时,Safari才能做到“良好的工作”。 - Pointy我认为你从错误的角度看待了这个问题。你不应该考虑英寸。你需要知道的是:在给定设备和浏览器的情况下,我的页面应该有多少像素高?
答案在于保持一组已知设备及其相应的像素高度。
例如,iPhone 5比iPhone 4更高,这会影响你想要达到的效果。