css 如何使水平方块自动堆叠垂直的基础上,屏幕宽度?

zbdgwd5y  于 2023-01-14  发布在  其他
关注(0)|答案(3)|浏览(114)

我有一个简单的框内边框,框架有一个最大宽度。

.outer {
  display: flex;
  max-width: 1000px;
  border: 1px solid black;
}

.inner {
  min-width: 100px;
  height: 100px;
  background-color: blue;
  margin: 10px;
  color: white;
}
<div class='outer'>

  <div class='inner'>1</div>
  <div class='inner'>2</div>
  <div class='inner'>3</div>
  <div class='inner'>4</div>
  <div class='inner'>5</div>
  <div class='inner'>6</div>
  <div class='inner'>7</div>
  
</div>

你可以看到,随着屏幕宽度的减小,这些盒子会从框架中消失。我的问题是,这些盒子会自动在框架中垂直堆叠吗?所以当屏幕宽度减小时,7会在1下,然后6在1下,7在2下,然后5在1下,6在2下,7在3下,等等。
当屏幕宽度减到最小时,只剩下1列,垂直方向依次为1、2、3、4、5、6、7。
在真正的应用程序中,我有随机数量的方块,所以堆栈需要自动。

6xfqseft

6xfqseft1#

我想你要找的是flex-wrap: wrap;

.outer {
  display: flex;
  max-width: 1000px;
  border: 1px solid black;
  flex-wrap: wrap;
}

.inner {
  min-width: 100px;
  height: 100px;
  background-color: blue;
  margin: 10px;
  color: white;
}
<div class='outer'>

  <div class='inner'>1</div>
  <div class='inner'>2</div>
  <div class='inner'>3</div>
  <div class='inner'>4</div>
  <div class='inner'>5</div>
  <div class='inner'>6</div>
  <div class='inner'>7</div>
  
</div>
0qx6xfy6

0qx6xfy62#

要使Flex框成为列,请使用CSS

flex-direction: column;

你可以从我的来源找到这个和更多:
https://www.w3schools.com/css/css3_flexbox_container.asp

cbjzeqam

cbjzeqam3#

这个问题可以并且应该用CSS-Grid来解决,这可以确保在任何情况下都考虑到列,并且容器将利用整个宽度,而不是保留由flex-wrap引起的空白(这是@Libra答案的主要缺点)。
您可以使用auto-fitminmax值。这将确保元素具有最小宽度并占据其余部分。然后,它将尽可能多地容纳相邻的元素,并将其他元素推到下一行,但要尊重列:

.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
}

/* for visualization purpsoe only */
.container {
  gap: 0.5em;
}

.container > div {
  display: flex;
  justify-content: center;
  align-items: center;
  aspect-ratio: 1;
  background: blue;
  font-size: 2em;
  color: white;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
</div>

相关问题