css - 在javascript中获取设备宽度

有没有办法使用javascript获取用户设备宽度,而不是视口宽度?

正如我所说,CSS媒体查询提供了这一点

@media screen and (max-width:640px) {

/* ... */

}

@media screen and (max-device-width:960px) {

/* ... */

}

如果我的目标是横向智能手机,这将非常有用。 例如,在iOS上,max-width:640px的声明将同时针对横向和纵向模式,即使在iPhone 4上也是如此。据我所知,这不是Android的情况,因此在此实例中使用设备宽度成功地针对两个方向 ,无需针对桌面设备。

但是,如果我基于设备宽度调用javascript绑定,我似乎仅限于测试视口宽度,这意味着额外的测试,如下所示,

if ($(window).width() <= 960 && $(window).height <= 640) { /* ... */ }

考虑到设备宽度可用于css,这对我来说似乎并不优雅。

8个解决方案

184 votes

您可以通过screen.width属性获取设备屏幕宽度。

有时,在处理窗口大小通常小于设备屏幕大小的桌面浏览器时,使用window.innerWidth(通常不在移动设备上找到)而不是屏幕宽度也很有用。

通常,在处理移动设备和桌面浏览器时,我使用以下内容:

var width = (window.innerWidth > 0) ? window.innerWidth : screen.width;

Bryan Rieger answered 2019-07-21T16:59:39Z

50 votes

