【问题标题】:Jquery-Masonry almost always empty spacesJquery-Masonry 几乎总是空白
【发布时间】:2014-08-27 04:32:51
【问题描述】:

我一直在尝试 Masonry,但无法让它完全按照我的意愿工作。我使用的元素的宽度和高度各不相同,但都适合一个网格(4 种不同的大小,所有最小+边距的倍数)。我还计算了可以精确拟合的元素分布(最小的 7 个,所有其他元素的 4 个)。

但是,很少有砌体能够整齐地安装它们,有时会在底部潜伏一个,有时会放错几个。总是这样,在一个视图中我可以看到需要移动哪些项目以使其适合。

有没有办法让砖石在移动元素时更具侵略性?还是重复两次以确保没有空格?

【问题讨论】:

标签: jquery-masonry


【解决方案1】:

你可能应该看看砌体的“老大哥”同位素here。请注意,如果您的元素按特定顺序排序或以特定顺序固定 - 并且比单个列宽更宽 - 它们可以在较窄的浏览器宽度下“阻塞”一列。

编辑也许this fiddle 解释得更好一些。如果您查看那个并且 - 在观察 div 中的数字时 - 您会看到下一个砌体元素(红色元素 5)不可能适合白色方块,因为它必须在元素 4 之后;所以它必须结束的地方意味着,只有三排适合,一个会有一个白色的间隙。也许您可以使用 Isotope 的 shuffle 和/或 reLayout 方法并牺牲以严格的顺序排列您的元素?最好是解决您的问题。

<article>
  <div class="tile blue"><p>1</p></div>
  <div class="tile black"><p>2</p></div>
  <div class="tile tall yellow"><p>3</p></div>
  <div class="tile grey"><p>4</p></div>
  <div class="tile wide red"><p>5</p></div>
  <div class="tile green"><p>6</p></div>
  <div class="tile grey"><p>7</p></div>
  <div class="tile blue"><p>8</p></div>
  <div class="tile green"><p>9</p></div>
</article>

$('article').isotope({
    itemSelector : '.tile',
    masonry: {
        columnWidth: 100
    }
});

article .tile {
    display: block;
    float: left;
    box-sizing: border-box;

    width: 100px;
    height: 100px;

    font-size: 3em;
    font-weight: 700;

    padding: 0 6px;
    color: #fff;
    text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;

    border:1px dotted black;
}

article .tile.wide {
    width: 200px;
}

article .tile.tall {
    height: 200px;
}

.tile.yellow { background: yellow; }
.tile.red { background: red; }
.tile.blue { background: blue; }
.tile.black { background: black; }
.tile.grey { background: grey; }
.tile.green { background: green; }

【讨论】:

  • 我认为 Isotope 会使用相同的逻辑,只是为 Masonry 添加了更多功能?但是,我现在已经尝试过了,发现它可能有所不同,但是不幸的是,Isotop 的结果更糟,还有更多的差距。关于浏览器宽度:我知道,我专门使用足够大的浏览器屏幕进行测试,以使我的容器达到预期大小。
  • 这正好适合codecanyon.net/item/jquery-tiles-gallery/2281417,所以也许您的概念可以调整到该原则。
  • 你的小提琴,我现在试图在小提琴中重新创建我的小提琴,清楚地表明了问题所在。尽管我的所有元素都很好,但它们不符合它们所处的顺序。Masonry 做了一些改组,但不足以使其始终正常工作。 Isotope 似乎没有进行改组以使事情变得更好,有 shuffle 选项(它确实 sortBy:'random')但是这确实是随机的,而不是一定更适合的顺序。这是我的Fiddle,只是我网站上的一个副本。如果我手动进行一些洗牌,砌体可以使它适合。
  • 确实,由于“宽度列阻塞问题”,Isotope 的 shuffle 方法可能会意外地导致贴合,就像您在插件主页上尝试“切换可变大小”时一样。据我所知,没有任何逻辑可以始终与同位素中的可变元素完美匹配。
  • 我还添加了一个与问题无关的小提琴。jsfiddle.net/danwhitmarsh/zgjBy 移动 javascript 窗格,看看元素如何移动到正确的位置
【解决方案2】:

为了扩展 Dan 的回答,我自己也遇到了这个问题,似乎 Packery 是最新的; much more maintained Masonry 版本 - 来自同一作者。我不清楚为什么这两个项目作为单独的实体存在,而后者只修复了错别字。

好消息是 - 它几乎完全可以替代。我必须做的唯一更改(除了名称masonry->packery 使用的地方)是删除一个选项,因为它是默认且唯一的选项在Packery中。

那是isFitWidth: true,我微弱的尝试让 Masonry 打包的东西接近于 Packery 在没有任何选择的情况下的表现。

Packery 的另一个不错的变化是gutter: x 适用于垂直和水平排水沟。在 Masonry 中,这只是水平的 - 虽然在 CSS 中使用 margin-bottom 是微不足道的,但感觉就像一个不必要的 hack。

【讨论】:

  • Packery 无疑比砌体更好。但 Packery 不能免费用于商业用途。
猜你喜欢
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多