检测浏览器大小并为每个分辨率应用css

时间:2013-03-27 08:23:15

标签: javascript jquery html css

我有这个功能,当浏览器调整大小或菜单渲染不同的分辨率时,我用它来向菜单应用一些css。 我的问题是这个,为什么浏览器没有正确解释我的功能?因为当我从半模式以完整模式调整浏览器时,浏览器仅解释'800-1024'分辨率,但如果我在浏览器中ctrl+f5(全部清除)正确解释我的分辨率,那么我的功能有什么问题?

function renderMenuCorection(){
                if ($('#containerHeader').exists()) {
                    var resizeObject = {

                        '0-640': '9px,2px,-3px,12px',
                        '640-800': '10px,2px,-5px,12px',
                        '800-1024': '10px,8px,-8px,15px',
                        '1024-1300': '12px,12px,-13px,11px',
                        '1300-2000': ',20px,-21px'
                    }

                    var win = $(window);
                    var win_width = win.width();

                    if (win_width > 0 && win_width <= 640) {
                        var value = getValueByKey(resizeObject, '0-640');
                        modifayMenu(value);
                    }
                    else 
                        if (win_width > 640 && win_width <= 800) {
                            var value = getValueByKey(resizeObject, '640-800');
                            modifayMenu(value);
                        }
                        else 
                            if (win_width > 800 && win_width <= 1024) {
                                var value = getValueByKey(resizeObject, '800-1024');
                                modifayMenu(value);
                                alert("I'm on: 800-1024 ," + win_width);
                            }
                            else 
                                if (win_width > 1024 && win_width <= 1300) {
                                    var value = getValueByKey(resizeObject, '1024-1300');
                                    modifayMenu(value);
                                    alert("I'm on: 1024-1300 ," + win_width);
                                }

                                else 
                                    if (win_width > 1300 ) {
                                       var value = getValueByKey(resizeObject, '1300-2000');
                                        modifayMenu(value);
                                    }
                }
            }
          function modifayMenu(value){
            var vals = value.split(',')
                $('#containerHeader').find('.roundMenuLi').each(function(index, item){
                    $(item).find('a').css('font-size', vals[0]);
                    $(item).css('padding-right', vals[1]);
                    $(item).css('padding-left', vals[1]);
                    $(item).find('#secondUl').css('margin-left', vals[2]);
                    $(item).css('padding-bottom', vals[3]);
              });

            }
          function getValueByKey(obj, myKey){

                $.each(obj, function(key, value){

                    if (key == myKey) {
                        returnValue = value;
                    }
                });
                return returnValue;
            }

谢谢!

4 个答案:

答案 0 :(得分:12)

使用CSS3及其媒体查询。例如:

@media (max-width: 500px) {
    /* some CSS for small resolution */
}

@media (min-width: 1000px) {
    /* some CSS for large resolution */
}

答案 1 :(得分:2)

你想要创建一个响应式设计,link可以帮助你。

建立必须考虑的响应式设计

  • 灵活网格
  • 灵活图片
  • Media Quires

/ *代码下面的代码扮演了响应式设计的重要组成部分而没有达到你想要的效果* /

<meta name="viewport" content="width=device-width" /> / *将此值放在head * /

的结束标记之前
@media (max-width: 320px) {

}

@media (min-width: 720px) {

}

答案 2 :(得分:1)

很难从代码中分辨出来,但很可能你只是在pageload上调用了一次这个函数。为了使它能够满足你的需要,你必须附加一个事件监听器,并在每次调整窗口大小时调用代码。

如上所述,请考虑研究响应式Web设计以利用本机浏览器功能,这样您就不必滚动自己的脚本来执行此操作。一个好的起点是同名的A List Apart文章。

答案 3 :(得分:1)

媒体查询是Pavel评论的最佳解决方案,除了它们比使用代码进行的DOM访问要快得多。 使用名为Respond.js的JavaScript插件可以解决IE8的兼容性问题。没试过,但它似乎是你的问题的一个很好的解决方案。