我应该使用最大设备宽度还是最大宽度?


81

使用CSS媒体查询,您可以用于max-device-width定位设备宽度(例如iPhone或Android设备)和/或max-width定位页面宽度的。

如果使用max-device-width,则在更改桌面上浏览器窗口的大小时,CSS不会更改,因为您的桌面不会更改大小。

如果使用max-width,则在更改桌面上浏览器窗口的大小时,可能会显示面向移动的样式,例如触摸友好的元素和菜单等。

现在已不建议定位特定的浏览器(和设备?),并​​且您应该对定位的对象有所了解。这也适用于媒体查询吗?

为什么要针对一个目标呢?推荐哪一个?

这是我在生产网站上使用的媒体查询的示例:

@media only screen and (min-device-width: 320px) and (max-device-width: 480px) and (min-device-height: 480px) and (max-device-height: 640px) {  
    /* Change a menu to fit the screen better, etc... */
}

我倾向于同时使用max-device-widthmax-width


Answers:


111

TL; DR

如果您要创建一个自适应网站,请在媒体查询中使用min-width/ max-width,而不是min-device-width/ max-device-width,以针对更大范围的屏幕尺寸。

根据2018年Media Queries Level 4规范草案不建议使用device-width媒体功能。保留它是为了向后兼容,但应避免使用。

8.附录A:不推荐使用的媒体功能

欲查询的视口的大小(或页面媒体页面箱), widthheightaspect-ratio媒体功能应该被使用,而不是device-widthdevice-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-网络基础知识-响应式CSS媒体查询

也可以基于*-device-width;创建查询;尽管强烈反对这种做法。

差异是微妙的,但非常重要:min-width基于浏览器窗口的大小,而min-device-width基于屏幕的大小。不幸的是,包括旧版Android浏览器在内的某些浏览器可能无法正确报告设备宽度,而是报告以设备像素为单位的屏幕尺寸,而不是预期的视口宽度。

此外,使用*-device-width会阻止内容在台式机或其他允许调整窗口大小的设备上进行调整,因为查询是基于实际设备的大小,而不是浏览器窗口的大小。

进一步阅读:


2
同意您所说的一切,但忘记它的向后兼容性方面,这在几年之内将不再重要。为什么桌面站点的工作方式不同,因为我们现在有了手机?
John Magnolia

2
我只是认为不应将移动网站显示在桌面上。您应该能够将浏览器调整为任意宽度并使用水平滚动条。假设您想比较2个网站的一部分,但隐藏侧边栏,则将在2个窗口中打开并并排调整大小
John Magnolia

3
我同意John M的观点,google是错误的,我个人发现他们的响应式设计'documentation'是其中一些最不流行的时尚驱动东西,它们具有信誉,仅是因为编写它的孩子是受google雇用的。我最初对此表示赞同,但我认为答案是错误的,只是因为越来越多的网站正在破坏他们的桌面用户体验,完全不必要地适合所有响应式CSS框架(只为减少开发人员的时间)意见),并不意味着您必须破坏桌面用户的体验。我们不这样做,并且转换率提高了10倍。
Lizardx

“如果此标签的内容值为width=device-width,则屏幕的宽度将与设备无关的像素相匹配。” 如果您在iOS设备上浏览,而不是dps与之相对应,那又是什么呢?iOS点数?(顺便说一句,非常感谢您的这篇文章!)
in_flight

答案有点过时了。没什么问题,max-device-width如果要在可调整大小的视口环境(桌面)中使用它,这一点很重要。min-device-width仍然很糟糕。
ShortFuse

6

避免设备宽度。原因是您不知道用户浏览器如何响应。

对于IOS,这似乎很简单,至少对于Safari而言。这似乎是一个与方向无关的单个设备宽度响应。另外,设备宽度仅针对设备的较短侧进行说明。我确实在iPhone 4S和iPad上进行了测试。无论面向哪个方向,他们都分别响应了320和768。

对于Android,它更加不可预测。我在华为Ascend Y330上测试了六个浏览器(Android默认浏览器,Chrome,Opera,Firefox,Firefox Beta,Dolphin)。响应因浏览器类型和方向而异。

我在带有查询的页面上进行了测试(最大设备宽度:*** px),并找出需要填写的px值才能使查询处于真实状态。根据浏览器的类型和方向,需要四个不同的值(320、480、534、800)。这使得设备宽度不可用。


