I recently learned about flex-box and have been doing some research into it. Hopefully I'll write up a “All about flexbox” post, but for now I want to go through a hands on example of using flexbox in the wild.
What are we working on?
I want to convert the menu of this site to use flexbox.
What does it look like now?
Right now I support three cases:
Medium (tablet) - this looks almost the same but the fonts are slightly smaller.
Ok, let’s make it flexible.
Step 1: remove most of the styling
I went through and removed most of the styling. I kept some things I knew I wanted, but most of it went.
Step 2: add flexbox
display: flex to the containing element. It kinda worked, but looked funny because I’d removed the rest of the styling.
Step 3: layout within the flexbox
Next I added how I wanted the content to flex within the flexbox by adding
justify-content: flex-end. This meant all the
<li>s got squished to the right.
I played around with a few options for
space-between. While that would better show off flexbox’s capabilities, I decided I didn’t actually want my nav bar all that flexible. Having too much space between the items looks quite strange - especially true on larger monitors. I probably should have thought of this before I started converting my nav bar to use flexbox, but oh well. For learning!
Step 4: add styling back in
Most of my previous styles were still required. I'd hoped I could remove some lines, but it doesn’t seem to be the case.
Step 5: mobile - vertical display
Yes, yes, mobile first and all that. I just wanted to get things working, ok?
display: flex I added previously was applied to the mobile, so I didn't need to add that again.
But I want the mobile navigation to go vertically, so I changed the
row (the default) to
Woot! Getting pretty close!
Step 6: mobile - center align
Next up was to center the
<li>s across the screen. So I used
align-items: center to get all my ducks in a row.
Step 7: mobile - spacing
Finally the spacing around the
<li>s was a bit weird so I used
justify-content: space-around to display them evening within the nav dropdown's space.
After all that it was quite a small change with no change to the user experience. But I did learn more about flexbox, so I’ve got that going for me!