Если у вас есть переменная JS, заполненная предустановленным типом экрана, вы можете использовать ее в качестве имени класса, добавляемого к элементу <body>
, например:
document.body.classList.add(screenType);
И затемв своем CSS вы просто создаете модификаторы своих ранее существующих стилей, например .eg
.container {
// Default styles for desktop
}
.mobile .container,
.tablet .container {
// Modified styles for mobile/tablet
}
Кроме того, вам нужно будет использовать свойство order
в спецификации flexbox, чтобы вы могли повторно-организовать элементыПоявление.В вашем примере контейнер .big
большой на некоторых устройствах, но на самом деле он меньше других устройств.
См. Пример проверки концепции:
function setScreenType() {
var screenType = document.getElementById('screenType').value;
document.body.classList.remove('mobile', 'desktop', 'tablet');
document.body.classList.add(screenType);
}
setScreenType();
document.getElementById('screenType').addEventListener('change', function() {
setScreenType();
});
body {
margin: 0;
padding: 0;
}
.container {
display: flex;
flex-wrap: wrap;
flex-direction: row;
flex: 1 1 auto;
width: 100vw;
height: 100vh;
}
.content1 {
background-color: tomato;
width: 80%;
height: 100%;
order: 2;
}
.content2 {
background-color: green;
width: 20%;
height: 100%;
order: 1;
}
.mobile .container,
.tablet .container {
flex-direction: column;
}
.mobile .content1,
.tablet .content1 {
width: 100%;
height: 20%;
order: 1;
}
.mobile .content2,
.tablet .content2 {
width: 100%;
height: 80%;
order: 2;
}
<!-- This is just to simulate different screen types -->
<form>
<select id="screenType">
<option value="mobile" selected>Mobile</option>
<option value="tablet">Tablet</option>
<option value="desktop">Desktop</option>
</select>
</form>
<div class="container">
<div class="content1">content1</div>
<div class="content2">content2</div>
</div>