手机网页中,max-device-width和max-width有什么区别?

253
我需要为iPhone/Android手机开发一些HTML页面,但是max-device-widthmax-width有什么区别?我需要针对不同的屏幕尺寸使用不同的CSS。
@media all and (max-device-width: 400px)

@media all and (max-width: 400px)

有什么区别?


1
我发现即使在小屏幕设备上没有包含<meta name="viewport" ...>标签,max-device-width也可以正常工作,但是如果没有meta标签,max-width无法正常工作。 - Faizan Akram Dar
8个回答

269

max-width是目标显示区域的宽度,例如浏览器。

max-device-width是设备整个渲染区域的宽度,即实际设备屏幕。

max-heightmax-device-height自然也是如此。


16
如果您想在调整浏览器大小时看到更改,请在开发中使用max-width,尽管在生产环境中,使用max-device-width会更准确。 - John Magnolia
37
@JohnMagnolia 你认为max-device-width在生产中更好,是什么让你有这样的想法?无论设备如何,使用max-width不会更好地保证响应性吗? - e_known
8
我同意。来自各种技能/知识背景的用户并不总是将他们的桌面浏览器窗口最大化(但我还没有看到任何一个在浏览器未最大化情况下打开的平板电脑或手机 - 我想在混合应用程序中这可能是可能的,但那是另一种情况)。设置最大宽度肯定会更普遍。 - Jason
2
@eknown 我不同意。根据你的样式,当达到媒体断点时,你可能会有一个非常不同的外观,如果你基于媒体断点加载样式表,当调整浏览器窗口大小时,网站采用完全不同的外观可能会非常令人不适。 - TwinPrimesAreEz
2
如果您的移动设备布局与桌面端截然不同,很可能是因为没有鼠标光标(需要更大的按钮和单列滚动)。在这种情况下,可以使用一个很好的媒体查询 @media screen and (pointer: coarse) and (hover: none),它将切换到移动版本,无论未来移动设备屏幕有多少像素。 - EoghanM
显示剩余5条评论

92

max-width 指的是视口的宽度,可以与 max-height 一起使用来针对特定的大小或方向。使用多个 max-width(或 min-width)条件,您可以在浏览器调整大小或设备(如 iPhone)更改方向时更改页面样式。

max-device-width 指的是设备的视口大小,不考虑方向,当前缩放或调整大小。这在设备上不会改变,因此无法用于在屏幕旋转或调整大小时切换样式表或CSS指令。


12
对我来说,这个回答比被采纳的回答更容易理解。 对于大多数应用程序而言,似乎 max-widthmax-height 是最常使用的属性。 - hotshot309
2
@JackieChiles在另一个SO线程中提出了一个很好的观点,即应考虑(关于在较大设备上显示移动样式):https://dev59.com/XWoy5IYBdhLWcg3wa9bf - hotshot309
5
这个不错的答案不完整:在Android上,方向切换了设备宽度和高度,而在iOS上没有:请参见http://www.quirksmode.org/blog/archives/2010/04/the_orientation.htm l。 - user69173

17

你觉得使用这种风格如何?

对于大多数针对“移动设备”的断点,我使用min(max)-device-width,而对于大多数针对“桌面”设备的断点,则使用min(max)-width

有很多“移动设备”会糟糕地计算宽度。

请看http://www.javascriptkit.com/dhtmltutors/cssmediaqueries2.shtml

/* #### Mobile Phones Portrait #### */
@media screen and (max-device-width: 480px) and (orientation: portrait){
  /* some CSS here */
}

/* #### Mobile Phones Landscape #### */
@media screen and (max-device-width: 640px) and (orientation: landscape){
  /* some CSS here */
}

/* #### Mobile Phones Portrait or Landscape #### */
@media screen and (max-device-width: 640px){
  /* some CSS here */
}

/* #### iPhone 4+ Portrait or Landscape #### */
@media screen and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2){
  /* some CSS here */
}

/* #### Tablets Portrait or Landscape #### */
@media screen and (min-device-width: 768px) and (max-device-width: 1024px){
  /* some CSS here */
}

/* #### Desktops #### */
@media screen and (min-width: 1024px){
  /* some CSS here */
}

不回答问题,实际上是调试断点的一种不好的方式 - 要小心。 - Forty

11

max-device-width是设备的渲染宽度

@media all and (max-device-width: 400px) {
    /* styles for devices with a maximum width of 400px and less
       Changes only on device orientation */
}

@media all and (max-width: 400px) {
    /* styles for target area with a maximum width of 400px and less
       Changes on device orientation , browser resize */
}

max-width指的是目标显示区域的宽度,即浏览器当前尺寸。


3
@media all and (max-width: 400px) {}这段代码意思是:当浏览器宽度不超过400像素时,应用以下CSS样式。 - virsir

6

区别在于max-device-width是整个屏幕的宽度,而max-width表示浏览器用来显示页面的空间。但另一个重要的区别是对Android浏览器的支持。实际上,如果您要使用max-device-width,这只能在Opera中使用,而我确信max-width将适用于各种移动浏览器(我已经在ANDROID的Chrome、Firefox和Opera中进行了测试)。


5

max-width 是目标显示区域的宽度,例如浏览器;max-device-width 是设备整个渲染区域的宽度,即实际设备屏幕的宽度。

• 如果您使用 max-device-width,当您在桌面上更改浏览器窗口的大小时,CSS 样式将不会更改为不同的媒体查询设置;

• 如果您使用 max-width,当您在桌面上更改浏览器的大小时,CSS 将更改为不同的媒体查询设置,并且可能会显示适用于移动设备的样式,例如触摸友好的菜单。


4
如果你正在制作跨平台应用程序(例如使用phonegap / cordova),那么不要使用device-width或device-height。相反,在CSS媒体查询中使用width或height,因为Android设备在device-width或device-height上会出现问题。对于iOS,它可以正常工作。只有Android设备不支持device-width / device-height。

2
请不要再使用device-width/height。在媒体查询第四级中,device-width、device-height和device-aspect-ratio已被弃用: https://developer.mozilla.org/en-US/docs/Web/CSS/@media#Media_features 只需使用宽度/高度(不带min/max),结合方向和(min/max-)分辨率来针对特定设备。在移动设备上,宽度/高度应与设备宽度/高度相同。

这些简单的“device-xxx”项已经被弃用,而“max-device-xxx”项并没有被弃用。 - Roger Krueger
1
@RogerKrueger 你对此十分确定吗?我没有看到任何迹象表明max-device-xxx媒体查询已经被弃用。 - Jonny Cook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接