iPhone 忽略 CSS 媒体查询。存在视口标签。在桌面上工作[关闭]

Posted

技术标签:

【中文标题】iPhone 忽略 CSS 媒体查询。存在视口标签。在桌面上工作[关闭]【英文标题】:iPhone is ignoring CSS media queries. Viewport tag present. Working in desktop [closed] 【发布时间】:2013-04-24 11:49:09 【问题描述】:

编辑:这完全是我的新手错误。我正在编辑与我正在测试的文件集不同的文件集。向所有回答帮助我的人表示诚挚的歉意。我对所有答案都投了赞成票,因为我至少从你们所有人那里学到了更多关于媒体查询的知识,但没有人提供答案。请问现在如何处理这张票?


这是网站上的一个繁忙话题,但我还没有看到这个问题的解决方案。

viewport 标签存在。我正在使用:

<meta name="viewport" content="width=device-width,initial-scale=1.0">

当我在 Chrome 中调整浏览器窗口的大小时,它工作正常,我可以看到它在到达新断点时捕捉到它们,但是 iPhone Safari 仅显示站点的左上角,没有任何查询的迹象.

我用于 iPhone 肖像的 CSS 媒体查询是:

@media (max-width: 321px)  

我使用的是 Bootstrap 和 LESS,所以我的媒体查询位于样式的末尾。

抱歉,我无法分享这方面的代码。这很奇怪——我希望有人能看看我是否遗漏了什么。

编辑

这是一个在我的 iPhone 上运行的非常基本的示例。我可以从纵向旋转到横向,并且背景颜色会改变 - 所以我正在使用的媒体查询没有任何问题:

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <style type="text/css">

        body
        
            background: blue;
        

        @media (max-width: 321px)
        
            body
            
                background: red;
            
        
    </style>
</head>
<body>
    Here is my content...
</body>

【问题讨论】:

max-width vs max-device-width? 谢谢。不,那没有用。 如果这个最小的示例有效,但完整的示例无效,那么您可能在某处有损坏的 CSS 或多个相互覆盖的媒体查询 @DavidRönnqvist:最诚挚的歉意:我的页面指向的 URL 与我正在处理的页面不同。菜鸟错误。很抱歉浪费您的时间来帮助我。 @nimmolo:我最诚挚的歉意:我的页面指向的 URL 与我正在处理的页面不同。菜鸟错误。很抱歉浪费您的时间来帮助我。 【参考方案1】:

我以前在我的网站上使用过它,它对我来说是 iPhone 特定的媒体查询

@media only screen 
   and (max-device-width: 480px) 
   and (orientation:landscape) 
    /* iPhone landscape */


@media only screen 
   and (max-device-width: 480px) 
   and (orientation:portrait) 
    /* iPhone portrait */

其他问题like this 的答案似乎表明max-device-width480px 是您在媒体查询中应该使用的。

【讨论】:

谢谢。看起来是对的。我对此研究得越多,我就越认为我触发了一些不寻常的错误。 @BBTony(因为这是您在这里的第一个问题)如果答案有用,请考虑对其进行投票。如果它解决了您的问题,请考虑将其标记为“已接受”。但不要仅仅因为我或其他人告诉你就这样做。如果您的问题仍未得到解答,请考虑对其进行更详细的编辑,以帮助我们理解问题。 感谢您的建议。仍在学习绳索。我会照办的。谢谢。仍在调查中。当我找到解决方案时会自己发布答案。【参考方案2】:

编辑 为我解决这个问题的是双(“或”操作)媒体查询,对于最大设备宽度或最大宽度。这就像 David Rönnqvist 的第一个建议,但它只是将 max-width, max-device-width BOTH 放在对我有用的媒体查询中。

@media screen and (max-device-width:640px), screen and (max-width:640px) 
    /* styles here */

BBTony,我希望这对你有用。

我保留以下内容,因为它比我在其他任何地方找到的更全面地描述了问题。我非常不喜欢我的第一个解决方案(线下),以至于我第一千次重新研究 - 感谢this post,它给了我上面的解决方案,没有荒谬的 !importants。


编辑:这也有效,但非常不优雅:在媒体查询条件 CSS 的每一行都添加“!important”。

我不愿意提出这个作为答案,但是在疯狂地研究了 3 天之后,这是对我有用的第一件事。

问题的完整描述:我的症状与 BBTony 相似。我有视口标签(我按照建议将它放在样式表上方)。

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

我的媒体查询旨在捕获任何小型设备,但运行 ios 5.1 的 iPhone 3gs 忽略了我的媒体查询,但运行 iOS 6 的 iPhone 4s 正确接收了相同的媒体查询。

@media only screen and (max-device-width:640px) 
   /* many styles here */

很奇怪,虽然媒体查询中的大多数声明都被旧款 iPhone 忽略了,但其中一些声明得到了尊重。然而,如预期的那样,较新的 iPhone 4s 尊重媒体查询中的所有 CSS。在 Safari 桌面上,媒体查询都运行良好,在两个断点处捕捉(有 2 个)。

在阅读 here 后,我通过几个不同的 linters 对我的 CSS 进行了 linting,CSS 错误会导致移动浏览器忽略媒体查询。在确定我的 CSS 是合规的之后,我在媒体查询中的每一行 CSS 之后都放了 !important 声明 - 比如 80-100 !importants。

快速。

我无法告诉你这让我多么生气,这甚至可以奏效,而且我很好奇为什么旧 iphone 在这种情况下只会尊重带有 !important 的条件。

【讨论】:

感谢您对此进行调查。我暂时离开了那个项目,但会回到它,所以我会记住你的解决方案。 以上评论已编辑。一旦我正确消化了您的答案。道歉... 有一个类似的问题,当iphone翻转到水平状态时css规则没有生效,只有在页面刷新时才激活css规则。这为我修好了!

以上是关于iPhone 忽略 CSS 媒体查询。存在视口标签。在桌面上工作[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用视口进行响应而不是媒体查询

视口和 CSS 媒体查询的宽度不同?

iOS7 忽略视网膜 css 媒体查询 - 背景大小

iPhone 忽略媒体查询

css 移动设备的媒体查询 - 至少需要内容为“width = device-width”的元视口标记

媒体查询视口viewport和meta标签flex布局