连续的相同颜色单元格应位于同一列、网格框中

Mr_*_*een 3 html css grid-layout flexbox

在我当前的项目中,我有大量的部分,每个部分都有一两行,范围从 2 到 15 列,宽度相等。相同颜色的单元格放置在同一列中。一个section的定位如下图所示:

在此输入图像描述

为了实现上述布局,我使用了 gridbox。我接近解决方案,但第二行总是向左对齐。

.container {
  display: grid;
  width: 100%;
  grid-template-columns: repeat(auto-fit, minmax(0px, 1fr));
  gap: 5px 10px;
  background-color: steelblue;
}

.field {
  background-color: black;
  box-shadow: inset 0px 0px 2px #ffffff;
  height: 20px;
  color: white;
  text-align: center;
}

.second-row {
  grid-row-start: 2;
}


/* colours */

.colour-black {
  background: black;
}

.colour-blue {
  background: blue;
}

.colour-yellow {
  background: yellow;
}

.colour-red {
  background: red;
}

.colour-orange {
  background: orange;
}

.colour-purple {
  background: purple;
}

.colour-green {
  background: green;
}

.colour-brown {
  background: brown;
}

.colour-violet {
  background: violet;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="field colour-black">1</div>
  <div class="field colour-blue">2</div>
  <div class="field colour-blue second-row">3</div>
  <div class="field colour-green">4</div>
  <div class="field colour-brown">5</div>
  <div class="field colour-orange">6</div>
  <div class="field colour-purple">7</div>
  <div class="field colour-red">8</div>
  <div class="field colour-red second-row">9</div>
  <div class="field colour-violet">10</div>
</div>
Run Code Online (Sandbox Code Playgroud)

需要注意的事项:

  • 相同颜色的单元格最多只能有 2 个。
  • 相同颜色的单元格总是连续的。
  • 只有 CSS 解决方案。除了添加类之外无法更改 HTML。
  • 无法使用 JavaScript,因为这对我的项目来说将是巨大的努力,而且现在无法承担。
  • 非网格解决方案也受到欢迎。

val*_*als 5

您只需要添加:

  • 网格自动流:列;到容器
  • 网格行:1;到场

它会起作用:

.container {
  display: grid;
  width: 100%;
  grid-template-columns: repeat(auto-fit, minmax(0px, 1fr));
  gap: 5px 10px;
  background-color: steelblue;
  grid-auto-flow: column; /* added */
}

.field {
  background-color: black;
  box-shadow: inset 0px 0px 2px #ffffff;
  height: 20px;
  color: white;
  text-align: center;
  grid-row: 1;  /* added */
}

.second-row {
  grid-row-start: 2;
}


/* colours */

.colour-black {
  background: black;
}

.colour-blue {
  background: blue;
}

.colour-yellow {
  background: yellow;
}

.colour-red {
  background: red;
}

.colour-orange {
  background: orange;
}

.colour-purple {
  background: purple;
}

.colour-green {
  background: green;
}

.colour-brown {
  background: brown;
}

.colour-violet {
  background: violet;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="field colour-black">1</div>
  <div class="field colour-blue">2</div>
  <div class="field colour-blue second-row">3</div>
  <div class="field colour-green">4</div>
  <div class="field colour-brown">5</div>
  <div class="field colour-orange">6</div>
  <div class="field colour-purple">7</div>
  <div class="field colour-red">8</div>
  <div class="field colour-red second-row">9</div>
  <div class="field colour-violet">10</div>
</div>
Run Code Online (Sandbox Code Playgroud)