CSS Media Query和Javascript / jQuery不匹配

时间:2012-08-16 20:31:26

标签: javascript jquery css css3 media-queries

在我的CSS中,我有一个类似的媒体查询:

@media (min-width: 800px) { /* styles */ }

然后在我的jQuery中,我瞄准窗口宽度并执行一些操作。

编辑:根据下面的答案,我已经改变了这个功能,但我的JS和CSS仍然没有对齐。通过使用接受的答案中指定的Modernizr函数来解决该问题。

$(window).resize(function() {
    var viewportWidth = $(window).width();
    if (viewportWidth >= 800) {
        // do something
    }
});

问题在于,当jQuery在800px或更高时执行时,CSS正在以740px开始。

这些不对齐是否存在已知问题?或者我的页面上是否会有影响CSS的内容以及为什么它是740px而不是800px?也许我应该使用其他东西而不是$(window)

编辑:我在Safari中进行了测试,效果非常好。在Chrome和Firefox中,jQuery函数可以在800px上运行,CSS也是如此。但在Chrome中, CSS 实际上是在740px之后运行,即使媒体查询是800px - 我怎样才能让它们完美对齐?

5 个答案:

答案 0 :(得分:3)

您可以在JS中使用Modernizrexecute the media querymq()方法将返回布尔值):

$(window).resize(function() {
    if (Modernizr.mq('(min-width: 800px)')) {
        // do something
    }
});

答案 1 :(得分:2)

移动宽度检查,否则viewportWidth变量将始终是相同的:

$(window).resize(function() {
    var viewportWidth = $(this).width();
    if (viewportWidth >= 800) {
        // do something
    }
});

答案 2 :(得分:2)

有效代码为:

$(window).resize(function() {

    var viewportWidth = $(window).width();

    if (viewportWidth >= 800) {
        // do something
    }
});

每次调整窗口大小时,新值将存储在viewportWidth变量中。在您的代码中,viewportWidth在页面加载时获得$(window).width()的唯一值。

答案 3 :(得分:1)

我刚试过的,似乎有用,就是使用CSS媒体查询来设置对象样式,然后使用javascript来测试对象是否具有该样式。 Javascript问CSS是什么答案,而不是让页面的两个部分单独确定它:

CSS:

@media (min-width: 800px) {  
    #viewType {width:3px;}
}

HTML:

<div id="viewType" style="display:none"></div>

JavaScript的:

var answer = ($("#viewType").width()==3)

答案 4 :(得分:1)

我同意史蒂夫的回答。 jquery(window).width();是与媒体查询不匹配,甚至不提供准确的窗口宽度大小。这是我从史蒂夫那里得到的答案和修改过的。

CSS :
        @media (max-width: 767px) {

           //define your class value, anything make sure it won't affect your layout styling
           .open {
            min-width: 1px !important;
           }
        } 

        .open {
              min-width: 2px;
        }

Js:

// when re-sizing the browser it will keep looking for the min-width size, if the media query is invoked the min-width size will be change.

$(window).on('resize orientation', function() {

    var media = $('.open').css('min-width');

    if( media == '1px') // means < 767px 
    {       
        // do your stuff
    }

});

就是这样〜希望它有所帮助。