Flexbox:根据行号交替“行”和“行反转”

Cri*_*ìna 5 html javascript css flexbox responsive

我试图创建一个Flexbox的响应式布局,让我交替两个方向rowrow-reverse

也许您可以通过一些图像更好地理解它(注意框的顺序):

在此处输入图片说明

并调整大小:

在此处输入图片说明

或者仍然:

在此处输入图片说明

你可以想象一个箭头穿过每个盒子,一定可以按照数字的顺序穿过1到8(就像一条蛇)。

如何使用 flexbox 实现它?

我想我可以使用orderCSS 属性,但我错过了一种动态设置它的方法。我不认为我可以用 JavaScript 实现这个结果,因为没有办法获得动态行的编号(除了丑陋的黑客,我想避免它们)。那么,你有什么想法吗?

谢谢你。

如果你想根据我的代码写一个例子,你可以使用这个:

.flexbox-container {
  display: flex;
  flex-wrap: wrap;
}

.flex-item {
  width: 380px;
  height: 100px;
  background: red;
  margin: 5px;
  
  font-family: sans-serif;
  color: white;
  text-align: center;
  font-size: 2em;
  line-height: 150%;
}
Run Code Online (Sandbox Code Playgroud)
<div class="flexbox-container">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
  <div class="flex-item">4</div>
  <div class="flex-item">5</div>
  <div class="flex-item">6</div>
  <div class="flex-item">7</div>
  <div class="flex-item">8</div>
</div>
Run Code Online (Sandbox Code Playgroud)

Pet*_*ete 4

我可以看到这种情况发生的唯一方法是手动设置顺序,然后使用媒体查询作为断点 - 这是一个示例

.flexbox-container {
  display: flex;
  flex-wrap: wrap;
}

.flex-item {
  width: calc(50% - 10px);
  height: 100px;
  background: red;
  margin: 5px;
  font-family: sans-serif;
  color: white;
  text-align: center;
  font-size: 2em;
  line-height: 150%;
}

.flex-item:nth-child(1) {
  order: 1;
}

.flex-item:nth-child(2) {
  order: 2;
}

.flex-item:nth-child(3) {
  order: 4;
}

.flex-item:nth-child(4) {
  order: 3;
}

.flex-item:nth-child(5) {
  order: 5;
}

.flex-item:nth-child(6) {
  order: 6;
}

.flex-item:nth-child(7) {
  order: 8;
}

.flex-item:nth-child(8) {
  order: 7;
}

@media only screen and (max-width: 768px) {
  .flex-item {
    width: calc(33.33333% - 10px);
  }
  .flex-item:nth-child(1) {
    order: 1;
  }
  .flex-item:nth-child(2) {
    order: 2;
  }
  .flex-item:nth-child(3) {
    order: 3;
  }
  .flex-item:nth-child(4) {
    order: 6;
  }
  .flex-item:nth-child(5) {
    order: 5;
  }
  .flex-item:nth-child(6) {
    order: 4;
  }
  .flex-item:nth-child(7) {
    order: 7;
  }
  .flex-item:nth-child(8) {
    order: 8;
  }
Run Code Online (Sandbox Code Playgroud)
<div class="flexbox-container">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
  <div class="flex-item">4</div>
  <div class="flex-item">5</div>
  <div class="flex-item">6</div>
  <div class="flex-item">7</div>
  <div class="flex-item">8</div>
</div>
Run Code Online (Sandbox Code Playgroud)