Flex Box Grid

by rgthree

HTML

<div class="group">
    <div class="row">
        <div class="cell -fill">
            <div class="item">A</div>
        </div>
        <div class="cell -fill">
            <div class="item">B</div>
        </div>
        <div class="cell -fill">
            <div class="item">C</div>
        </div>
    </div>
    <div class="row -double">
        <div class="cell -fill">
            <div class="item">A</div>
        </div>
        <div class="cell">
            <div class="item">B</div>
            <div class="item">C</div>
        </div>
    </div>
    <div class="row">
        <div class="cell">
            <div class="item">A</div>
        </div>
        <div class="cell -fill">
            <div class="item">C</div>
        </div>
    </div>
    <div class="row">
        <div class="cell -fill">
            <div class="item">A</div>
        </div>
    </div>
</div>

CSS

* {box-sizing: border-box;}
.group {
    border: 1px solid #F00;
}

.row {
    display: flex;
    align-items: stretch;
    flex-direction: row;
}
.cell {
    text-align:center;
    border: 1px solid #00F;
    flex-grow: 0;
    flex-shrink: 0;
    padding: 10px;
    width: 33.3%;

    display: flex;
    flex-direction: column;
    align-items: stretch;
}
.cell.-fill {
    flex-grow: 1;
    flex-shrink: 1;
}
.item {
    margin: 4px;
    border: 1px solid #FC0;
    min-height: 30px;
}
.row.-double .cell .item:only-child {
    flex-grow: 1;
}