【问题标题】:How to reorder DOM flow如何重新排序 DOM 流
【发布时间】:2020-08-18 06:18:36
【问题描述】:

我有以下布局问题。在移动设备的一列中,4 个块依次为 a1、b1、a2、b2。 在桌面上,我想得到 a1,a2,b1-b2,即 a1 后跟 a2,然后在同一行但低于 a2 的 b1-b2。我希望使用 flexbox,但不知道该怎么做。

手机:

<div style='display:flex;flex-direction:column>
    <div id='a1'></div>
    <div id='b1'></div>
    <div id='a2'></div>         //each of these is 100VW
    <div id='b2'></div>
 </div>

桌面:

    <div id='a1'></div>      // the first two are 100vw
    <div id='a2'></div>
    <div id='b1'></div><div id='b2'></div>  //each of these would be 50vw

有没有办法用一个版本的html做到这一点,只修改css?

【问题讨论】:

  • 您处理的是 2 维,而不是 1,因此请查看 Grid 而不是 Flexbox。
  • 这是关于 CSS 而不是 DOM。 CSS 对 DOM 没有影响。您还将此标记为 jquery 和 javascript。为什么?
  • @Rob,显然两者都有关。我们需要将流从 a1,b1,a2,b2 更改为 a1,a2,b1,b2
  • 好吧,flex 和任何其他 CSS 属性都不会改变 DOM 流。
  • @Quentin,我知道我可以单独放置每个单元格 - 有没有更优雅的解决方案?

标签: javascript jquery layout flexbox


【解决方案1】:

网格会更简单,但也可以使用 flexbox。

弹性

article {
  display: flex;
  flex-wrap: wrap;
}

#a1 { order: 1; }
#a2 { order: 2; }
#b1 { order: 3; }
#b2 { order: 4; }

div {
  flex: 0 0 100%;
  background-color: lightgreen;
  margin-bottom: 5px;
}

#b1, #b2 {
  flex: 1 0 34%; /* allows max 2 items per row, with ample space for margins */
}

#b2 {
  margin-left: 5px;
}

@media ( max-width: 500px) {
  article {
    display: block;
  }
  #b2 {
    margin: 0;
  }
}
<article>
  <div id='a1'>a1</div>
  <div id='b1'>b1</div>
  <div id='a2'>a2</div>
  <div id='b2'>b2</div>
</article>

jsFiddle demo


网格

article {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 5px;
  grid-template-areas:
    " a1 a1 "
    " a2 a2 "
    " b1 b2 "
}

#a1 {
  grid-area: a1;
}

#a2 {
  grid-area: a2;
}

#b1 {
  grid-area: b1;
}

#b2 {
  grid-area: b2;
}

@media (max-width: 500px) {
  article {
    grid-template-columns: 1fr;
    grid-template-areas:
      "a1""b1""a2""b2";
  }
}

div {
  background-color: lightgreen;
}
<article>
  <div id='a1'>a1</div>
  <div id='b1'>b1</div>
  <div id='a2'>a2</div>
  <div id='b2'>b2</div>
</article>

jsFiddle demo

【讨论】:

  • 只是忘了添加order 属性。对不起。马上更新。
  • 谢谢,我不知道 flexbox 中的 order 属性。
  • 没问题。这是explanation of the order property
  • 真的很有帮助。欣赏两种方式的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 2020-08-16
  • 1970-01-01
相关资源
最近更新 更多