TL;DR
如果您正在制作响应式网站,请在媒体查询中使用 min-width/max-width 而不是 min-device-width/max-device-width,以便定位更广泛的屏幕尺寸。
根据 2018 年的 Media Queries Level 4 specification draft,device-width 媒体功能已弃用。将保留它以实现向后兼容性,但应避免使用。
8. Appendix A: Deprecated Media Features
要查询视口(或页面媒体上的页面框)的大小,应使用width、height 和aspect-ratio 媒体功能,而不是device-width、device-height 和@ 987654346@,它指的是设备的物理尺寸,无论有多少空间可用于布置的文档。 device-* 媒体功能有时也用作检测移动设备的代理。相反,作者应该使用能够更好地代表他们尝试设置样式的设备方面的媒体功能。
作为旁注,请记住在文档的 <head> 部分中指定 viewport meta tag:
<meta name="viewport" content="width=device-width, initial-scale=1">
说明
由于给定设备可能具有的所有不同可能的屏幕分辨率和像素密度,a pixel is not a pixel 因为有几件事情需要考虑(缩放、像素密度、屏幕分辨率和尺寸、设备方向、纵横比等) ..)。在这种情况下,像素实际上称为"optical reference unit",而不是物理硬件像素。
幸运的是,您可以在文档的<head> 部分指定viewport meta tag,以控制浏览器视口的宽度和缩放比例。如果此标记的content 值为width=device-width,则屏幕的宽度将为match the device independent pixels,并确保所有不同设备的缩放和行为一致。
<meta name="viewport" content="width=device-width, initial-scale=1">
就媒体查询而言,您可能希望使用max-width 而不是max-device-width,因为max-width 将针对视口(当前浏览器窗口),而max-device-width 将针对设备的实际全屏尺寸/分辨率。
换句话说,如果您使用max-device-width,则在调整桌面浏览器大小时不会看到应用了不同的媒体查询,因为与max-width不同,仅考虑设备的实际全屏尺寸;不是浏览器窗口的当前大小。
如果您尝试创建自适应布局,这会产生巨大的影响,因为在调整浏览器大小时网站不会响应。此外,如果您使用max-device-width,则您用于定位具有较小屏幕的设备的媒体查询将不适用于桌面,即使将浏览器窗口缩小以匹配所述较小的屏幕尺寸也是如此。
截至 2018 年,最新的 media query specification draft 实际上已弃用 device-width 媒体功能,因此应避免使用。
此外,这个article on Google Developers 非常不鼓励使用max-device-width:
Google Developers - Web Fundamentals - Responsive CSS media queries
也可以基于*-device-width创建查询;尽管强烈反对这种做法。
区别很微妙但非常重要:min-width 是基于浏览器窗口的大小,而min-device-width 是基于屏幕的大小。遗憾的是,某些浏览器(包括旧版 Android 浏览器)可能无法正确报告设备宽度,而是以设备像素为单位报告屏幕尺寸,而不是预期的视口宽度。
此外,使用*-device-width 可以防止内容适应桌面或其他允许调整窗口大小的设备,因为查询是基于实际设备大小,而不是浏览器窗口的大小。
延伸阅读: