【问题标题】:jQuery Masonry Plugin and Dynamic StylesheetsjQuery Masonry 插件和动态样式表
【发布时间】:2012-07-19 09:53:02
【问题描述】:

我的页面布局需要根据浏览器大小从 3 列布局减少到 2 列布局。我还使用jQuery masonry plugin 来保持页面上的容器网格排列得很好。这一切都适用于窗口调整大小。

我遇到的问题是,如果我以小于 1100 像素的尺寸加载页面,它会使用 jQuery 正确调用“col2.css”样式表,但砌体插件认为它仍然是 3 列布局,直到您手动调整大小浏览器,因此网格仍处于 col3 宽度并超出容器的大小。

我猜我需要在 jQuery 选择样式表后以某种方式调用 masonry 函数,但我不知道该怎么做。

我有这个想法

<link href="<?=base_url()?>inc/css/col3.css" id="size-stylesheet" rel="stylesheet" type="text/css"  />

和下面的javascript

    $(document).ready(function() {

        function adjustStyle(width) {
            width = parseInt(width);
            if (width < 1100) {
                $("#size-stylesheet").attr("href", "inc/css/col2.css");
            } else {
                $("#size-stylesheet").attr("href", "inc/css/col3.css"); 
            }
        }

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

        //masonry       
        $(function(){
          $('#masonry').masonry({
            itemSelector : '.project',
            columnWidth : 365,
            isAnimated: true
          });
        });

    });

任何帮助将不胜感激!

【问题讨论】:

    标签: jquery jquery-plugins jquery-masonry


    【解决方案1】:

    首先,根据描述。我认为您最好寻求响应式设计方法,这是一篇好文章:http://www.alistapart.com/articles/responsive-web-design/。这可以解决您的问题,无需手动切换 Css。

    其次,一个可能的问题是,在加载 col3.css 时,在切换到 col2.css 之前应用了砌体。因此,您必须尽早加载 col2.css,这可以通过将相关代码移出 document.ready 函数来完成。

    function adjustStyle(width) {
            width = parseInt(width);
            if (width < 1100) {
                $("#size-stylesheet").attr("href", "inc/css/col2.css");
            } else {
                $("#size-stylesheet").attr("href", "inc/css/col3.css"); 
            }
        }
    //this runs when the page starts
    $(function() {
        adjustStyle($(this).width());
        $(window).resize(function() {
            adjustStyle($(this).width());
        });
    });
    //this runs when DOM is ready
    $(document).ready(function() {
        //masonry       
          $('#masonry').masonry({
            itemSelector : '.project',
            columnWidth : 365,
            isAnimated: true
          });
    });
    

    第三,如果这不能解决问题,您可以随时重新加载砌体以重新排列元素:

    $('#masonry').masonry('reload');
    

    【讨论】:

    • 永远不要覆盖链接上的 href 属性。相反,通过 id 禁用和启用它们。它们支持iddisabled="disabled" 属性。
    • @grigore,非常新鲜的想法,你能告诉我为什么或指的是什么吗?非常感谢。
    • 除了您正在积极地删除样式、重新查询服务器和加载新样式表之外,您还正在破坏和重建文档与其外部资源之间的联系。这通常应该使用纯 CSS 解决方案来完成,或者充其量是重新应用类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多