html - jQuery Masonry gutterWidth 和 CSS margin-right 问题

标签 html css masonry

我需要 3 列 block 布局,并使用 jQuery masonry 插件,但在更改页面不同大小的 qutterWidth 时遇到问题。

起初我尝试设置 margin-right,但在这种情况下,masonry left 定位无法正常工作。

但是当我用 gutterWidth 给出边距时,我在响应能力上遇到了问题。我不是 jQuery 专家,所以请在调整浏览器大小时帮助更改 gutterWidth,或者推荐替代解决方案:(

代码在这里

<div class="masonry">

    <div class="item">
        <p class="item__par">texttexttexttext</p> <a href="" class="">texttexttexttexttexttext</a>

        <div class="item--inner">
            <p>itemitemitemitemitemitemitemitemitem</p>
        </div>
    </div>
    <div class="item">
        <p class="item__par">texttexttexttext</p> <a href="" class="">texttexttexttexttexttext</a>

        <div class="item--inner">
            <p>itemitemitemitemitemitemitemitemitem</p>
        </div>
    </div>
        <div class="item">
        <p class="item__par">texttexttexttext</p> <a href="" class="">texttexttexttexttexttext</a>

        <div class="item--inner">
            <p>itemitemitemitemitemitemitemitemitem</p>
        </div>
    </div>
        <div class="item">
        <p class="item__par">texttexttexttext</p> <a href="" class="">texttexttexttexttexttext</a>

        <div class="item--inner">
            <p>itemitemitemitemitemitemitemitemitem</p>
        </div>
    </div>
        <div class="item">
        <p class="item__par">texttexttexttext</p> <a href="" class="">texttexttexttexttexttext</a>

        <div class="item--inner">
            <p>itemitemitemitemitemitemitemitemitem</p>
        </div>
    </div>
</div>

CSS

.item {
    width: 273px;
    border:1px solid black;
    background: lightgray;
    display:inline-block;
    vertical-align:top;
    margin-bottom:50px;
    margin-right:50px
}

jQ

 $('.masonry').masonry({

      itemSelector: '.item',
      gutter: 68
  });

fiddle http://jsfiddle.net/frontDev111/0vhegec1/1/

更新:

$(window).resize(function() {
        var $gutter = 68;

        if (window.matchMedia("(max-width: 1200px)").matches) {
            $gutter = 30;
        }
        var $container = $('.masonry');
        $container.imagesLoaded( function() {
            $container.masonry({
                itemSelector: '.item',
                gutter: $gutter
            });
        });

    });

但是由于图像加载,我得到了未定义的错误。

最佳答案

您可以使用 matchMedia 根据媒体查询设置各种间距.像这样:

var $gutter;

if (window.matchMedia("(min-width: 480px)").matches) {
    $gutter = 20;
} else if (window.matchMedia("(min-width: 768px)").matches) {
    $gutter = 40
} else { 
    // and so on
}

$('.masonry').masonry({
    itemSelector: '.item',
    gutter: $gutter
});

如果您需要类似 CSS 的工作方式,请将代码放在 $(window).resize 中:

$(window).resize(function() {
    // code
});

这将导致每次用户调整浏览器大小时触发代码。但请注意不要将非常大和复杂的脚本放在 resize 中,这会大大降低性能。

还可以考虑将您的代码包装在 functions 中然后只触发这些。

关于html - jQuery Masonry gutterWidth 和 CSS margin-right 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27081951/

相关文章:

javascript - 如何根据选择框中的选项值更改视频的 src 值

javascript - 如何在 Bootstrap 中复制 "GitHub Project Display Widget"?

html - css - 自动调整图像大小以适合屏幕(无需 Javascript)

javascript - 他们是怎么做到的?使用 Flash 还是什么?

css - Next.JS + AMP CSS

javascript - masonry 网格不需要的空间

html - 背景图片不显示

html - CSS float,除了正确的位置外到处 float

jquery - masonry 元素 margin 底部问题

jquery - masonry 重叠问题