ほんの一握りのブラウザーで作業するだけで構わない場合は、純粋な CSS でこれを行うことができます。さあ、孫の div を好きなだけ追加したり削除したりしてください:
http://codepen.io/cimmanon/pen/ldmtJ
/* line 5, ../sass/test.scss */
.wrapper {
display: -webkit-flexbox;
display: -ms-flexbox;
display: -webkit-flex;
}
@supports (display: flex) and (flex-wrap: wrap) {
/* line 5, ../sass/test.scss */
.wrapper {
display: flex;
}
}
/* line 9, ../sass/test.scss */
.a, .b, .c {
display: -webkit-flexbox;
display: -ms-flexbox;
display: -webkit-flex;
-webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
}
@supports (display: flex) and (flex-wrap: wrap) {
/* line 9, ../sass/test.scss */
.a, .b, .c {
display: flex;
}
}
/* line 13, ../sass/test.scss */
.a div, .b div, .c div {
border: 1px solid;
-webkit-flex: 1 0 100%;
-ms-flex: 1 0 100%;
flex: 1 0 100%;
}
/* Fancy it up! */
/* line 21, ../sass/test.scss */
.a {
background: #ff9999;
-webkit-flex: 1 1 10em;
-ms-flex: 1 1 10em;
flex: 1 1 10em;
}
/* line 26, ../sass/test.scss */
.b {
background: #00e600;
-webkit-flex: 1 1 10em;
-ms-flex: 1 1 10em;
flex: 1 1 10em;
}
/* line 31, ../sass/test.scss */
.c {
background: #9999ff;
-webkit-flex: 1 1 40%;
-ms-flex: 1 1 40%;
flex: 1 1 40%;
}
<div class="wrapper">
<div class="a">
<div>a</div>
<div>a</div>
<div>a</div>
<div>a</div>
<div>a</div>
</div>
<div class="b">
<div>b</div>
</div>
<div class="c">
<div>c</div>
<div>c</div>
</div>
</div>
ブラウザのサポート: Opera、Chrome、IE10。Firefox が flex-wrapを含む現在の Flexbox ドラフトのサポートを最終的に完了すると、そこでも機能します。