【问题标题】:Packery / Masonry not honoring stamp items when grid is rotated旋转网格时包装/砌体不尊重邮票项目
【发布时间】:2016-12-15 03:14:59
【问题描述】:

使用 Packery 时,如果我将网格旋转 45 度,标记的项目不再影响布局。为什么会这样?

通常,Packery 会围绕标记元素布局项目。我的项目正在使用 Packery,但在调查时我发现同样的问题也出现在砌体中。

我正在使用 css 旋转网格:

.grid {
  transform:rotate(-45deg);
}

您可以在this codepen 上查看该问题的示例。 正如文档所解释的,Packery 应该在标记元素周围布置 item 元素(解释为 herehere)。

任何解决方法的想法也会有所帮助。

(赏金说 90 度。应该说 45 度(正或负))。

【问题讨论】:

  • 你的链接失效了
  • 链接打开了 4 个我
  • 我不清楚你想做什么?我看到网格中的所有元素都旋转了
  • @MZaragoza 网格已旋转,但如果网格旋转,标记项将不起作用。元素不应与标记项重叠。

标签: jquery css jquery-masonry masonry packery


【解决方案1】:

在 CSS 中定义旋转时,初始化期间对 .layout() 的隐式调用似乎会错误地渲染旋转的标记对象。

这是一个解决方法:

  1. .grid 中删除轮换 CSS 规则
  2. 在网格初始化后添加如下代码:

    $('.grid').css({
      '-webkit-transform': 'rotate(-45deg)',
      'transform': 'rotate(-45deg)'
    });
    

Updated CodePen

// external js: packery.pkgd.js

$('.grid').packery({
  itemSelector: '.grid-item',
  stamp: '.stamp'
});

$('.grid').css({
  '-webkit-transform': 'rotate(-45deg)',
  'transform': 'rotate(-45deg)'
});
* { box-sizing: border-box; }

body { font-family: sans-serif; }

/*--- grid ---*/

.grid {
  background: #DDD;
  max-width: 1200px;
  position: relative;
}

/* clear fix */
.grid:after {
  content: '';
  display: block;
  clear: both;
}

/* ---- .grid-item ---- */

.grid-item {
  float: left;
  width: 100px;
  height: 100px;
  background: #C09;
  border: 2px solid hsla(0, 0%, 0%, 0.5);
}

.grid-item--width2 { width: 200px; }
.grid-item--height2 { height: 200px; }

.stamp {
  position: absolute;
  width: 30%;
  height: 120px;
  background: #C90;
  border: 4px dotted hsla(0, 0%, 0%, 0.5);
}

.stamp1 {
  left: 20%;
  top: 0px;
}

.stamp2 {
  right: 10%;
  top: 110px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://mfzy.co/packery.pkgd.js"></script>

<h3>Packery - stamp option with rotated grid</h3>

<div class="grid">
  <div class="stamp stamp1"></div>
  <div class="stamp stamp2"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  <div class="grid-item"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2 grid-item--height2"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  <div class="grid-item"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2 grid-item--height2"></div>
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  <div class="grid-item"></div>
</div>

编辑 - 解决方法 #2

要处理响应性,您可以将 JavaScript 更改为以下内容:

// external js: packery.pkgd.js

var $grid = $('.grid').packery({
  itemSelector: '.grid-item',
  stamp: '.stamp'
});

function updateCSS(deg) {
  $('.grid').css({
    '-webkit-transform': 'rotate(' + deg + 'deg)',
    'transform': 'rotate(' + deg + 'deg)'
  });
}

updateCSS(-45);

$(window).resize(function() {
  updateCSS(0);
  $grid.packery('destroy');
  $grid = $('.grid').packery({
    itemSelector: '.grid-item',
    stamp: '.stamp'
  });
  updateCSS(-45);
});

Updated CodePen #2

看起来在初始化后对$grid.packery('layout') 的任何调用都会导致网格旋转时出现问题。当窗口调整大小时,Packery 似乎也会调用layout。因此,需要销毁并重新创建 Packery 实例,以便旋转网格在窗口调整大小时正确显示(基本上,覆盖 Packery 的响应功能)。

显然,这也不是最理想的解决方案 - 只是另一种解决方法。

您可能希望在他们的 GitHub 页面上打开问题报告以获得进一步帮助:https://github.com/metafizzy/packery/issues

【讨论】:

  • 这不是一个理想的解决方案,因为它没有响应性,并且在初始化后阻止了 .layout() 的任何使用,并阻止了许多其他方法的使用,例如 .appended() 和 .layoutItems( )。 Packery 的行为仍然不如预期。不过我很欣赏这个建议。
  • 更新了另一种解决方法 - 可能仍然不够好,但是...i.imgur.com/zguuYvm.png
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多