我想在客户端JavaScript代码中按屏幕宽度对设备进行分类
所有设备适合单手(少7英寸)到移动类别
将其他设备视为桌面设备
后备:将不支持必要API的设备视为移动设备
问题
Firefox支持是可选的 - 如果它们已经具有兼容的API。
请注意,这是关于物理尺寸,而不是像素尺寸。
答案 0 :(得分:3)
有no direct way来获取屏幕大小(以英寸为单位),但有一些解决方法可以使用屏幕密度来查找设备大小。它并不完美,但你真的不需要知道5个有效数字的确切大小。此外,通常最好只使用像素值IMO。
制作一个测试div,然后查看显示的像素数以获得像素密度,然后在计算中使用它。这应该有效,假设您的浏览器/操作系统配置正确(它在this question中不起作用,但在我的计算机上不到半英寸)。
编辑:这是100%错误。 CSS中的英寸/厘米测量值不是基于实际的物理测量值。它们基于精确转换(1英寸= 96像素,1厘米= 37.8像素)。我道歉。
检测物理屏幕大小的最佳方法是使用CSS媒体查询。 min-resolution
和max-resolution
查询可用于获取dpi
或dpcm
中的解析:
@media (min-resolution: 300dpi){
// styles
}
将其与min-device-width
和max-device-width
查询相结合,可以获得如下内容:
@media (resolution: 326dpi) and (device-width: 640) and (device-height: 960){
// iPhone
}
问题在于,如果你想要定位7英寸设备,你必须有许多分辨率和相应的宽度,这可能会变得复杂。
了解更多信息:
您可以使用window.devicePixelRatio
来确定屏幕密度。来自Android's WebView Reference:
window.devicePixelRatio
DOM属性。此属性的值指定用于当前设备的默认比例因子。例如,如果window.devicePixelRatio
的值为“1.0”,则设备被视为中密度(mdpi)设备,并且默认缩放不应用于网页;如果值为“1.5”,则设备被视为高密度设备(hdpi),页面内容缩放1.5倍;如果值为“0.75”,则设备被视为低密度设备(ldpi),内容缩放0.75x。
然后使用此功能,您可以通过将其除以像素总数来计算物理尺寸,可以使用window.screen.width
和window.screen.height
计算(不要使用window.screen.availHeight
或{ {1}}因为它们只检测可用的高度。)
了解更多信息:
答案 1 :(得分:-4)
最好使用CSS
@media screen and (max-width: 672px){
//your code for mobile category
}
@media screen and (min-width: 672px){
//your code for desktop category
}