如果连续空间不足,则将 flex-direction 切换到列

Posted

技术标签:

【中文标题】如果连续空间不足,则将 flex-direction 切换到列【英文标题】:Make flex-direction switch to column if there's not enough space in a row 【发布时间】:2017-09-02 05:24:52 【问题描述】:

在下面的示例中,我想要让.inner-flexbox 在其子元素可以放在一行时拥有flex-direction: row;,但当它们不能放在flex-direction: column; 时切换到flex-direction: column;。我认为媒体查询不是我想要的,因为我会根据视口宽度是大于还是小于连续 .inner-flexbox 中的所有 <div>s 的宽度加上<aside>。基本上,我不希望 .inner-flexbox 中的项目包装——我希望它们全部在一行中,或者全部在一列中。

(蒸馏示例):我有一个包含两个项目的弹性框。一个是“普通”元素,另一个是另一个 flexbox。

.outer-wrapper

    display:flex;
    width: 100%;
    height: auto;
    background-color: gray;
    flex-wrap: nowrap;


.inner-flexbox

    display: flex;
    flex-wrap: wrap;
    flex-direction: row;


.inner-flexbox > div

    width: 10rem;
    height: 10rem;
    background-color: salmon;
    margin: 10px;


aside

    background-color: blue;
    width: 15rem;
    height: 15rem;
<div class="outer-wrapper">
  <div class="inner-flexbox">
    <div>Block 1</div>
    <div>Block 2</div>
    <div>Block 3</div>
  </div>
  <aside><!-- Other content here --></aside>
</div>

【问题讨论】:

媒体查询在这里是有意义的,因为你不想换行,你想立即从水平切换到垂直。 是否有适合这些目的的媒体查询?如果是这样,我对这个想法持开放态度。 jsfiddle.net/b36j7Lk1 @Michael_B 只要您知道项目的宽度,它就可以正常工作。这很快就会变得复杂,尤其是当您开始更改内容并且项目的宽度不再相同时。从我的问题来看:“我不认为媒体查询是我想要的,因为我会根据视口宽度是否大于或小于 .inner-flexbox 中所有 的宽度行加上 的宽度。" @Michael_B 直到现在我都忘了给 一个宽度我的例子,但是一旦我把它添加到你的例子中并添加了 flex-shrink: 0;为了防止它被压扁,媒体查询分崩离析。还是谢谢。 【参考方案1】:

试试这个代码

.outer-wrapper 
  display: flex;
  width: 100%;
  height: auto;
  background-color: gray;
  flex-wrap: nowrap;


.inner-flexbox 
  width: 75%;
  display: flex;
  flex-wrap: wrap;
  flex-direction: row;
  flex-flow: row wrap;
  justify-content: space-between;


.inner-flexbox>div 
  width: 10rem;
  height: 10rem;
  background-color: salmon;
  margin: 10px;


aside 
  width: 25%;
  background-color: blue;
  width: 15rem;
  height: 15rem;
  float: right;
  display: block;
<div class="outer-wrapper">
  <div class="inner-flexbox">
    <div>Block 1</div>
    <div>Block 2</div>
    <div>Block 3</div>
  </div>
  <aside>
    <!-- Other content here -->
  </aside>
</div>

【讨论】:

抱歉,我可能不太清楚。我确实希望inner-flexbox 中的项目进行换行。我希望它们全部在一行中,或者全部在一列中。如果没有足够的空间让它们在行布局中,inner-flexbox 内的项目应该只在列中。【参考方案2】:

最后我求助于脚本,正如@LGSon 建议的那样。我使用 jQuery 将内部 flexbox 的总宽度与容器的宽度减去它旁边的项目的宽度进行比较。

【讨论】:

以上是关于如果连续空间不足,则将 flex-direction 切换到列的主要内容,如果未能解决你的问题,请参考以下文章

解决临时表空间的报错

vector和list

2021-10-01:矩阵置零。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间(

macos升级磁盘空间不足

如何计算数据集中的连续性?

用DISM++简单几步即可解决C盘空间不足的问题(磁盘空间不足)