【问题标题】:How to get three columns and two rows (1 x 2 x 2) with flexbox如何使用 flexbox 获得三列和两行 (1 x 2 x 2)
【发布时间】:2017-08-03 00:19:30
【问题描述】:

如果可能的话,我想用 Flex 实现以下结果。知道如何使用 CSS 来完成,但对 Flex 不太熟悉。我之所以想在 flex 中这样做是为了强迫自己编写简洁且更易于维护的代码。

.banner {
  width: 20%;
  height: 100%;
  position: relative;
  float: left;
  overflow: hidden;
}

.item {
  height: 50%;
  width: 33.33%;
  float: left;
  position: relative;
}

.inner-item-block {
  height: 100%;
  width: 80%;
  float: left;
  position: relative;
}

.inner-line {
  border-right: 1px solid #dedede;
  border-bottom: 1px solid #dedede;
  height: 100%;
  position: relative;
  display: flex;
  align-items: center; /* center child elements */
}
<div class="item-block">
  <div class="banner banner3">
  </div>
  <div class="inner-item-block">
    <div class="item">
      <div class="inner-line">
      </div>
    </div>

    <div class="item">
      <div class="inner-line">
      </div>
    </div>

    <div class="item">
      <div class="inner-line">
      </div>
    </div>

    <div class="item">
      <div class="inner-line">
      </div>
    </div>
  </div>
</div>

【问题讨论】:

  • 请查看并评论我的回答,如果有不清楚或遗漏的地方,请告诉我。如果不是,那么如果您能接受对您帮助最大的答案,那就太好了。

标签: html css flexbox


【解决方案1】:

如果您可以在父元素上设置固定高度,那么您可以使用 Flexbox 执行此操作。您可以将flex-direction: columnflex-wrap: wrap 一起设置,并使第一个子元素占据高度的100%。

* {
  box-sizing: border-box;
}
body {
  margin: 0;
}
.parent {
  display: flex;
  flex-direction: column;
  height: 100vh;
  flex-wrap: wrap;
}
.parent > div {
  flex: 0 0 50%;
  width: 33.33%;
  border: 1px solid black;
}
div.first {
  flex: 0 0 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
<div class="parent">
  <div class="first">First</div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

创建此布局的新选项是Grid-layout,您只需在第一个子元素上设置grid-row: span 2

* {
  box-sizing: border-box;
}
body {
  margin: 0;
}
.parent {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(100px, auto);
}
.parent > div {
  border: 1px solid black;
}
div.first {
  grid-row: span 2;
}
<div class="parent">
  <div class="first">First</div><div></div><div></div><div></div><div></div>
  <div class="first">First</div><div></div><div></div><div></div><div></div>
</div>

【讨论】:

  • 很好的答案。还有一件事,我怎样才能获得一个会按比例增长和缩小的响应高度。
  • 正如我对 flexbox 所说,您需要在带有网格的父级上设置固定高度,它是响应式 jsfiddle.net/Lg0wyt9u/2105
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多