Да. Во-первых, вы можете поместить все div
внутри одного контейнера:
<div id="flex-container">
<div id='div1'></div>
<div id='div2'></div>
<div id='div3'></div>
<div id='div4'></div>
</div>
Затем в контейнере вы устанавливаете flex-direction: column
и flex-wrap: wrap
. Вы ставите width
50%
, если хотите половину экрана и 100%
полный экран. Настройка flex-wrap организует элементы так, как и должно быть.
В мобильном @media вы меняете flex-direction
на row
и width
каждого div
в соответствии с желаемой раскладкой.
Было бы так:
#div1 {
background-color: red;
height: 100%;
width: 50%;
}
#div2 {
background-color: green;
height: 100px; // or 33.333%
width: 50%;
}
#div3 {
background-color: orange;
width: 50%;
height: 100px; // or 33.333%
}
#div4 {
background-color: blue;
width: 50%;
height: 100px; // or 33.333%
}
#flex-container {
display: flex;
flex-direction: column;
flex-wrap: wrap;
height: 300px;
}
@media (max-width: 480px) { // screen width you prefer
#flex-container {
display: flex;
flex-direction: row;
}
#div1 {
width: 50%;
height: 100px;
}
#div2 {
width: 50%;
}
#div3 {
width: 100%;
}
#div4 {
width: 100%;
}
}
Надеюсь, это поможет.
Вы можете даже упростить CSS, используя классы для повторяющихся свойств.