【问题标题】:Center columns inside Grid Layout [duplicate]网格布局内的中心列[重复]
【发布时间】:2019-08-07 13:00:22
【问题描述】:

我已经开始学习网格系统(display:grid)并且我有以下代码,但我不知道如何在不在 grid-template-columns 中添加更多列的情况下将最后两列(4 和 5)居中并在列中使用 grid-column-start 和 grid-column-end 。可以吗?:

HTML:

<div class="grid-container">
  <div class="grid-item">
      1
    </div>
    <div class="grid-item">
        2
    </div>
    <div class="grid-item">
        3
    </div>
    <div class="grid-item">
        4
    </div>
    <div class="grid-item">
        5
    </div>
</div>

CSS:

body {
    margin: 0;
}

.grid-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-gap: 20px;
}

.grid-item {
    padding: 10px;
    background: skyblue;
}

JSFiddle:https://jsfiddle.net/3b5Lxujh/

我有什么:

我想要什么:

【问题讨论】:

    标签: html css flexbox css-grid


    【解决方案1】:

    如果您使用 CSS 网格,则应该添加列 - 为此使用 6 列网格,使用 grid-template-columns: repeat(6, 1fr) 每个项目跨越两个网格列 - 和 放置 使用grid-column 规则将最后一行移到中心 - 请参见下面的演示:

    body {
      margin: 0;
    }
    
    .grid-container {
      display: grid;
      grid-template-columns: repeat(6, 1fr);
      grid-gap: 20px;
    }
    
    .grid-item {
      padding: 10px;
      background: skyblue;
      grid-column: span 2;
    }
    
    .grid-item:nth-last-child(2) {
      grid-column: 2 / 4;
    }
    
    .grid-item:last-child {
      grid-column: 4 / 6;
    }
    <div class="grid-container">
      <div class="grid-item">1</div>
      <div class="grid-item">2</div>
      <div class="grid-item">3</div>
      <div class="grid-item">4</div>
      <div class="grid-item">5</div>
    </div>

    弹性盒解决方案

    对于这种布局 flexbox 更适合 - 通常我会使用使用 flex-basis 的 flexbox(使用 calc 创建 网格间隙)像这样:

    body {
      margin: 0;
    }
    
    .grid-container {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
    }
    
    .grid-item {
      padding: 10px;
      background: skyblue;
      margin: 10px;
      flex-basis: calc(33.33% - 40px);
    }
    <div class="grid-container">
      <div class="grid-item">1</div>
      <div class="grid-item">2</div>
      <div class="grid-item">3</div>
      <div class="grid-item">4</div>
      <div class="grid-item">5</div>
    </div>

    【讨论】:

    • 当您发布此内容时,我正在编写完全相同的代码以获得答案。应该删除grid-column 行还是为了什么?
    • 唯一我不知道哪个不是大问题的是如何从每行的外部 div 中删除外部边距。以这种方式用边距创建间隙时可能是不可能的。
    • 一个 hack 是让margin: 0 -20px 删除外边距,然后处理grid-container 的父级上的溢出...
    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多