html - How can I wrap flexbox children so that multiple children are stacked next to another child? -
i have table-like layout using flexbox:
+--------------+---------------+-----------------+---------------+ | 1 | 2 | 3 | 4 | | | | | | +--------------+---------------+-----------------+---------------+ as page gets smaller, i'd wrap content end this:
+--------------+-------------------------------------------------+ | | 2 | | | | | +-------------------------------------------------+ | 1 | 3 | | | | | +-------------------------------------------------+ | | 4 | | | | +--------------+-------------------------------------------------+ i tried use flex-wrap: wrap , extend width of trailing children force them wrap, produces like:
+-----------+--------------------------------------+ | | 2 | | | | | 1 +--------------------------------------+ | | | | +-----------+--------------------------------------+ | 3 | | | +--------------------------------------------------+ | 4 | | | +--------------------------------------------------+ this current attempt:
.container { display: flex; flex-wrap: wrap; } .controls { flex: 0 0 25%; max-width: 25%; } .name, .artist, .album { flex: 0 0 75%; max-width: 75%; } @media screen , (min-width: 600px) { .name, .artist, .album { flex: 0 0 25%; max-width: 25%; } } <div class="container"> <div class="controls">play</div> <div class="name">name</div> <div class="artist">artist</div> <div class="album">album</div> </div> (jsfiddle)
i'd prefer pure css solution works in ie11+.
consider using nested flex container switches items 2, 3 , 4 column on smaller screens.
here's example based on code:
html
<div class="container"> <div class="controls">play</div> <div class="inner-container"><!-- nested flex container --> <div class="name">name</div> <div class="artist">artist</div> <div class="album">album</div> </div> </div> css
.container { display: flex; flex-wrap: wrap; } .inner-container { display: flex; flex: 0 0 75%; } .controls { flex: 0 0 25%; } .name, .artist, .album { flex: 1; } @media screen , (max-width: 600px) { .inner-container { flex-direction: column; } .controls { align-self: center; } }
Comments
Post a Comment