TL;博士
如果您正在制作响应式网站,请在媒体查询中使用min-width
/max-width
而不是min-device-width
/max-device-width
以针对更广泛的屏幕尺寸。
根据 2018 Media Queries Level 4 规范草案,device-width
媒体功能已被弃用。它将保留以实现向后兼容性,但应避免使用。
8. 附录 A:已弃用的媒体功能
要查询视口(或页面媒体上的页面框)的大小,width
应使用height
和媒体功能,而不是,和,它们指的是设备的物理大小,无论有多少空间可用于正在布置的文件。媒体功能有时也用作检测移动设备的代理。相反,作者应该使用能够更好地代表他们尝试设计风格的设备方面的媒体功能。aspect-ratio
device-width
device-height
device-aspect-ratio
device-*
作为旁注,请记住在文档的部分中指定视口元标记:<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
解释
由于给定设备可能具有的所有不同可能的屏幕分辨率和像素密度,一个像素不是一个像素,因为有几个因素需要考虑(缩放、像素密度、屏幕分辨率和尺寸、设备方向、纵横比等) ..)。在这种情况下,像素实际上被称为“光学参考单元”,而不是物理硬件像素。
幸运的是,您可以在文档部分指定视口元标记,以控制浏览器视口的宽度和缩放。<head>
如果此标记的content
值为width=device-width
,则屏幕的宽度将与设备无关像素匹配,并确保所有不同设备的缩放和行为一致。
<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 年,最新的媒体查询规范草案实际上已经弃用了device-width
媒体功能,因此应该避免。
此外,Google Developers 上的这篇文章强烈反对使用max-device-width
:
Google Developers - Web Fundamentals - 响应式 CSS 媒体查询
也可以基于*-device-width
;创建查询 尽管强烈反对这种做法。
区别是微妙但非常重要的:min-width
基于浏览器窗口的大小,而min-device-width
基于屏幕的大小。不幸的是,包括旧版 Android 浏览器在内的一些浏览器可能无法正确报告设备宽度,而是以设备像素为单位报告屏幕尺寸,而不是预期的视口宽度。
此外,使用*-device-width
可以防止内容适应桌面或其他允许调整窗口大小的设备,因为查询是基于实际设备大小,而不是浏览器窗口的大小。
延伸阅读: