html - CSS 网格 - 2x2 网格总是尽可能占据整个宽度

标签 html css css-grid

我正在尝试创建一个 2x2 CSS 网格(将来可能会扩展到 3x2),当网格中有三个 child 时,它只会将元素推到第一行,我不确定这是否可行网格。

基于元素数量的场景是:

2 项(最少)

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
</div>

2 Player Grid

3 项

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
  <div class="player">Player 3</div>
</div>

3 Player Grid

4 项

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
  <div class="player">Player 3</div>
  <div class="player">Player 4</div>
</div>

4 Player Grid

到目前为止,我尝试过的是以下内容:

.grid {
  height: 100%;
  display: grid;
  grid-template-columns: repeat(2, minmax(150px, 2fr));
  grid-template-rows: repeat(2, minmax(150px, 2fr));
  border: blue 5px solid;
}

.player {
  border: red 5px solid;
  display: flex;
  justify-content: center;
  align-items: center;
}

将列数/行数更改为自动调整/自动填充也不会产生预期的结果,而是无论如何都会占用整个宽度。我附上了我在下面尝试过的实例:

https://codesandbox.io/s/misty-smoke-bwvtt

最佳答案

由于总共只有大约 4 个元素,您可以手动处理每个案例。在这种情况下,您只需要两个声明而无需任何模板。隐式网格将为您完成这项工作。

.grid {
  display: grid;
  height: 300px;
  border: blue 5px solid;
}

.player {
  border: red 5px solid;
  display: flex;
  justify-content: center;
  align-items: center;
}


/* 3 players: make the last one take two colums*/
.player:nth-child(3):last-child {
  grid-column: span 2;
}


/* 4 players: make the fourth element in the second column */
.player:nth-child(4) {
  grid-column: 2;
}
<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
</div>

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
  <div class="player">Player 3</div>
</div>

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
  <div class="player">Player 3</div>
  <div class="player">Player 4</div>
</div>

对于 3x2 网格,您可以添加更多声明:

.grid {
  display: grid;
  height: 300px;
  border: blue 5px solid;
}

.player {
  border: red 5px solid;
  display: flex;
  justify-content: center;
  align-items: center;
}


/* 3 players */
.player:nth-child(3):last-child {
  grid-column: span 2;
}


/* 4 players  */
.player:nth-child(4):last-child {
  grid-column: 2;
}


/* 5 players */
.player:nth-child(1):nth-last-child(5),
.player:nth-child(2):nth-last-child(4),
.player:nth-child(3):nth-last-child(3) {
  grid-column: span 2;
}

.player:nth-child(4):nth-last-child(2) {
  grid-column: span 3;
}

.player:nth-child(5):nth-last-child(1) {
  grid-column:  4/span 3;
}


/* 6 players */
.player:nth-child(6) {
  grid-column: 3;
}
<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
</div>

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
  <div class="player">Player 3</div>
</div>

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
  <div class="player">Player 3</div>
  <div class="player">Player 4</div>
</div>

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
  <div class="player">Player 3</div>
  <div class="player">Player 4</div>
  <div class="player">Player 5</div>
</div>

<div class="grid">
  <div class="player">Player 1</div>
  <div class="player">Player 2</div>
  <div class="player">Player 3</div>
  <div class="player">Player 4</div>
  <div class="player">Player 5</div>
  <div class="player">Player 6</div>
</div>

关于html - CSS 网格 - 2x2 网格总是尽可能占据整个宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58478216/

相关文章:

html - 使用 CSS Grid 将最后一项固定在水平导航菜单的右侧

html - 悬停时在图像下方显示文本而不干扰其他元素

python - 如何将原始 HTML/JavaScript 添加到 Dash 应用程序?

jquery - Javascript 冲突 superslides.js 和 parallax.js

css - 如何防止链接破坏 Polymer 中的样式?

javascript - 使用 Javascript 添加 android 智能应用横幅图标

javascript - 如何使用 JavaScript 从字符串中删除重复的 CSS 样式?

javascript - jQuery 滚动效果无法按预期工作

css - 使元素跨越具有自动列的网格上的所有列

html - 如何展平嵌套的 div 以在 CSS 网格中显示它们?