在 JavaScript 中检测 WebKit 设备的物理屏幕尺寸

2023-11-24

我想在客户端 JavaScript 代码中按屏幕宽度对设备进行分类

  • 所有适合一只手(7 英寸以下)的设备均属于移动类别

  • 将其他设备视为桌面设备

  • Fallback:将不支持必要 API 的设备视为移动设备

Question

  • 我可以使用哪些相关的 JavaScript 和 CSS API 来检测屏幕物理尺寸?请注意,旧版浏览器不一定支持这些 API,因为存在安全回退。另外,我也不关心旧版桌面浏览器。

Firefox 支持是可选的 - 如果它们已经具有兼容的 API。

请注意,这是关于物理尺寸,而不是像素尺寸.


There's 没有直接的方法获取以英寸为单位的屏幕尺寸,但有一些解决方法可以使用屏幕密度来查找设备尺寸。它并不完美,但您实际上不需要知道精确到 5 位有效数字的大小。此外,在我看来,通常最好简单地使用像素值。

HTML

制作一个测试 div,然后查看显示的像素数以获得像素密度,然后在计算中使用它。假设您的浏览器/操作系统配置正确(它在这个问题但在我的电脑上它在半英寸之内)。

编辑:这是100%错误的。 CSS 中的英寸/厘米测量值并非基于实际的物理测量值。它们基于精确的转换(1 英寸 = 96 像素,1 厘米 = 37.8 像素)。我很抱歉。

CSS

检测物理屏幕尺寸的最佳方法是使用 CSS 媒体查询。这min-resolution and max-resolution查询可用于获取任一解决方案dpi or dpcm:

@media (min-resolution: 300dpi){
  // styles
}

将其与min-device-width and max-device-width查询,您会得到类似以下内容:

@media (resolution: 326dpi) and (device-width: 640) and (device-height: 960){
    // iPhone
}

问题是,如果您想针对 7 英寸设备,则必须有许多分辨率和相应的宽度,这可能会变得复杂。

了解更多信息:

  • MDN-CSS 媒体查询
  • MDN-分辨率
  • “移动化”指南
  • 可变像素密度的高 DPI 图像(有些相关)

JavaScript

您可以使用window.devicePixelRatio以确定屏幕密度。从Android的WebView参考:

The window.devicePixelRatioDOM 属性。该属性的值指定当前设备使用的默认缩放因子。例如,如果值window.devicePixelRatio为“1.0”,则该设备被视为中等密度 (mdpi) 设备,并且默认缩放不会应用于网页;如果值为“1.5”,则该设备被视为高密度设备 (hdpi),并且页面内容缩放为 1.5 倍;如果该值为“0.75”,则该设备被视为低密度设备 (ldpi),并且内容缩放为 0.75 倍。

然后使用它,通过将其除以像素总数来计算物理尺寸,可以通过以下方式计算window.screen.width and window.screen.height(不要使用window.screen.availHeight or window.screen.availWidth因为这些仅检测可用高度)。

了解更多信息:

  • Android Webview 参考
  • MDN - Screen.width
  • MDN - Screen.height
  • devicePixelRatio解释
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中检测 WebKit 设备的物理屏幕尺寸 的相关文章

  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 删除子元素上的 CSS 过滤器

    我的 CSS 代码有问题 正如您所看到的 我在 li 元素上有过滤器 但它覆盖了其他元素 我需要使其他两个元素没有过滤器 有没有可能这样做 main width 300px height 300px background color blu
  • 最大宽度调整以适应文本?

    不是最好的标题 但无论如何 我有一个元素max width和一些文字 如果文本长度超过一行所能容纳的长度 我会得到以下结果 My text here hello everyone 换句话说 它占据了完整的最大宽度 但由于单词向下移动 右侧有
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • 为什么 IE8 在我的图像锚标记上添加底部边框?

    我知道 这很可悲 但今天早上 IT 刚刚在我的机器上安装了 IE8 我立刻遇到了一个明显的问题 尽管我知道答案就在我面前 但我已经把它搞砸了太久了 首先 这是网站 www mchenry edu http www mchenry edu 在
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 如何创建适合屏幕宽度的等宽/高框? [复制]

    这个问题在这里已经有答案了 我正在尝试建立一个网站 其中有很多宽度和高度相等的框 例如 我有一个页面 其中并排有两个相同大小的框 简单的解决方案是将宽度和高度设置为 50vw 这在出现滚动条之前效果很好 我已经用谷歌搜索了几个小时 但无法理
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • 使用css bootstrap时如何仅向一列添加右边框?

    我正在尝试使用CSS引导框架 http getbootstrap com css tables在我的项目中 我正在使用带有以下类的表table table bordered table striped 我想删除除第一列之外的所有列的边框 这
  • CSS溢出文本显示在几行中,没有断字

    我有一些长文本显示在 div 中 该 div 具有固定的宽度和高度 我希望文本显示在几行上 作为 div 高度 并且句子单词不会中断 一行中的单词前缀和下一行中的继续 此外 我想在末尾添加省略号最后一句话 CSS white space n

