媒体查询最小宽度在 Opera、FF 和 IE 中未正确触发

Posted

技术标签:

【中文标题】媒体查询最小宽度在 Opera、FF 和 IE 中未正确触发【英文标题】:Media Queries min-width not firing correctly in Opera, FF and IE 【发布时间】:2012-04-21 06:28:42 【问题描述】:

我在页面http://test.lovecpokladu.cz/detail-mince?id=2461 上使用媒体查询,如下所示:

@media all and (min-width: 660px) 
    ... styles for box decoration ...

并使用这个元视口标签:

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

当我将 Chrome 的窗口大小调整为 660 像素(仅测量 html 页面,而不是窗口边框)时,样式会正确应用。样式不适用于 659px,这是正确的。

问题在于 Opera、IE 和 Firefox。一旦宽度达到大约 642 像素,样式就会应用 :( 我观察到这些浏览器会在更多内容时更快地触发 min-width,即使在最大宽度条件下甚至在另一个网站(由我构建)上也是如此。

问题可能出在哪里?

非常感谢!

【问题讨论】:

差别基本上是垂直滚动条的宽度吗? 【参考方案1】:

BODY 或 HTML 中的滚动条宽度问题 - 大约 16-18 像素。

怎么办?

    错误的解决方案 - 设置为 BODY 或 HTML overflow-y: scroll。 实验性解决方案 - 尝试将滚动条从 BODY 或 HTML 移动到第一个包装器 DIV。

像这样:

body, html  overflow: hidden; height: 100%; 
div.wrapper  overflow: auto; height: 100%; 

【讨论】:

谢谢,我不知道是因为滚动条。第一个解决方案在所有现代浏览器中都不起作用,第二个单词在所有现代浏览器中都不起作用,但在 IE7 中并没有多大作用,在 IE7 中,所有相对、绝对(甚至可能是正常)定位的元素都将它们的位置固定在屏幕上。 无论如何,根据this article,基于 Webkit 的浏览器不遵循 W3C 规范,该规范称视口是测量的包括滚动条。鉴于 Webkit 浏览器统治移动网络这一事实,我们可能会看到这种行为在 Webkit 和 W3 + 次要浏览器之间合并。无论如何,这真的很烦人,我很沮丧:( 顺便说一句,只改变 html 和 body 的 CSS 就足够了:htmloverflow:hidden;height:100%; body overflow:auto;height:100% 谢谢你!为我节省了很多时间的头痛......我欠你一袋咖啡! 这个解决方案很棒,但不幸的是它可能会改变一些知名 jQuery 插件的默认行为【参考方案2】:

我刚刚遇到了同样的问题并找到了解决方案,至少对我来说是这样。我没有对它进行很多测试,所以如果有什么我没有考虑到的,请告诉我。

在媒体查询中,我将正文的最小宽度设置为媒体查询的最小宽度。有效!

@media only screen
and (min-width : 1060px) 
    body
        min-width: 1060px;
    
    #main-content
        text-align: right;
        padding-left: 0;
    

我在这里为这个问题和解决方案做了一个例子:

http://gehirnstroem.at/media-query.htm

http://gehirnstroem.at/media-query-solved.htm

【讨论】:

谢谢!下次我会测试它。目前,我为所有浏览器设置了足够安全的媒体查询宽度。

以上是关于媒体查询最小宽度在 Opera、FF 和 IE 中未正确触发的主要内容,如果未能解决你的问题,请参考以下文章

Chrome, Safari 中的 JQuery .animate() != FF, IE, Opera

为啥我的 jquery 表单验证不适用于 IE7?它适用于 FF、Opera、Safari 等

网页尺寸scrollHeight

媒体查询:检查最小高度和最小宽度?

IE兼容

SVG - 具有笔划宽度的圆圈未填充铬