行级弹性盒子中嵌套列级弹性盒子并进行换行

8

我有一个带有嵌套Flex Box的页面,链接如下:http://jsfiddle.net/fr0/6dqLh30d/

<div class="flex-group">
  <ul class="flex-container red">
    <li class="flex-item">1</li>
    <li class="flex-item">2</li>
    <li class="flex-item">3</li>
  </ul>

  <ul class="flex-container gold">
    <li class="flex-item">1</li>
    <li class="flex-item">2</li>
    <li class="flex-item">3</li>
    <li class="flex-item">4</li>
    <li class="flex-item">5</li>
  </ul>

  <ul class="flex-container blue">
    <li class="flex-item">1</li>
    <li class="flex-item">2</li>
    <li class="flex-item">3</li>
    <li class="flex-item">4</li>
    <li class="flex-item">5</li>
    <li class="flex-item">6</li>
    <li class="flex-item">7</li>
    <li class="flex-item">8</li>
  </ul>
<div>

以下是相关的CSS:

 .flex-group {
   display: flex;
   flex-direction: row;
   height: 500px;
 }

 .flex-container {
   padding: 0;
   margin: 0;
   list-style: none;
   border: 1px solid silver;
   display: flex;
   flex-direction: column;
   flex-wrap: wrap;
   flex: 0 0 auto;
 }

 .flex-item {
   padding: 5px;
   width: 100px;
   height: 100px;
   margin: 10px;

   line-height: 100px;
   color: white;
   font-weight: bold;
   font-size: 2em;
   text-align: center;
 }

外部弹性盒子(.flex-group)旨在从左到右布局。内部弹性盒子(.flex-container)旨在从上到下布局,并且如果没有足够的空间(在我的jsfiddle中确实没有),则应该换行。我想发生的是,当换行发生时,.flex-container将在X方向上增长,但这并没有发生。相反,容器会溢出。

我希望它看起来像这样(在Chrome中):https://dl.dropboxusercontent.com/u/57880242/flex-good.png

有没有办法让.flex-container在X方向上适当调整大小?我不想硬编码它们的宽度,因为显示在这些列表中的项目将是动态的。

2个回答

2
有趣的是,我也在尝试这个。我给flex-container添加了flex:1 100%; 这样可以将容器均匀地分配到100%的空间上;块将在其自己的容器空间中流动,而容器将保持相等的高度和权重,无论您如何调整窗口大小。
.flex-container {
  flex: 0 100%;
  display: flex;
  flex-flow: row wrap;
  align-items: space-around;
  align-content: flex-start;
  padding: 0;
  margin: 0;
  list-style: none;
  border: 1px solid silver;
}

在这里查看fiddle


2
我是一个有用的助手,可以为您翻译文本。
我已经玩了几分钟了,我认为我已经找到了你要找的东西。
这是CSS。
.flex-group {
    margin: auto;
    display: flex;
    flex-direction: row;
    justify-content: space-around;
}

.flex-container {
    flex: 0 1 auto;

    display: flex;
    flex-flow: row wrap;
    align-items: space-around;
    align-content: flex-start;

    padding: 0;
    margin: 0;
    list-style: none;
    border: 1px solid silver;
}

.red li {
    background: red;
}

.gold li {
    background: gold;
}

.blue li {
    background: deepskyblue;
}

.flex-item {
    flex: 0 1 auto;

    padding: 5px;
    width: 100px;
    height: 100px;
    margin: 10px;

    line-height: 100px;
    color: white;
    font-weight: bold;
    font-size: 2em;
    text-align: center;
}

这里有一个更新后的示例,可以看到它的运行效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接