如何在一个媒体查询中定位iPhone 3GS和iPhone 4?

Myl*_*ray 50 css iphone mobile-safari css3 media-queries

我正在尝试为iPad/iPhone和旧款iPhone实现替代布局.

我已经确定最好的方法是使用@mediaCSS3规范.

因此,这些是我的媒体查询:

@media screen and (max-width: 1000px) { ... }
Run Code Online (Sandbox Code Playgroud)

以上是小型台式机和笔记本电脑屏幕.

@media screen and (max-width: 700px) { ... }
Run Code Online (Sandbox Code Playgroud)

以上是适用于iPad和非常小的台式机/笔记本电脑屏幕.

@media screen and (max-device-width: 480px) { ... }
Run Code Online (Sandbox Code Playgroud)

以上是iPhone 3GS和移动设备.

然而,新的iPhone 4与史蒂夫乔布斯的所有歌唱全舞"视网膜"显示意味着它的像素比率为2-1意味着1像素实际上出现在浏览器2x2像素使其分辨率(960x640 - 意味着它将触发iPad布局而不是移动设备布局)因此这需要另外的媒体查询(仅限webkit支持):

@media screen and (-webkit-min-device-pixel-ratio: 2) { ... }
Run Code Online (Sandbox Code Playgroud)

现在,问题是......我希望我的闪亮的新iPhone 4布局与iPhone 3GS和移动设备布局合并,因为它们都具有完全相同的内部CSS代码,

因此提出我的问题;

如何创建@media将iPhone 4,3GS和其他手机指向相同样式的规则?

Bol*_*ock 55

因为max-device-width即使使用Retina显示器(因为它们应该),iPhone和iPod touch 也会以逻辑像素而不是物理像素进行测量,因此用于iPhone的原始媒体查询应该足够了:

@media only screen and (max-device-width: 480px) {
    /* iPhone CSS rules here */
}
Run Code Online (Sandbox Code Playgroud)

只有在需要(-webkit-min-device-pixel-ratio: 2)单独定位Retina显示器时才需要.


mat*_*son 6

BoltClock的回答对我来说似乎很不错.

但是,考虑到未来,如果Apple(或其他制造商)发布设备像素比为2的其他设备,此媒体查询也将用于此设备.

我不认为假设这种情况发生是不可能的,并且新设备可能有更大的屏幕,例如带有视网膜显示屏的iPad.

使此查询仅适用于iPhone 4和以前的iPhone(以及类似大小的任何其他设备)

@media screen and (max-device-width: 480px), screen and (max-device-width: [[IPHONE_4_WIDTH]]px) and (-webkit-min-device-pixel-ratio: 2) {
    /* iPhone CSS rules here */
}
Run Code Online (Sandbox Code Playgroud)

目前不确定[[IPHONE_4_WIDTH]] - 我没有一个,有些网站说480,有些人说960.尝试用两者替换.(让我知道你发现了什么:))


mer*_*nen 5

我不确定我是否遵循了您的问题。您是否在 iPhone 4 上尝试过您的查询?device-width以逻辑像素而非物理像素来衡量,因此 iPhone 4 仍然符合 max-device-width: 480px 标准。

高端Android智能手机也是如此,像素比为1.5:Nexus One的物理屏为480x800,逻辑屏为320x533。

  • 该比率定义为物理/逻辑,反之亦然:iPhone 4 有 640 个物理像素对应 320 个逻辑像素,因此其设备像素比为 2。Nexus One 具有 480 个物理像素对应相同的 320 个逻辑像素,结果比例为 1.5。此外,许多低端 Android 设备具有低密度屏幕,240 物理像素为 320 逻辑,因此它们的像素比是(大概;我自己从未尝试过)0.75。 (3认同)

dal*_*per 5

我一直在寻找一种方法,根据请求的第二部分专门针对iPhone 3/3GS.我发现最可接受的解决方案是将媒体查询定制为iPhone 3的固定参数.

@media only screen 
    and (device-width:320px) 
    and (device-height:480px) 
    and (-webkit-device-pixel-ratio: 1) { ... }
Run Code Online (Sandbox Code Playgroud)

为了工作,此查询要求您使用Safari的视口元标记将浏览器修复为100%,具体如下:

<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
Run Code Online (Sandbox Code Playgroud)

还有少量的Android手机也可以通过该查询获取.随着Android Market在潜在屏幕尺寸范围320x480中显示18.4%的有效手机,其中只有一部分将与股票webkit浏览器上的设备像素比率相匹配.不完美,但总比没有好.

电话分辨率列表

所有信息均被视为截止日期.

此外,根据mernen的评论#2,他的帖子是按像素密度定位Android设备的文档:http://developer.android.com/guide/webapps/targeting.html#DensityCSS