Возможно ли создать этот «сложный» макет с помощью Flexbox без добавления контейнера div вокруг некоторых частей HTML-кода

#html #css

#HTML #css

Вопрос:

У меня простой вопрос. Возможно ли создать этот макет только с помощью Flexbox без добавления divs в мой HTML-код?

Мне удалось получить этот макет, сократив мою структуру HTML с помощью некоторых разделов (две части для правой и левой стороны и т. Д.), Но я застрял, когда попытался сделать это без добавления этих разделов.

Вот структура HTML, в которой я хотел бы разобраться!

         *{
    	padding:0;
    	margin:0;
    	box-sizing:border-box;
    }
    main {
    	height:100vh;
    	display:flex;
    	justify-content:center;
    	align-items:center;
    }
    section{
    	background-color:blue;
    	height:800px;
    	width:800px;
    }  
     <main>
	<section>
		<div class="box1"></div>
		<div class="box2"></div>
		<div class="box3"></div>
		<div class="box4"></div>
		<div class="box5"></div>
		<div class="box6"></div>
		<div class="box7"></div>
		<div class="box8"></div>
		<div class="box9"></div>
	</section>
</main>  

Комментарии:

1. Только с помощью flexbox без добавления каких-либо div это невозможно. Это может быть достигнуто с помощью сеток

2. @karthick. Спасибо за ваш ответ. Поэтому я перестаю пытаться сделать это таким образом ^^

3. Есть решение с использованием дополнительных div, которые вам могут не понравиться. Но для справки jsfiddle.net/sano6891/7z1r2054

Ответ №1:

Если вы хотите вместо этого взглянуть на css grid, вы можете попробовать что-то вроде этого: https://jsfiddle.net/6yturLg1 /

По сути, вы определяете сетку, затем размещаете элементы внутри сетки там, где хотите.

 html, body {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding:0px;
}
section {
  display: grid;
  grid-template-columns: 25% 25% 25% 25%;
  grid-template-rows: 25% 25% 25% 25%;
  width: 100%;
  height: 100%;
}

section div.box1 {
  background-color: #f00;
  grid-column-start: 1;
  grid-column-end: span 2;
  grid-row-start: 1;
  grid-row-end: span 2;
}

section div.box2 {
  background-color: #f90;
  grid-column-start: 1;
  grid-column-end: span 1;
  grid-row-start: 3;
  grid-row-end: span 1;
}

/* ... etc ... */
  

Комментарии:

1. Спасибо, но я стараюсь делать это с помощью flex. И это не квадрат, который делится на 4 части по 25%.

2. @WesK Вы можете настроить столбцы так, как вы хотите с точки зрения размера, я выбрал 4×25%, потому что это было проще и передало идею создания дополнительных подразделений. Вы всегда можете создать 8 или 12 строк вместо 4, если вам нужны дополнительные подразделения.

3. @WesK итак, элементы в вашем макете имеют динамическую высоту? тогда вам следует рассмотреть макет кладки — это невозможно с помощью flexbox