使div跨越网格中的两行

问题描述 投票:-1回答:1

我的页面充满了display: inline-block。我想做四到两倍大,所以我用float: leftright放置了其他块。

我的问题是,如果我有一个五元素行,我该如何放置一个更大的元素中间? (因为float自然放在侧面)。

这是示例片段:

#wrapper{
  width: 516px;
}
.block{
  display: inline-block;
  width: 90px;
  height: 50px;
  margin: 5px;
  background-color: red;
}
.bigger{
  height: 110px;
}
<div id="wrapper">
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block bigger"></div>
  <div class="block"></div>
  <div class="block"></div>
</div>

[这是我想从Expected上方的摘录中得到的内容

css flexbox squarespace
1个回答
13
投票

您在子元素上具有固定的高度(.block)。根据该信息,我们可以推断容器的高度(#wrapper)。

通过知道容器的高度,可以将CSS Flexboxflex-direction: columnflex-wrap: wrap一起使用来实现布局。

容器上的固定高度用作断点,告诉伸缩物品在哪里包装。

#wrapper {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  height: 120px;
  width: 516px;
}
.block {
  width: 90px;
  flex: 0 0 50px;
  margin: 5px;
  background-color: red;
}
.bigger {
  flex-basis: 110px;
}
<div id="wrapper">
  <div class="block"></div>
  <div class="block"></div>
  <div class="block bigger"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
</div>

jsFiddle

这里有个解释,为什么除非容器上有固定的高度/宽度,否则柔性物品不能包装:https://stackoverflow.com/a/43897663/3597276


7
投票

要使布局与flexbox配合使用,您需要使用嵌套容器知道容器的高度see my other answer on this page)。网格并非如此。代码结构非常简单。

#wrapper {
  display: grid;                                     /* 1 */
  grid-template-columns: repeat(5, 90px);            /* 2 */
  grid-auto-rows: 50px;                              /* 3 */
  grid-gap: 10px;                                    /* 4 */
  width: 516px;
}
.bigger {
  grid-row: 1 / 3;                                   /* 5 */
  grid-column: 2 / 3;                                /* 6 */
}
.block {
  background-color: red;
}
<div id="wrapper">
  <div class="block"></div>
  <div class="block bigger"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
</div>

jsFiddle

注意:

  1. 建立一个块级网格容器。 (spec reference
  2. 指示网格创建90px宽度的列,并重复该过程5次。 (spec reference
  3. 将隐式地创建网格行](即,根据需要自动创建)。每个隐式行的高度应为50px。 (spec reference围绕网格项目的装订线。 grip-gapgrid-row-gapgrid-column-gap的简写。(spec reference
  4. 指示大项目跨越行1至3。(两行网格中有三行。(spec reference)。
  5. 指示大项目跨越网格第2列到第3列。(五列网格中有6列。(spec reference

  6. CSS网格浏览器支持

    Chrome-自2017年3月8日起提供全面支持(版本57)
  • Firefox-自2017年3月6日起提供全面支持(版本52)
  • Safari-自2017年3月26日起提供全面支持(版本10.1)
  • Edge-截至2017年10月16日(版本16)已获得全面支持
  • IE11-不支持当前规范;支持过时的版本
  • 以下是完整图片:http://caniuse.com/#search=grid
© www.soinside.com 2019 - 2024. All rights reserved.