【问题标题】:What is the best way to detect smaller devices like mobiles or tablets in CSS?在 CSS 中检测移动设备或平板电脑等小型设备的最佳方法是什么?
【发布时间】:2014-02-08 22:31:20
【问题描述】:

当我读到响应式设计时,人们总是会使用以下语句: @媒体屏幕和(最大宽度:)

但是今天的手机似乎具有非常好的分辨率(通常比电脑还高),检测小型设备的最佳方法是什么?

谢谢 ;=)

【问题讨论】:

  • “更小”是什么意思?按像素还是按物理尺寸?我的 ~4" 银河系的像素比 10" ipad 2 多...
  • 是物理的,这实际上是问题所在。您无法通过分辨率检测设备大小
  • 理论上你应该能够像在 css 中一样使用真实世界的单位。 12in 或 5cm。不过,从未尝试过。 CSS 渲染引擎应该处理获取设备屏幕规格和 DPI 等级的必要工作,并将这些真实世界的单位转换为物理像素测量值
  • 在 css 中 1in 总是 96px (w3.org/TR/css3-values/#lengths)。

标签: html css mobile media tablet


【解决方案1】:

屏幕分辨率无关紧要。媒体查询中使用的值是设备宽度。例如:

我的手机的屏幕分辨率为 1280x720 像素。竖直放置时(纵向模式)宽度为 720 像素,但由于它是高清屏幕,因此它具有 200% 的比例,因此得到的设备宽度为 360 像素。这是媒体查询中使用的值:

/* Even though my phone has a screen width of 720px… */

@media screen and (max-width: 360px) {
     /* 
      * This code will apply 
      */
}

@media screen and (min-width: 361px) {
     /* 
      * This code will not apply
      */
}

一般规则是纵向模式下的手机的设备宽度小于或等于 400 像素,无论其屏幕包含多少实际像素。

【讨论】:

  • 试用 Sony Xperia Z1 Compact,阈值为 400px。不工作(Xperia 上的 Chrome 浏览器显示与桌面浏览器相同)。真的没有其他检测小屏幕设备的解决方案吗?
  • <link rel="stylesheet" type="text/css" href="css/template.normal.css" media="(min-width: 400px)" /> <link rel="stylesheet" type="text/css" href="css/template.mobile.css" media="(max-width: 400px)" /> 这会在 Xperia 上加载 *normal.css"。我必须将宽度阈值设置为至少 980 像素才能在 Xperia 上加载 mobile.css。
  • @Steffen 嗯,我不确定浏览器对 media 属性的支持是什么样的。我使用带有@media at-rules 的单个样式表。
  • 在摩托罗拉 Moto X2(在 chrome 和 firefox 上)上进行测试,结果完全相同。如果它的横向或纵向模式也没有什么不同(宽度阈值在每种情况下都是 980 像素)。同样有趣的是,Google Mobile 测试方developers.google.com/speed/pagespeed/insights 的响应也完全相同。可能在 Android 5.x 上,阈值在每种情况下都是 980 像素 ...
  • 你好 Sime!找到了!我必须在 HTML 中添加 <meta name=viewport content="width=device-width, initial-scale=1">。然后你的规则似乎是正确的。另请参阅“sharklasers”的答案。谢谢。
【解决方案2】:

不能直接查询物理尺寸。

但是,您可以对 DPI 以及高度和宽度执行媒体类型查询。

例子

@media(resolution: 326dpi) and (device-width: 640) and (device-height: 1136) {
   // Iphone 5s
}

这应该是一个很好的起点:List of displays by pixel density

【讨论】:

  • 我应该创建并维护所有移动设备的列表来执行此操作吗?应该这样吗??没有通用的解决方案来检测小屏幕尺寸的移动设备?
【解决方案3】:

Retina/HD 移动显示器上的物理像素和 CSS 像素不同。

研究视口元标记以获取有关设备宽度的信息。即<meta name="viewport" content="width=device-width"> 是按 100% 缩放的 CSS 像素宽度。

请参阅Viewport Device-Widths 了解常见的移动屏幕尺寸列表。

【讨论】:

  • 这与“Šime Vidas”的答案一起对我来说似乎没问题。谢谢
【解决方案4】:

当您进行响应式设计时,您实际上并没有“检测”屏幕尺寸,而是使用 CSS 媒体查询“定位”各种尺寸。

例如,如果您使用的是 Modernizer 之类的库,那么您实际上就是在对各种属性进行检测。

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2013-02-02
    • 1970-01-01
    相关资源
    最近更新 更多