【问题标题】:Grid layout with expanded item and items around it带有扩展项目及其周围项目的网格布局
【发布时间】:2018-07-24 09:55:36
【问题描述】:

尝试创建如下所示的布局:

每个项目都是一个正方形(通过填充底部技术创建)。项目不应重叠。

我在使用绿色元素时遇到问题,无论我应用什么 grid-area 道具 - 它都会在左侧创建空白空间。

我在 JSFiddle 上做了一个演示——http://jsfiddle.net/f2to1kyw/

没有 JS 甚至可以创建这样的布局吗?

.container {
  position: relative;
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(5, 1fr);
}

.item {
  background: tomato;
  width: 100%;
}

.item:before {
  content: '';
  padding-bottom: 100%;
  display: block;
}

.item--big {
  grid-area: 1 / 1 / 3 / 3;
}

.item--green {
  background: #36926A
}
<div class="container">
  <div class="item item--big"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item item--green"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

【问题讨论】:

    标签: javascript css css-grid


    【解决方案1】:

    没有 JS 甚至可以创建这样的布局吗?

    是的。使用 CSS Grid 有多种方法可以做到这一点。

    使用grid-area 属性:

    来自MDN

    grid-area CSS 属性是grid-row-start 的简写属性, grid-column-startgrid-row-endgrid-column-end

    因此,绿色框的grid-area 属性值将是:2 / 4 / 4 / 6

    简写为:

    grid-row-start: 2;
    grid-column-start: 4;
    grid-row-end: 4;
    grid-column-end: 6;
    

    所以 CSS 规则是:

    .item--green {
      grid-area: 2 / 4 / 4 / 6;
    }
    

    .container {
      position: relative;
      display: grid;
      grid-gap: 10px;
      grid-template-columns: repeat(5, 1fr);
    }
    
    .item {
      background: tomato;
      width: 100%;
    }
    
    .item:before {
      content: '';
      padding-bottom: 100%;
      display: block;
    }
    
    .item--big {
      grid-area: 1 / 1 / 3 / 3;
    }
    
    .item--green {
      background: #36926A;
      grid-area: 2 / 4 / 4 / 6;
    }
    <div class="container">
      <div class="item item--big"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item item--green"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
    </div>

    使用grid-column / grid-row 属性

    .container {
      position: relative;
      display: grid;
      grid-gap: 10px;
      grid-template-columns: repeat(5, 1fr);
    }
    
    .item {
      background: tomato;
      width: 100%;
    }
    
    .item:before {
      content: '';
      padding-bottom: 100%;
      display: block;
    }
    
    .item--big {
      grid-column: 1 / span 2;
      grid-row: 1 / span 2;
    }
    
    .item--green {
      background: #36926A;
      grid-column: 4 / span 2;
      grid-row: 2 / span 2;
    }
    <div class="container">
    
      <div class="item item--big"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item item--green"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
    </div>

    相关代码:

    .item--green {
      grid-column: 4 / span 2; /* start at column 4 and span 2 columns  */
      grid-row: 2 / span 2;  /* start at row 2 and span 2 rows */
    }
    

    【讨论】:

    • 啊,谢谢,我看错了方向。如果您使用“auto”而不是 4 和 2,您似乎也可以这样做,对吧? “自动/自动/跨度 2/跨度 2”
    • @Marvin3 - 就像我说的,有很多可能的方法可以做到这一点,做任何对你最有意义的事情:)(我个人更喜欢按顺序使用 grid-row 和 grid-column 属性不要将行与列混淆)
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2021-12-10
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多