meowmers meowmers - 1 month ago 12
CSS Question

Combining rows and columns in flexbox

I have three elements in an

article
: the photo, the categories and then the post info.

I am trying to figure out how to get the categories element to stack on top of the post info column (#2 on top of #3, if you are looking at the attached photo) so it looks like two 50% columns even though there are three flex elements.

Flex Items



.flexbox {
display: flex;
}
.featured-image {
flex: 1;
}
.post-categories {}
.post-info {
flex: 1;
}

<article class="flexbox">
<div class="featured-image" style="background-image: url(img.jpg);"></div>
<ul class="post-categories">
<li><a href="/category">Category</a>
</li>
</ul>
<div class="post-info">
<header>
<h3 class="post-title"><a href="/post">Post Title</a></h3>
<p class="timestamp">Posted 1 month ago</p>
</header>
</div>
</article>




Answer

I'd put a wrapper div around the two things you want to stack. Then you can use flex to put that wrapper next to #1, and use flex inside that wrapper to stack #2 and #3.

.flexbox {
    display: flex;
}

/* stack 1 next to .post-meta, containing 2 and 3 */
.featured-image,
.post-meta {
  flex: 1;
}

/* stack 2 and 3 inside .post-meta */
.post-meta {
  display: inline-flex;
  flex-direction: column;
}


/* these styles are mostly for demo purposes;
 * adjust or remove as needed */

.post-categories, 
.post-info {
  padding: 10px;
  list-style: none;
  margin: 0;
}

.featured-image {
  background-color: skyblue;
 }

.post-categories { background: #ccc; }
.post-info { background: #ddd; }
<article class="flexbox">
    <div class="featured-image" style="background-image: url(img.jpg);"></div>
    <div class="post-meta">
    <ul class="post-categories">
        <li><a href="/category">Category</a></li>
    </ul>
    <div class="post-info">
        <header>
            <h3 class="post-title"><a href="/post">Post Title</a></h3>
            <p class="timestamp">Posted 1 month ago</p>
        </header>
    </div>
   </div>
</article>

Comments