【问题标题】:Replacing stylesheets with jQuery depending on screen size根据屏幕大小用 jQuery 替换样式表
【发布时间】:2012-12-20 17:49:49
【问题描述】:

嗨,我想知道是否有人可以提供帮助,我正在尝试使用 jQuery 创建一个响应式站点(必须这样做,因为目标受众在 IE7/8 上,并且 css3-mediaqueries.js 似乎会干扰 jQuery UI我也在使用)。我正在使用以下脚本来检测宽度和高度并相应地应用样式,它适用于宽度但不适用于高度,它加载 SMstyle.css 然后用 样式覆盖。 CSS。我正在尝试学习 JavaScript,但目前还不是很强大,我知道有更简单的方法!任何帮助将不胜感激...

function adjustStyle(width) {
        width = parseInt(width);
        if ((width >= 701) && (width < 1200
        )) {
            $("#size-stylesheet").attr("href", "css/SMstyle.css");
        } else {
            $("#size-stylesheet").attr("href", "css/style.css");
        }
    }

    $(function() {
        adjustStyle($(this).width());
        $(window).resize(function() {
            adjustStyle($(this).width());
        });
    });

    function adjustStyle(height) {
        height = parseInt(height);
        if (height < 800
        ) {
            $("#size-stylesheet").attr("href", "css/SMstyle.css");
        } else {
            $("#size-stylesheet").attr("href", "css/style.css");
        }
    }

    $(function() {
        adjustStyle($(this).height());
        $(window).resize(function() {
            adjustStyle($(this).height());
        });

    });

【问题讨论】:

  • 你是用 PX 还是百分比来指定高度?如果没有明确定义每个父元素,高度将无法以百分比表示。您可能需要在 PX 中动态设置高度,而不是调用样式表……如果我的预感是正确的。
  • 谢谢,Ben,我用像素来称呼它

标签: javascript jquery screen-size


【解决方案1】:

在处理响应式布局时,您并不真正关心高度。整个概念是,如果内容不能适应宽度,它就会折叠(从而增加高度)。

编辑:

我认为您需要使用 $(document) 而不是 $(this),因为 $(this) 的范围在您手动触发和由 resize 事件触发时会有所不同。

function adjustStyle() {
    var width = $(document).width();
    var height = $(document).height();
    if (((width >= 701) && (width < 1200)) || (height < 800)) {
        $("#size-stylesheet").attr("href", "css/SMstyle.css");
    } else {
        $("#size-stylesheet").attr("href", "css/style.css");
    }
}

adjustStyle();
$(window).resize(function() {
    adjustStyle();
});

要查看不同的范围,请尝试以下操作:

$(function() {
    console.log('Scope', $(this)); // Scope is DOM-element
    $(window).resize(function() {
        console.log('Scope', $(this)); // Scope is Window object.
    });
});

【讨论】:

  • 取决于你问谁。有些人会争辩说,垂直响应也很重要。 css-tricks.com/responsive-web-above-the-fold
  • 在这种情况下,高度很重要,因为我使用了 localScroll 的视差效果并关闭了物理滚动。该网站的一些用户的笔记本电脑屏幕尺寸为 1366x768,因此高度成为一个重要因素
  • 非常感谢安提拉!效果很好,你阻止了我扯头发!
【解决方案2】:

重构(未经测试)

function adjustStyle(width, height) {
    width = parseInt(width);
    height = parseInt(height);
        if (((width >= 701) && (width < 1200)) || (height < 800))
            $("#size-stylesheet").attr("href", "css/SMstyle.css");
        else
            $("#size-stylesheet").attr("href", "css/style.css");
}

$(function() {
    adjustStyle($(this).width(), $(this).height());
    $(window).resize(function() {
        adjustStyle($(this).width(), $(this).height());
    });
});

【讨论】:

  • 不,看起来它为高度加载了正确的 SMstyle.css 但随后反弹回 style.css 并且只返回SMstyle.css 调整窗口大小...
  • 在那种情况下应该有一些其他的脚本这样做,我也想看看你的 HTML
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
相关资源
最近更新 更多