Как лучше сверстать такой макет?

Как лучше сверстать такой макет? Есть два вида макета - под монитор 1366 и 1920 (ну и дизайн резиновый, под другие тоже должно подстраиваться)

Проблема с блоком основного контента с акциями и товарами среди них. Т.е. я пока не могу понять как выстроить хтмл. Возможно ли без применения js плагинов?

1366

1920

в макете под 1920 блоков больше, так как в макете под 1366 просто предполагается что остальные блоки будут ниже по нарисованному принципу.


Ответы (1 шт):

Автор решения: Pavel Grishaev

Возможно без JS, сейчас для такого писать JS - это уже изврат. Проще всего это сделать на гридах. Можно прописать media-query для 1366, в котором грид меняет позиции ячеек, и они могут скрывать или переходить в другие места. Также можно делать на флексах, но тогда придётся морочиться. Пока не ясно как конкретно перестраиваются ваши блоки, поэтому пример написать не получится.

Вот пример, на 800px перестроение происходит:

<!DOCTYPE HTML>
<html>
<head></head>
<body>
	
	<div class="container">
		
		<div class="grid">
			<div class="block block-blue">Пример блока синий</div>
			<div class="block block-red">Пример блока красный</div>
			<div class="block block-green">Пример блока зеленый</div>
			<div class="block block-gray">Пример блока серый</div>
			<div class="block block-viol">Пример блока фиолетовый</div>
		</div>
		
	</div>

	<style type="text/css">
		
		html, body, .container {
			height: 100%;
		}
		
		body {
			margin: 0;
		}
		
		.container {
			box-sizing: border-box;
			padding: 30px;
			height: 100%;
		}
		
		.grid {
			height: 100%;
			display: grid;
			grid-template-columns: 1fr 1fr 1fr;
			grid-template-rows: 1fr 1fr 1fr;
			grid-column-gap: 30px;
			grid-row-gap: 30px;
		}
		
		.block {
			background-color: silver;
		}
		
		.block-blue {
			background-color: #00a6ff;
			grid-column: 1 / 3;
		}
		
		.block-red {
			background-color: #d2483b;
		}
		
		.block-green {
			background-color: #3c8e10;
			grid-column: 2 / 4;
			grid-row: 2 / 4;
		}
		
		.block-viol {
			background-color: mediumpurple;
		}
		
		@media screen and (max-width: 800px){
			
			.block-red {
				grid-column: 0 / 1;
				grid-row: 2 / 4;
			}
			
			.block-gray {
				display: none;
			}
			
		}
		
	</style>
	
</body>
</html>

→ Ссылка