Something I’ve found interesting while reviewing recent code test submissions (within job applications) at work is that more developers than I’d expect still use
display: inline-block when they need to lay out multiple elements horizontally such as the items in a navigation menu. It’s interesting because Flexbox – which has now been around for almost 10 years – gives you a modern, purpose-built solution to that.
Of course, there is no crime in taking the
inline-block approach. It’s an option. And I did take a moment just to challenge my assumptions. But having given it a little thought, I am pretty convinced that Flexbox is the better approach and so I think their choice is worth a query.
Here’s why I think Flexbox is much better:
- Modern CSS layout is purpose-built for constructing multi-element layouts. Older methods were lacking, quirky and slightly hacky. Using (and knowing to use) purpose-built tools is generally a good thing for reliability, predictability and scalability.
- Modern CSS layout provides more control, because it’s fundamentally different. You get a parent context (the flex container or grid) that lets you style the context (with
gap, for example). We didn’t have this before.
- Styling a context rather than individual items plays better with modern component-oriented organisation and ideas. It‘s good to keep components encapsulated and context-agnostic, handing off layout to separate, fit-for-purpose tools.
- Flexbox is built for responsiveness, i.e. built for the modern era.
- the default
align-items:stretchmeans that items laid out in a row are automatically full parent-height which is often desirable for larger touch targets and achieving hover styles.
inline-blockretains some of the properties of
inlinethat are undesirable for this type of use-case. Who can be bothered with whitespace in the code appearing on the screen, or having to work with
vertical-alignwhen you don’t need to.
I also don’t see any reason to not use Flexbox. It’s conventional (see for example navigation menus on BBC, Tetralogical), recommended by CSS experts (Rachel Andrew, Jen Simmons etc), performant and well-supported by browsers. You are not going “fancy”, “cutting edge” or “overkill” by using Flexbox. For the “horizontal menu” use case, it’s simply a more suitable choice than the older alternatives.
Related: Chris Coyier’s article When do you use inline block is an excellent investigation into whether any necessary uses for
inline-block remain. I reserve the right to change my mind on this, but aside from the “apply
transform to an inline element” use case I can’t really see any that have not now been superseded.