I would like to achieve something that renders like this depending on the screen size:
+---------------------------+
| A | B | C |
+---------------------------+
+---------------+
| A | C |
| B |
+---------------+
if all size are fixed, i can manage using the flex order
property
but the size of my C container is not fixed and so I can't use a static media query.
Is there a way to achieve this?
Edit:
I managed a good enough approximation: In a media query selecting all screens that might need wrapping, I change the order
of the B container to something big, and at the same time, I set its min-width
to 100% which forces the wrap.
Flex items are displayed in the same order as they appear in the source document by default. The order property can be used to change this ordering.
Making things wrap If you want to cause them to wrap once they become too wide you must add the flex-wrap property with a value of wrap , or use the shorthand flex-flow with values of row wrap or column wrap . Items will then wrap in the container.
default flex-direction: row; The flexbox items are ordered the same way as the text direction, along the main axis. flex-direction: row-reverse; The flexbox items are ordered the opposite way as the text direction, along the main axis.
You can make b
element full width with flex: 0 0 100%
and change order to order: 2
with media queries DEMO
* {
box-sizing: border-box;
}
body, html {
margin: 0;
padding: 0;
}
.content {
display: flex;
flex-wrap: wrap;
}
.b {
background: lightblue;
}
.a, .b, .c {
border: 1px solid black;
flex: 1;
padding: 10px;
}
@media(max-width: 768px) {
.b {
flex: 0 0 100%;
order: 2;
}
}
<div class="content">
<div class="a">A</div>
<div class="b">B</div>
<div class="c">C</div>
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With