CSS网格布局的水平滚动

tec*_*eek 3 html css css3 flexbox css-grid

我需要仪表板具有不同的布局。如果项目超出以适合可见视口,则只需要水平滚动用于layout-container。我遇到了具有以下要求的布局。

这是我需要的布局

我已经使用CSS-flexbox创建了布局样式,但是无法获取水平滚动,只能获取垂直滚动。

html,
body {
  height: 100%;
  margin: 0px;
}
* {
  box-sizing: border-box;
}
.flexbox {
  height: 100%;
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  overflow-x: auto;
  background-color: lightgreen;
}
.item {
  min-width: 50%;
  min-height: 50%;
  flex: 1 0 0;
  border: 1px solid;
}
.item:nth-child(odd) {
  background-color: lightblue;
}

.item:nth-child(even) {
  background-color: lightslategray;
}
.item1 {
  min-width: 100%;
}
Run Code Online (Sandbox Code Playgroud)
<div class="flexbox">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
  <div class="item item1">4</div>
  <div class="item item2">5</div>
  <div class="item item3">6</div>
</div>
Run Code Online (Sandbox Code Playgroud)

https://codepen.io/TechnoGeek/pen/GdZodo

因此,我认为CSS网格可以帮助解决这一问题。所以我尝试了一些东西,但不知道如何获得。

html,
body {
  height: 100%;
  margin: 0px;
}

.grid {
  display: grid;
  height: 100%;
  background-color: lightgreen;
  grid-template-columns: repeat(2, 1fr);
  grid-template-row: repeat(2, 1fr);
  grid-gap: 5px;
  /*   grid-auto-flow: column; */
}

.item {
  border: 1px solid;
}

.item:nth-child(odd) {
  background-color: lightblue;
}

.item:nth-child(even) {
  background-color: lightslategray;
}

.item1 {
  grid-column: 1/3;
}
Run Code Online (Sandbox Code Playgroud)
<div class="grid">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
  <div class="item item1">4</div>
  <div class="item item2">5</div>
  <div class="item item3">6</div>
</div>
Run Code Online (Sandbox Code Playgroud)

https://codepen.io/TechnoGeek/pen/BxKoaG

在网格布局中,项目会缩小以适合布局。

容器内的项目数是动态的。不论项目计数如何,布局都必须维护每个可见组的结构。

有人可以帮助实现这一目标吗?

提前致谢。

tec*_*eek 5

我使用CSS Grid布局找到了令人满意的答案。

在网格布局中,项目会缩小以适合布局。

fr在问题中使用的是网格线,这就是为什么项目在缩小。现在,我已经使用了,%因为我希望单元格项目从可见区域流出以在需要时产生滚动。

span定义网格单元区域的关键字和关键字有助于自动放置网格单元。

从MDN: span && [ <integer> || <custom-ident> ]

将网格跨度贡献给网格项目的位置,以使网格项目的网格区域的相应边缘距离相对边缘n行。

html,
body {
  height: 100%;
  margin: 0px;
}

.grid {
  display: grid;
  height: 100%;
  background-color: lightgreen;
  grid-template-columns: repeat(2, 50%);
  grid-template-rows: repeat(2, 50%);
  /*grid-gap: 5px;*/
  grid-auto-columns: 50%;
  grid-auto-flow: column;
}

.item {
  border: 1px solid;
  grid-area: span 1 / span 1;
}

.item:nth-child(odd) {
  background-color: lightblue;
}

.item:nth-child(even) {
  background-color: lightslategray;
}

.item1 {
  grid-area: span 1/ span 2;
}
Run Code Online (Sandbox Code Playgroud)
<div class="grid">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
  <div class="item item1">4</div>
  <div class="item item2">5</div>
  <div class="item item3">6</div>
</div>
Run Code Online (Sandbox Code Playgroud)