【问题标题】:Make a div span two rows in a grid使 div 跨越网格中的两行
【发布时间】:2017-08-14 06:15:23
【问题描述】:

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

我的问题是,如果我有一个五元素行,我怎么能把一个更大的元素放在它的中间? (就像float自然放在一边)。

这是一个示例 sn-p:

#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>

这是我想从上面sn-p 中得到的东西

【问题讨论】:

    标签: css flexbox grid-layout css-grid


    【解决方案1】:

    您的子元素具有固定高度 (.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

    这里解释了为什么 flex 项目不能换行,除非容器上有固定的高度/宽度:https://stackoverflow.com/a/43897663/3597276

    【讨论】:

    • 我喜欢 flex 布局,所以我真的很喜欢这个答案!但是如果你不知道包装高度怎么办?
    【解决方案2】:

    要让您的布局与 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)
    4. 网格项目周围的排水沟。 grip-gapgrid-row-gapgrid-column-gap 的简写。(spec reference)
    5. 指示大项目从第 1 行到第 3 行。(两行网格中有三行行。)(spec reference)。
    6. 指示大项目从网格列线 2 到 3 跨越。(五列网格中有六列线。)(spec reference)

    浏览器支持 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-24
      相关资源
      最近更新 更多