如何实现不同高度的新包装?

时间:2018-04-26 11:00:57

标签: html css flexbox inline

我有一个有趣的块位置案例。请给我一些如何实施的建议。

对于此HTML

<div class="container">
  <div class="item grey">1</div>
  <div class="item purple" style="height: 150px;">2</div>
  <div class="item blue">3</div>
  <div class="item blue">4</div>
  <div class="item blue">5</div>
  <div class="item blue">6</div>
  <div class="item blue">7</div>
  <div class="item blue">8</div>
  <div class="item purple">9</div>
  <div class="item purple"></div>
</div>

我想得到这个结果:

expected result

我已经尝试了内联块jsfiddle-code并得到了这个:

inline-block-result-image

和flex jsfiddle-code - 得到了这个:

flex-result-image

1 个答案:

答案 0 :(得分:0)

如何使用CSS Grid解决方案?我是CSS Grid的新手,所以我不是百分之百确定没有更好的方法来做到这一点。

CSS Grid非常棒,因为它允许您在项目中创建自定义网格容器,并使您可以更好地控制网格中行和列的大小和对齐方式。在此示例中,使用grid-template-columnsgrid-template-rows可以确定网格线的垂直和水平放置位置。您可以进一步自定义每个grid-item的属性,在您的情况下,该属性是针对第二个div(.item:nth-child(2))完成的,该div需要两倍于所有其他网格项的高度。

查看this linkthis link了解详情。

另外,作为旁注,您可以将Flexbox和CSS Grid结合使用,以便更灵活地进行布局。

.container {
  display: grid;
  grid-template-columns: 75px 75px 75px 75px;
  grid-template-rows: 75px 75px 75px;
}
 
.item {
  border: 1px solid black;
}

.item:nth-child(2) {
  -ms-grid-row: 1 / 3 ;
  grid-row: 1 / 3;
  -ms-grid-column: 2 / 3;
  grid-column: 2 / 3;
}
<div class="container">
  <div class="item grey">1</div>
  <div class="item purple">2</div>
  <div class="item blue">3</div>
  <div class="item blue">4</div>
  <div class="item blue">5</div>
  <div class="item blue">6</div>
  <div class="item blue">7</div>
  <div class="item blue">8</div>
  <div class="item purple">9</div>
</div>