【问题标题】:CSS grid with columns of unequal height and width具有不等高和不等宽列的 CSS 网格
【发布时间】:2018-06-05 12:42:19
【问题描述】:

我有 5 个盒子:第一行三个,第二行接下来两个:

我希望所有的框第二个的高度相同并且第 5th 框在 3

我用 flexbox 试过这个,现在我用display: grid 试试。如果可能,我正在寻找 CSS only 解决方案。

.grid-container {
  display: grid;
  grid-template-columns: auto auto auto;
  grid-auto-rows: min-content;
  grid-gap: 0;
  background-color: #2196F3;
}
.grid-container > div {
  background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  border: 1px solid #ccc;
  font-size: 30px;
}
.item4 {
  grid-column-start: 1;
  grid-column-end: 3;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="grid-container">
  <div class="item1"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
  <div class="item2"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Totam sunt blanditiis facere eius placeat suscipit consequuntur ullam dolor quod tenetur. Nostrum deleniti id temporibus officia, itaque voluptatibus laudantium ad porro.</p></div>
  <div class="item3"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>  
  <div class="item4"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
  <div class="item5"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
</div>

下图很好地说明了我正在寻找的内容:

我应该怎么做才能达到预期的效果?

【问题讨论】:

  • 这应该是什么样子的......听起来根本不像一个网格
  • 无法真正放置您要执行的操作。是你想要的 like this 吗?
  • @Paulie_D 它不是网格。我试图在最后一个元素上实现类似THIS没有负边距。我不在乎它是否是网格。
  • 如果它不是网格,那么 css-grid 显然 不适用。除非您可以更改结构,否则您的 other quesion 的链接副本适用。

标签: css css-grid


【解决方案1】:

这是使用line-based placement 的一种方法。

.grid-container {
  display: grid;
  grid-template-columns: auto auto auto;
  grid-template-rows: repeat(10, 1fr);
  grid-gap: 5px;
  padding: 5px;
  height: 100vh;
  background-color: #2196F3;
}

/* line-based placement */
.item1 { grid-column: 1 / 2; grid-row: 1 / 4; }
.item2 { grid-column: 2 / 3; grid-row: 1 / 8; }
.item3 { grid-column: 3 / 4; grid-row: 1 / 4; }
.item4 { grid-column: 1 / 3; grid-row: 8 / 11; }
.item5 { grid-column: 3 / 4; grid-row: 4 / 11; }

.grid-container > div {
  background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  border: 1px solid #ccc;
}
* { box-sizing: border-box; margin: 0; }
<div class="grid-container">
  <div class="item1"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
  <div class="item2"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Totam sunt blanditiis facere eius placeat suscipit consequuntur ullam dolor quod tenetur. Nostrum deleniti id temporibus officia, itaque voluptatibus laudantium ad porro.</p></div>
  <div class="item3"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>  
  <div class="item4"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
  <div class="item5"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
</div>

这是使用grid-template-areas 的另一种方法。

.grid-container {
  display: grid;
  grid-template-columns: auto auto auto;
  grid-template-rows: repeat(10, 1fr);
  grid-gap: 5px;
  padding: 5px;
  height: 100vh;
  background-color: #2196F3;
  
  grid-template-areas:
  
    " item1 item2 item3 "
    " item1 item2 item3 "
    " item1 item2 item3 "
    "   .   item2 item5 "
    "   .   item2 item5 "
    "   .   item2 item5 "
    "   .   item2 item5 "
    " item4 item4 item5 "
    " item4 item4 item5 "
    " item4 item4 item5 ";
}

.item1 { grid-area: item1; }
.item2 { grid-area: item2; }
.item3 { grid-area: item3; }
.item4 { grid-area: item4; }
.item5 { grid-area: item5; }

.grid-container > div {
  background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  border: 1px solid #ccc;
}
* { box-sizing: border-box; margin: 0; }
<div class="grid-container">
  <div class="item1"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
  <div class="item2"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Totam sunt blanditiis facere eius placeat suscipit consequuntur ullam dolor quod tenetur. Nostrum deleniti id temporibus officia, itaque voluptatibus laudantium ad porro.</p></div>
  <div class="item3"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>  
  <div class="item4"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
  <div class="item5"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
</div>

【讨论】:

    【解决方案2】:

    对父容器使用 grid-template-areas 并为子项指定 grid-area。

    .grid-container {
      display: grid;
      grid-template-areas: 'left middle right';
      grid-template-columns: 1fr 1fr 1fr;
      grid-auto-flow: row;
      grid-gap: 0;
      background-color: #2196F3;
    }
    .grid-container > div {
      background-color: rgba(255, 255, 255, 0.8);
      text-align: center;
      border: 1px solid #ccc;
      font-size: 30px;
    }
    .item1 {
      grid-area: left;
      grid-row: auto;
    }
    .item2 {
      grid-area: middle;
      grid-row: auto / span 2;
    };
    .item3 {
      grid-area: right;
      grid-row: auto;
    };
    .item4 {
      grid-area: left;
      grid-row: auto;
    };
    .item5 {
      grid-area: right;
      grid-row: auto;
    }
    <div class="grid-container">
          <div class="item1"><p><strong>Item1</strong> Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
          <div class="item2"><p><strong>Item2</strong>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Totam sunt blanditiis facere eius placeat suscipit consequuntur ullam dolor quod tenetur. Nostrum deleniti id temporibus officia, itaque voluptatibus laudantium ad porro.</p></div>
          <div class="item3"><p><strong>Item3</strong> Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>  
          <div class="item4"><p><strong>Item4</strong> Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
          <div class="item5"><p><strong>Item5</strong> Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p></div>
    </div>

    【讨论】:

    • 好东西,但我试图获得的布局看起来不同。我添加了一个插图。
    猜你喜欢
    • 2019-01-19
    • 2018-02-23
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    相关资源
    最近更新 更多