【问题标题】:Masonry - Divs don't align砌体 - Divs 不对齐
【发布时间】:2018-11-10 18:22:37
【问题描述】:

我正在尝试为我网站上的产品页面创建砌体布局。有一个带有width: 50%; 的方形图像,然后应该有4 个带有width: 25% 的方形图像,它们相互堆叠。

这是我到目前为止所取得的成就: https://prism-ferret-k6wy.squarespace.com/shop/

正如您将看到的,下面有两张图片可以放入可用的空白空间中。

Codepen:https://codepen.io/dwinnbrown/pen/aQmOVR

这是我的 Javascript:

$('.ProductList-grid').masonry({
            itemSelector: '.ProductList-item',
            percentPosition: true
          });

还有我的 CSS:

.ProductList .ProductList-item:nth-child(5n-4) {
        width: 50% !important;
    }


.ProductList .ProductList-item {
        float: none !important;
        margin: 0 !important;
        width: 25% !important;
    }

它应该是这样的:

【问题讨论】:

  • 您介意用模拟图像为我们创建一个小提琴,以便我们更轻松地复制它吗?
  • @Marco 我刚刚在上面添加了一张图片,但可以尝试创建一个小提琴
  • 网站看起来不错。只是想知道你在使用引导程序吗?为我们提供一个小提琴链接。

标签: jquery css masonry


【解决方案1】:

使用 grid-sizer 来确定 columnWidth 也可以: https://codepen.io/anon/pen/pQEJXV

<div class="container">
  <!-- width of .grid-sizer used for columnWidth -->
  <div class="grid-sizer"></div>
  <div class="grid-item grid-item--width2 grid-item--height2">1
  </div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>  
  <div class="grid-item">5</div>
</div>

CSS

* { box-sizing: border-box; }
.container {
  max-width: 1200px;
  margin: auto;
}

.grid-item:first-of-type {
  background-color: pink !important;
}

.grid-sizer,
.grid-item {
  width: 25%;
}

.grid-item {
  height: 150px;
  float: left;
}

.grid-item--width2 {
  width:50%;
}

.grid-item--height2{
  height:300px;
}

.grid-item:nth-child(odd) {
  background-color: green;
}
.grid-item:nth-child(even) {
  background-color: orange;
}

JS

$(document).ready(function() {
  $('.container').masonry({
    itemSelector: '.grid-item',
    columnWidth: '.grid-sizer',
    percentPosition: true
  });
});

响应式布局的文档:https://masonry.desandro.com/layout.html#responsive-layouts

【讨论】:

  • Divs 3 和 5 现在放置在顶部的主行下方。我附上的屏幕截图显示了我想要让它看起来像什么。
【解决方案2】:

HTML

<div class="container">
          <div class="grid-item">1</div>
          <div class="small-size">
                 <div class="grid-item">2</div>
                 <div class="grid-item">3</div>
                 <div class="grid-item">4</div>
                 <div class="grid-item">5</div>
          </div>
   </div>

CSS

.container {
  max-width: 1200px;
  margin: 0 auto;
}

.grid-item:first-of-type {
  background-color: pink !important;
  width: calc(50% - 10px);
  height: 300px;
}

.grid-item:nth-child(odd) {
  background-color: green;
}
.grid-item:nth-child(even) {
  background-color: red;
}

.small-size {
 display: flex;
 flex-wrap: wrap;
 width: 50%;
}

.small-size .grid-item {
  width: 50%;
  height: 150px;
}

JS

$(document).ready(function() {
  $('.container').masonry({
    percentPosition: true,
    gutter: 10
  });
});

【讨论】:

  • 它有效。实际上,在您的 codepen 链接中,我发现您正在使用 itemSelector: '.grid-item'。我删除了它,因为这并没有使 div 按要求工作。也许,砌体是你的要求。不过,我会说这可能会很好。
  • itemSelector: '.ProductList-item', 已从 JS 中删除,这会阻止砌体工作。
  • 那么,删除这一行是否可以解决问题,而不修改 html/css?
  • 不,删除该行并不能单独解决问题
猜你喜欢
  • 1970-01-01
  • 2013-04-19
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多