首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >div外的Flexbox包装元件

div外的Flexbox包装元件
EN

Stack Overflow用户
提问于 2019-10-16 19:47:45
回答 2查看 1.4K关注 0票数 1

我试图用列的方向来包装元素。我的第一个元素是100%宽,所有其他元素都是50%宽。当涉及到包装时,最后几个元素从100%宽的第一个元素开始,而不是继续到第二行。

JSFiddle链接:https://jsfiddle.net/e4j16apg/

这就是我想要达到的目标:

代码语言:javascript
复制
.container {
  display: flex;
  flex-wrap: wrap;
  flex-direction: column;
  box-sizing: border-box;
  height: 200px;
  width: 50%;
  border: 1px solid blue;
}

.ca {
  width: 50%;
  border: 1px solid red;
}

.ca-1 {
  height: 50px;
  width: 100%;
  border: 1px solid green;
}
代码语言:javascript
复制
<div class="container">
  <div class="ca ca-1">ca-1</div>
  <div class="ca ca-2">ca-2</div>
  <div class="ca ca-3">ca-3</div>
  <div class="ca ca-3">ca-3</div>
  <div class="ca ca-4">ca-4</div>
  <div class="ca ca-5">ca-5</div>
  <div class="ca ca-6">ca-6</div>
  <div class="ca ca-7">ca-7</div>
  <div class="ca ca-8">ca-8</div>
  <div class="ca ca-9">ca-9</div>
  <div class="ca ca-10">ca-10</div>
</div>

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-16 19:53:17

您无法使用flexbox实现所需的功能,但可以使用columns (并使第一个元素跨所有列):

代码语言:javascript
复制
.container {
  columns: 2;
  width: 50%;
  border: 1px solid blue;
  column-gap: 0;
  /* height: 200px; */
}

.ca {
  border: 1px solid red;
  break-inside: avoid;
  /* height: calc(100% / 6); */
}

.ca-1 {
  column-span: all;
}

* {
  box-sizing: border-box;
}
代码语言:javascript
复制
<div class="container">
  <div class="ca ca-1">ca-1</div>
  <div class="ca ca-2">ca-2</div>
  <div class="ca ca-3">ca-3</div>
  <div class="ca ca-3">ca-3</div>
  <div class="ca ca-4">ca-4</div>
  <div class="ca ca-5">ca-5</div>
  <div class="ca ca-6">ca-6</div>
  <div class="ca ca-7">ca-7</div>
  <div class="ca ca-8">ca-8</div>
  <div class="ca ca-9">ca-9</div>
  <div class="ca ca-10">ca-10</div>
</div>

还请注意,默认情况下,columns计算所有包装和包装尽可能接近一半(当有两个)的子节点的总高度。所以你实际上不需要固定的高度。而且你不需要height设置在孩子身上,特别是当他们身高参差不齐的时候。

CSS columns被设计成开箱即用的报纸专栏,这似乎就是你所追求的。

若要防止儿童内部中断,请使用break-inside: avoid;

票数 2
EN

Stack Overflow用户

发布于 2019-10-16 20:08:47

你写道:

当涉及到包装时,最后几个元素从100%宽的第一个元素开始,而不是继续到第二行。

这就是问题所在。你认为有“第二线”。没有。

一旦使第一个元素获得100%的宽度,就定义了列的宽度。

通过使后面的元素宽度为50%,您将告诉它们消耗该列的50%。

包装的元素创建第二列。

它们不能在100%元素下面和第一组50%元素旁边包装,因为您不能将元素包装到同一行。

因此,您不必更改HTML,使用CSS Grid作为布局:

代码语言:javascript
复制
.container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: repeat(9, 1fr);
  grid-auto-flow: column;
  box-sizing: border-box;
  height: 200px;
  width: 50%;
  border: 1px solid blue;
}

.ca {
  border: 1px solid red;
}

.ca-1 {
  grid-column: 1 / -1;
  grid-row: 1 / 3;
  border: 1px solid green;
}
代码语言:javascript
复制
<div class="container">
  <div class="ca ca-1">ca-1</div>
  <div class="ca ca-2">ca-2</div>
  <div class="ca ca-3">ca-3</div>
  <div class="ca ca-3">ca-3</div>
  <div class="ca ca-4">ca-4</div>
  <div class="ca ca-5">ca-5</div>
  <div class="ca ca-6">ca-6</div>
  <div class="ca ca-7">ca-7</div>
  <div class="ca ca-8">ca-8</div>
  <div class="ca ca-9">ca-9</div>
  <div class="ca ca-10">ca-10</div>
</div>

这里有更多细节:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58420710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档