1
设备宽度是了解用户使用的设备的唯一可靠方法,因此您可以相应地调整布局。当您根据视口中的像素调整布局时,最终会由于用户放大而在某些台式机上进行移动设计。这常常导致与用户想要的相反(只是放大了一点)
爱丽丝·汪德

您应该向无法报告准确设备宽度的移动浏览器提交错误报告。在许多情况下,我发现默认情况下将其他浏览器设置为假装它们是台式机浏览器,每个CSS像素使用1个设备像素-这很可能就是您遇到的问题。
爱丽丝·旺德

5

如果使用最大宽度,则在更改桌面上浏览器窗口的大小时,可能会显示面向移动的样式,例如触摸友好的元素和菜单等。

令我震惊的是,似乎很受欢迎。我还没有弄清楚,由于错误或正确的原因,在移动设备之前进行流体/液体设计是否被认为是不好的。在我看来,这只是液体布局的一种更好的版本,但由于某种原因,设计师们正在拥抱这种布局。

当整个设计界在2000年代中期选择在液体上放置固定版式时,这是因为文本回流阻碍了易读性,通常会导致寡妇和其他印刷品。另外,从设计到设计,维护代码库通常很棘手,以防止元素冲突等。液体布局和响应式设计之间的唯一区别是响应性,这是因为浏览器更好,并且类似砌体的框架的泛滥使它更易于实现。

我个人使用min / max-device-width是因为我喜欢遵循具有数十年优先级的桌面文档约定。并非您在Internet上打开的所有文档都将在台式机上以这种方式运行,加载在台式机上的其他类型的文档或应用程序也不会如此。像MS Word,Photoshop等一样,在移动设备占主导地位之前设计的页面会保持其滚动位置,并且不会更改其布局,从而允许用户在执行无关的窗口管理任务时跟踪页面流中的内容。

我通常使用3个断点:一个用于电话,一个用于平板电脑和一个用于台式机。台式机(通常至少是横向)是固定的,而平板电脑及以下的肖像是固定的。自适应和响应的结合使桌面的行为类似于桌面站点,同时使我不必布局10多个单独的固定宽度的移动设备布局。文本不会在移动设备上重排,因为无法调整视口的大小。


2
在某些移动设备中,可以调整视口的大小-例如,窗口允许将多个应用程序“捕捉”到屏幕上,并且某些android手机支持通过窗口同时查看两个应用程序。客观上,我不明白为什么您不希望在较小的屏幕台式机上使用平板电脑风格的布局,但是主观上这取决于布局。
2014年

2
我也使用min / max-device-width,但令我感到恐惧的是,一个客户端设置了hotjar,它创建了一些与您的网站进行用户交互的视频,然后我意识到新的android 6三星银河6正在处理min的像素数/ max-device-width是实际的屏幕像素,而不是css像素,这当然会使页面离开屏幕。在我们的案例中,发生的事情是用户使用了这些4倍像素密度的屏幕,混合使用了移动和桌面CSS。就我个人而言,我认为响应良好的台式机显示器上没有任何位置对用户不利。所以要小心
Lizardx '16

2
保罗,需要做一些研究才能弄清楚到底发生了什么。我认为乔什(Josh)的答案是错误的,谷歌(Google)的答案也是错误的。桌面应该是响应式的概念只是由Google之类的团体推动的一种时尚,各种尺寸都适合所有CSS框架。我们的问题来自糟糕的hotjar编程。我的触发点基本上将所有大屏幕设备都视为台式机,但需要进行一些调整,然后转到视口将仅是移动设备的位置。对于寻求清晰性的用户,我认为保罗的答案是正确的,而时尚驱动的响应式答案是错误的。
Lizardx '16

1
仅供参考-自2018年起,*-device-width最新的媒体查询规范草案中实际上已弃用了媒体功能-drafts.c​​sswg.org/mediaqueries-4/#mf-deprecated
Josh Crozier

这是一个旧的答案,但即使在2014年,我也将对此表示强烈反对。通过养成遵循良好习惯的习惯,可以很容易地避免引用的那些印刷错误和“元素冲突”。屏幕分辨率变得越来越疯狂,随着时间的流逝,可缩放的响应式设计将变得越来越重要,而固定站点将变得越来越难以访问。
小家伙
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.