Bryan Rieger的一个有用答案的问题是,在高密度显示器上,Apple设备会报告屏幕宽度,而Android设备会以物理像素报告。 (参见[http://www.quirksmode.org/blog/archives/2012/07/more_about_devi.html]。)我建议在支持matchMedia的浏览器上使用if (window.matchMedia('(max-device-width: 960px)').matches) {}。

answered 2019-07-21T17:00:04Z

12 votes

我只是有这个想法,所以也许它是短视的,但它似乎运作良好,可能是你的CSS和JS之间最一致的。

在CSS中,您可以根据@media屏幕值设置html的max-width值:

@media screen and (max-width: 480px) and (orientation: portrait){

html {

max-width: 480px;

}

... more styles for max-width 480px screens go here

}

然后,使用JS(可能通过像JQuery这样的框架),您只需检查html标记的max-width值:

maxwidth = $('html').css('max-width');

现在您可以使用此值进行条件更改:

If (maxwidth == '480px') { do something }

如果将最大宽度值放在html标签上似乎很可怕,那么也许你可以放一个不同的标签,一个仅用于此目的的标签。 为了我的目的,html标签工作正常,不会影响我的标记。

如果您正在使用Sass等,则非常有用:要返回更抽象的值,例如断点名称,而不是px值,您可以执行以下操作:

创建一个将存储断点名称的元素,例如

使用css媒体查询更改此元素的content属性,例如: G。 “大”或“移动”等(与上面相同的基本媒体查询方法,但设置css'content'属性而不是'max-width')。

使用js或jquery(jquery,例如@include respond-to(xs))获取css内容属性值,该值返回“large”或“mobile”等,具体取决于媒体查询设置的内容属性。

根据当前价值行事。

现在,您可以使用与sass相同的断点名称,例如 sass:@include respond-to(xs),和js if ($breakpoint = "xs) {}。

我特别喜欢的是,我可以在css和一个地方(可能是变量scss文档)中定义我的断点名称,并且我的js可以独立地对它们起作用。

RogerRoger answered 2019-07-21T17:02:02Z

4 votes

我认为使用window.devicePixelRatio比window.matchMedia解决方案更优雅:

if (window.innerWidth*window.devicePixelRatio <= 960

&& window.innerHeight*window.devicePixelRatio <= 640) {

...

}

maxime schoeni answered 2019-07-21T17:02:30Z

3 votes

var width = Math.max(window.screen.width, window.innerWidth);

这应该处理大多数情况。

ZNS answered 2019-07-21T17:03:04Z

2 votes

Lumia手机提供错误的screen.width(至少在模拟器上)。那么也许Math.min(window.innerWidth || Infinity, screen.width)可以在所有设备上运行?

或者更疯狂的东西:

for (var i = 100; !window.matchMedia('(max-device-width: ' + i + 'px)').matches; i++) {}

var deviceWidth = i;

Munawwar answered 2019-07-21T17:03:39Z

2 votes

核实

const mq = window.matchMedia( "(min-width: 500px)" );

if (mq.matches) {

// window width is at least 500px

} else {

// window width is less than 500px

}

[https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia]

MEAbid answered 2019-07-21T17:04:13Z

1 votes

你可以轻松使用

document.documentElement.clientWidth

Re Undo answered 2019-07-21T17:04:47Z

html怎么获取设备宽度,css - 在javascript中获取设备宽度相关推荐

  1. javascript中获取dom元素高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight ...

  2. java+script+当前日期_如何在JavaScript中获取当前日期?

    如何在JavaScript中获取当前日期? #1楼 您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法. #2楼 如果您想对日期格式进行更多的粒度控制,我强烈建议您查看 ...

  3. 如何在JavaScript中获取时间戳

    如何在JavaScript中获取时间戳 +运算符 我们可以使用+运算符将日期对象直接转换为UNIX时间戳. 例如,我们可以这样写: +new Date() +日期对象之前操作者触发valueOf的方法 ...

  4. 如何在JavaScript中获取字符串数组的字符串?

    本文翻译自:How do you get a string to a character array in JavaScript? How do you get a string to a chara ...

  5. 如何在 JavaScript 中获取当前日期?

    问: 想要改进这篇文章?提供这个问题的详细答案,包括引文和解释为什么你的答案是正确的.没有足够细节的答案可能会被编辑或删除. 如何在 JavaScript 中获取当前日期? 答1: HuntsBot周 ...

  6. 在 JavaScript 中获取对象的第一个键名

    本文将演示如何提取对象第一个属性的键(键值对). 目录 1.在JavaScript中获取对象的第一个键名 2.用于object.entries()在JavaScript 中获取对象的第一个键名 3.用 ...

  7. JavaScript 中获取光标位置

    1.概念和原理 DOM中并没有直接获取光标位置的方法,那么我们只能间接来获取光标位置.DOM支持获取光标选中的范围,我们可以以此为切入点,来获取或定位光标的位置,当选取范围起始点和结束点一样时,就是光 ...

  8. html 获取文本框值,html - 如何在JavaScript中获取文本框值

    html - 如何在JavaScript中获取文本框值 我正在尝试使用JavaScript从HTML文本框中获取值,但值不是在空格之后 例如: 我只得到:上面的"软件". 我正在使 ...

  9. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

最新文章

  1. 怎么把数据存到MySQL_怎样将Arduino数据直接存储到MySQL
  2. 这些令人仰望的C++大咖,都是怎样炼成的?
  3. HTML--- 创建一个登录页面(HTML,CSS)
  4. java arraycopyof_Java中System.arraycopy()和Arrays.copyOf()的区别
  5. 无法访问此网站 localhost 拒绝了我们的连接请求。_网站经常被DDOS攻击会造成什么影响...
  6. html 直线变曲线,CSS3怎么画曲线?
  7. 一句话菜刀 php eval,如何基于菜刀PHP一句话实现单个文件批量上传?
  8. 图书管理系统C++程序源代码
  9. idea运行lua脚本
  10. CRISPR基因编辑技术获诺奖,人类的福音还是灾难?
  11. mysql中插入数据时Duplicate entry ‘‘ for key ‘PRIMARY‘的解决方案
  12. 【1字=16bits的原因,switch汇编详解,跳到中间 jump to middle,guarded-do门卫】
  13. 使用 Metasploit 渗透局域网 Windows 设备
  14. vue+elementui身份证验证
  15. Spring Web Flow 2中的流管理持久性
  16. 北京:外地社保卡可以在北京19家医院实现住院费用即时结算!
  17. 如何查看电脑CPU的核心个数
  18. 4.页面评价算法 Heritrix应用与扩展
  19. 人活到了30岁,月薪还停留在20岁怎么办?
  20. 如何访问局域网内宿主机上的虚机服务

热门文章

  1. 初次联系导师短信模板_复试之后要不要联系导师?该怎么联系?
  2. Zabbix监控实践
  3. ubuntu安装xinetd服务报错 invoke-rc.d: policy-rc.d denied execution of restart解决
  4. 使用 T-SQL 语句对数据库表进行单个数据插入、成批数据插入、修改和删除数据操作的介绍
  5. finallshell用密钥对链接阿里云服务器
  6. 对接饿了么开放平台(Java)
  7. 云计算有这样一项就可以啦,云计算技术与应用课程线上线下混合式教学改革与实践
  8. vmware创建虚拟机
  9. 关于python编程——从入门到实践一书的详细学习笔记(1)
  10. JSON格式店铺商品列表api