Make flex element ignore child element

CssHtmlFlexbox

Css Problem Overview


Is it possible to make a flex element ignore a child element so it's size does not affect the other elements?

For example, I have a wrapper with display: flex. It has a header, content, and footer.

<div class="wrapper">
    <header></header>
    <article></article>
    <footer></footer>
</div>

I want the wrapper to ignore the header tag (the header will be fixed to the top of the window). The article will be set to flex: 1 so it takes up the rest of the space, forcing the footer to the bottom of the page. Here is some sample CSS:

.wrapper {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding-top: 50px; /* Accounts for header */
}

header {
    height: 50px;
    position: fixed;
    top: 0;
    width: 100%;
}

article {
    flex: 1;
}

footer {
    height: 50px;
}

I know I could just move the header outside of the wrapper but I have a lot of existing code that will make that a bit more difficult. Is what I am asking even possible?

Css Solutions


Solution 1 - Css

In your .wrapper declare flex-wrap: wrap. Then for your header, you can add the style flex-basis: 100% which will force everything else down below the header.

Solution 2 - Css

Use position: absolute for the child element to exclude it from the flex calculations

Solution 3 - Css

You can use flex-shrink: 0 on the child elements to keep them from shrinking to fill the container. And use flex-wrap: wrap on the container/wrapper so your children will wrap down.

Solution 4 - Css

Use flex: 0 0 100%; to the child you want to be in a new line and add flex-wrap: wrap on the wrapper.

Solution 5 - Css

If trying to use flex-direction:column, the only thing that I found helpful for that is absolute positioning / with the corresponding padding.

Solution 6 - Css

Add flex-wrap: wrap on the wrapper where you're having display: flexon.
That did the trick for me.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSeanView Question on Stackoverflow
Solution 1 - CssAdrian BarsbyView Answer on Stackoverflow
Solution 2 - CssAyanView Answer on Stackoverflow
Solution 3 - CssAlexanderView Answer on Stackoverflow
Solution 4 - CssMehbub RashidView Answer on Stackoverflow
Solution 5 - CsslucianView Answer on Stackoverflow
Solution 6 - CssMagnus SmedView Answer on Stackoverflow