如何使用 Flexbox 创建多列和多行 [重复]

Posted

技术标签:

【中文标题】如何使用 Flexbox 创建多列和多行 [重复]【英文标题】:How to create multiple columns and row with Flexbox [duplicate] 【发布时间】:2020-04-07 18:48:11 【问题描述】:

鉴于我有以下标记:

<ul class="box">
  <li class="list-item A">
    <a>A</a>
  </li>
  <li class="list-item B">
    <a>B</a>
  </li>
  <li class="list-item C">
    <a>C</a>
  </li>
   <li class="list-item D">
    <a>D</a>
  </li>
</ul>

如何使用 Flexbox 获得以下布局?

我已经用我尝试过的东西制作了一支笔,但它不起作用:

https://codepen.io/pbul2004/pen/LYEROLq

A = 25% 的图像 B = 50% 的标题和副标题 C = 50% 的描述 D = 皮尔斯和一个 25% 的按钮

B 和 C 在中间。

【问题讨论】:

【参考方案1】:

你需要一个设置的高度来将 flex 元素包裹到列中:

* 
  margin: 0;
  padding: 0;
  list-style: none;
  box-sizing: border-box;


.box 
  display: flex;
  height: 100vh;
  flex-flow: column wrap;


.list-item 
  flex: 1;
  border: red solid;
 /* width: 33.33%;*/


.A,
.D 
  min-height: 100%;

.A width:20%;
.Dwidth:15%;
.B,.C width:65%
<ul class="box">
  <li class="list-item A">
    <a>A</a>
  </li>
  <li class="list-item B">
    <a>B</a>
  </li>
  <li class="list-item C">
    <a>C</a>
  </li>
  <li class="list-item D">
    <a>D</a>
  </li>
</ul>

如果您无法设置高度,那么网格将为您完成这项工作。

* 
  margin: 0;
  padding: 0;
  list-style: none;
  box-sizing: border-box;


.box 
  display: grid;
  grid-template-columns: 20% 1fr 15%;
  flex-flow: column wrap;
  
  /* for demo */
  min-height: 50vh;
  transition:0.2s;
  /* for demo, use content instead */

.box:hover min-height:100vh;

.list-item 
  border: red solid;


.A,
.D 
  grid-row: 1 / span 2;


.A 
  grid-column: 1;


.B 
  grid-row: 1;
  grid-column: 2;


.C 
  grid-column: 2;
  grid-row: 2


.D 
  grid-column: 3:
<ul class="box">
  <li class="list-item A">
    <a>A</a>
  </li>
  <li class="list-item B">
    <a>B</a>
  </li>
  <li class="list-item C">
    <a>C</a>
  </li>
  <li class="list-item D">
    <a>D</a>
  </li>
</ul>

作为教程或提醒:https://css-tricks.com/snippets/css/a-guide-to-flexbox/ & https://css-tricks.com/snippets/css/complete-guide-grid/

【讨论】:

谢谢,让它看起来很简单。我如何轻松调整列宽,A = 20%,D 说 15%,然后 B 和 C 剩下的??? @John 我更新了 sn-ps。您还可以阅读链接,您会找到有关此内容的所有信息以及我是如何做到的;) 列 CSS:codepen.io/gc-nomade/pen/PowGOgb 将使每一列的大小相同...我认为最好的选择是此处的网格显示。跨度> 显然我们还“不允许”使用 css 网格。但我会看看 flexbox 选项,再次感谢您的帮助:-)

以上是关于如何使用 Flexbox 创建多列和多行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在多行flexbox中对齐左最后一行/行[重复]

如何使用css3 flexbox创建多列布局而不垂直扩展?

使用 flexbox 具有相同高度元素的多线网格

如何创建具有多行多列的表格视图?

如何使用linq按多列分组[重复]

将数据从多行转换为多列[重复]