随机推荐

  • 查找数组中缺失的元素

    假设有一个大小为 n 的数组 A 1 n 它包含集合 1 n 中的元素 但是 其中两个元素丢失 并且可能两个数组元素重复 找到缺失的元素 例如 如果n 5 则A可以是A 5 1 2 1 3 2 所以缺少的元素是 4 5 我使用的方法是 in
  • Prolog:将 DCG 语法与其他限制相结合

    Prolog 的 DCG 以及我能够快速生成适合特定语法的所有可能结构的速度给我留下了深刻的印象 但我想将此搜索与其他约束结合起来 例如 定义一个复杂的语法 并要求 Prolog 生成所有不超过 10 个单词的句子 或者所有不重复同一个单词
  • Ajax 数据源(对象):TypeError:f 未定义

    我正在开发我的 ASP Net Web 应用程序 我必须使用 Ajax 数据源填充 HTML 表 为此我使用 jQuery DataTables 插件 HTML 代码 table class table table striped tabl
  • 您如何分析您的代码?

    我希望不是每个人都在使用 Rational Purify 那么当您想要测量时该怎么办 函数所花费的时间 内存使用峰值 代码覆盖率 目前 我们手动执行此操作 使用带有时间戳的日志语句和另一个脚本来解析日志并输出到 Excel 唷 你会推荐什么
  • 需要在sql server中通过四舍五入的时间或日期数字来计算

    我在 Ms Sql 2008 中有 2 个数据列 uniqueidentifier 列作为 ID 和日期时间列 其结果如下所示 2011 11 06 18 02 18 030 2011 11 06 18 02 18 373 2011 11
  • 具有多个位置的 Spring 属性占位符配置器中的属性解析顺序是什么?

    假设我有一个配置
  • 在Scheme中使用let

    我想编写一个程序来求Scheme中二次方程的根 我使用 LET 来进行某些绑定 define roots with let a b c let 4ac 4 a c 2a 2 a discriminant sqrt b b 4ac cons
  • 如何使用TypeScript将大对象映射到更小的界面?

    我有一个从服务器返回的对象 其中包含例如 lorem 1 ipsa 2 3 dolor sit amet consectetur adipiscing elit you get the picture 和一个 TypeScript 接口 e
  • 如何绕过特定网址的“angular-in-memory-web-api”

    我正在使用 angular in memory web api 来模拟我的 REST Web api 但是现在我已经开始编写实际的 Web api 并且我想替换 angular in memory web api 步骤一步一步 例子 我写了
  • 带有布局的自定义错误页面

    我一直在努力让自定义错误页面正常工作 并不断寻找回到简单使用静态页面的方法 虽然静态页面可以工作 但它需要重新制作导航栏 这是我们目前希望避免的 我目前正在使用以下内容来指定自定义错误页面 Asp net 错误处理
  • ES6 中 var 的用例是什么?

    If the let关键字引入了块作用域的正确实现 var还有用例吗 我是从软件设计的角度来看这个问题的 而不是从语法的 你可以 的角度来看的 If the let关键字引入了块作用域的正确实现 var还有用例吗 可能有一种用例 let全局
  • 累积汇总列

    我可能需要一些有关 SQL 语句的帮助 所以我有一个表 cont 如下所示 cont id name weight 1 1 10 2 1 20 3 2 40 4 2 15 5 2 20 6 3 15 7 3 40 8 4 60 9 5 10
  • 异步/等待不同的线程ID

    我最近正在阅读有关 async await 的内容 我对以下事实感到困惑 我正在阅读的许多文章 帖子都表明使用 async wait 时不会创建新线程 example 我创建了一个简单的控制台应用程序来测试它 class Program s
  • JQuery Datepicker,无法手动触发onSelect事件!

    我正在使用 jquery 的日期选择器 每当从内联日期选择器对象中选取日期时 都会通过 ajax 调用填充项目列表 该脚本工作完美 只是我无法触发 onSelect 事件来填充我的初始项目列表 我可以通过最初使用 php 填充列表来解决这个
  • 当客户端刷新或打开新页面时,Socket.io 在客户端保持连接

    如果用户打开新页面或刷新页面 是否有某种方法可以在客户端保持相同的 socket io 连接 可能将套接字存储在会话中或者这是不可能的 不可能 当页面更改或刷新时 您无法保持相同的 socket io 或 webSocket 客户端连接 浏
  • 将 JSON 转换为数组 Javascript

    我当前正在从应用程序的服务器端接收 JSON 对象 结果是这样的 tags value 2 label Dubstep value 3 label BoysIIMen value 4 label Sylenth1 但后来我真的不需要结果中的
  • C# 中默认的访问修饰符是什么?

    类 方法 成员 构造函数 委托和接口的默认访问修饰符是什么 C 中所有内容的默认访问权限是 您可以为该成员声明的最受限制的访问权限 例如 namespace MyCompany class Outer void Foo class Inne
  • 如何将控件设置为透明背景

    如何将控件的背景设置为透明 我说的是Label and Text目前的控件 但可以是我在 GUI 中看到的任何标准控件 shell setBackgroundMode SWT INHERIT FORCE 会做你想做的事 The Compos
  • UTF-8 可在 Eclipse 上使用,但无法使用导出的 jar

    我正在开发一个桌面应用程序Java Swing并将数据保存在MySQL阿拉伯语数据库 使用UTF 8 当我运行应用程序时Eclipse一切都运行良好 但是当我完成并将我的工作导出到runnable jar using Eclipse exp
  • 在 JavaScript 中检测 WebKit 设备的物理屏幕尺寸

    我想在客户端 JavaScript 代码中按屏幕宽度对设备进行分类 所有适合一只手 7 英寸以下 的设备均属于移动类别 将其他设备视为桌面设备 Fallback 将不支持必要 API 的设备视为移动设备 Question 我可以使用哪些相关