The goal
To review, the goal was to take this relatively unstyled layout:
And create styling that results in this layout for wider screens:
This layout for screens that are narrower, but still wide enough to have the buttons side-by-side:
And this layout when the screen gets narrow enough that the buttons don’t fit:
This particular challenge specifies that there should be no media queries in the CSS.
Step 1: Create a div for the buttons
The buttons need a flex container , so let’s create a div containing them:
index.html
Then we can start setting up the spacing by creating a CSS custom property and adding it as a margin-top
value. The custom property will come in handy because we will want to use the same value as the gap
for the flex
container.
style.css
Here’s what we’ve got so far:
Step 2: Add flex styles
justify-content
- Since the buttons sit at either end of the container when there’s enough room for both of them, we want justify-content: space-between .
- The flex direction is
row
since they’re aligned horizontally. This is the default, so there’s no need to specify. - The height of the container is the same as the height of the buttons (because we haven’t specified a height, the div will default to the height of its tallest element), so there’s no need to specify an align-items value. There’s no room within the container for the buttons to move vertically (along the cross axis, which
align-items
controls).
style.css
This works well when there’s enough space for the buttons, but they get squished when the viewport gets too narrow:
flex-wrap and gap
We could use a media query to change the flex-direction to column
when the screen gets too narrow. However, this requires a guess as to how narrow is “too narrow” (in this case, the buttons have a fixed width, but you could imagine buttons that have a variable width based on the length of the content).
Fortunately, there’s another flex property we can use: flex-wrap . By setting flex-wrap
to wrap
, the buttons will automatically wrap when the screen gets too narrow.
Adding a gap
value creates a gap between the buttons when they wrap. We can use the CSS custom property we created earlier for the value.
style.css
And voila! The narrow viewport now appears as specified.