设置主容器和嵌套 Flex 容器之间的包装优先级

Rol*_*uhs 9 html css flexbox

在弹性盒(JSFiddle)中有一个弹性盒

问题是左侧 div 中的项目比必要的更早开始换行(左侧 div 仍有收缩空间)。

内部 Flexbox 只能在外部 Flexbox 包裹后才包裹 - 只要外部 Flexbox 仍有空间,内部 Flexbox 就不应该包裹,而外部 Flexbox 应该收缩。

我尝试将.b_row宽度设置为 100%,但没有成功。

.m {
  display: flex;
  flex-wrap: wrap;
}
.l_1 {
  background-color: red;
  flex: 1;
  padding: 15px;
  margin-left: auto;
  margin-right: auto;
}
.r_1 {
  background-color: yellow;
  flex: 1;
  padding: 25px;
  margin-left: auto;
  margin-right: auto;
}
.b_1 {
  padding: 15px;
  border-radius: 4px;
}
.b_row {
  display: flex;
  flex-wrap: wrap;
  width: 100%;
}
.b_item {
  flex: 1;
}
Run Code Online (Sandbox Code Playgroud)
<div class=m>
  <div class=l_1>
    <div class=b_1>
      Left text
      <div class=b_row>
        <div class=b_item>Item 1
          <br>
          <input class=datepicker type=text size=10>
        </div>
        <div class=b_item>Item 2
          <br>
          <input class=datepicker type=text size=10>
        </div>
      </div>
    </div>
   </div>
  <div class=r_1>Right Item</div>
</div>
Run Code Online (Sandbox Code Playgroud)

Mic*_*l_B 0

考虑使用媒体查询来控制内部 Flex 容器的包装行为。

而不是这个:

.b_row {
  display: flex;
  flex-wrap: wrap;
  width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

尝试按照以下思路进行操作:

.b_row {
  display: flex;
  /* flex-wrap: wrap; */
  width: 100%;
}

@media ( max-width: 300px ) {
   .b_row { flex-wrap: wrap; }
}
Run Code Online (Sandbox Code Playgroud)

修改后的小提琴

  • 一个很好的解决方法,但仍然是一个解决方法 - 我不敢相信这在 CSS 中是不可能的...... (4认同)
  • 好吧,如果没有办法告诉浏览器首选的换行顺序,那么 CSS 就会被破坏,我们必须依靠变通方法 - 但这并不能改变事实。 (3认同)