Правильная сетка CSS

399
19 января 2017, 02:42

Нужно сделать правильную сетку с помощью CSS и желательно Flexbox. Вот так у меня выглядит сейчас...

Что тут не так:

  1. Нижняя часть сетки не прижата к левому краю.

  2. Не изменяется расстояние между элементами.

Единственное, что тут правильно более менее, это то, что сетка размещается по центру блока. Но тут тоже свой подвох, нужно чтобы максимальная ширина левого и правого расстояния были 30-40px, а далее уже менялось расстояние между самими элементами сетки. Прошу помочь, а то уже куча вариантов попробовал.

Высота и ширина элемента сетки 100px и отступ 2px, максимальный отступ слева и справа от блока с сеткой элементов — 35px.

Answer 1

Вам надо использовать display: inline-block для элементов и для контейнера присвоить text-align: justify;. Минимальное расстояние реализуется через padding:

.container { 
  padding: 2px; 
  border: 3px solid #464646; 
  background-color: #000; 
  padding-left: 35px; 
  padding-right: 35px; 
  text-align: justify; 
} 
 
.container__item { 
  display: inline-block; 
  width: 100px; 
  height: 100px; 
  margin: 2px; 
  background-color: #464646; 
}
<div class="container"> 
  <div class="container__item"></div> 
  <div class="container__item"></div> 
  <div class="container__item"></div> 
  <div class="container__item"></div> 
  <div class="container__item"></div> 
</div>

Затем для последней строчки рассчитывайте отступы с помощью JavaScript при resize.

UPDATE

Для того, чтобы не было отступов между элементами и в последней строке элементы выравнивались по левому краю оберните блок ещё одним:

.container { 
  padding: 2px; 
  border: 3px solid #464646; 
  background-color: #000; 
  padding-left: 35px; 
  padding-right: 35px; 
  display: flex; 
  justify-content: center; 
} 
 
.wrapper-center { 
   display: flex; 
   flex-wrap: wrap; 
} 
 
.container__item { 
  display: inline-block; 
  width: 100px; 
  height: 100px; 
  margin: 2px; 
  background-color: #464646; 
}
<div class="container"> 
  <div class="wrapper-center"> 
    <div class="container__item"></div> 
    <div class="container__item"></div> 
    <div class="container__item"></div> 
    <div class="container__item"></div> 
    <div class="container__item"></div> 
  </div> 
</div>

Answer 2

Если я вас правильно понял, то всё решается таким способом

.flexbox { 
  display: flex; 
  width: 312px; 
  max-width: 370px; 
  padding: 2px; 
  border: 3px solid #464646; 
  background-color: black; 
  flex-wrap: wrap; 
  justify-content: space-between; 
  resize: both; 
  overflow: auto;  
} 
.flexbox__item { 
  display: block; 
  width: 100px; 
  height: 100px; 
  margin: 2px; 
  background-color: #464646; 
} 
 
/* Если блоков в конце 2 */ 
.flexbox__item:nth-child(3n+2):last-child { 
  margin-right: calc(100% - 200px - ((100% - 300px) / 2)); 
} 
/* Суть вычислений: от всей ширины отнимаем (количество блоков в конце умножить на ширину одного блока) и отнимаем (от общей ширины отнимает (максимальное количество блоков в конце умноженное на их ширину) и потом делим на колечество блоков размещённых в конце) */
<div class="flexbox"> 
  <div class="flexbox__item"></div> 
  <div class="flexbox__item"></div> 
  <div class="flexbox__item"></div> 
  <div class="flexbox__item"></div> 
  <div class="flexbox__item"></div> 
</div>

К сожалению для space-around не знаю как сделать, так как не знаю, как высчитать размеры отступом по бокам

READ ALSO
Как поставить на кнопку запуск файла .html [требует правки]

Как поставить на кнопку запуск файла .html [требует правки]

Понимаю, что это азы и должно быть очень простоПодскажите, как через кнопку в

404
Кнопка которая задает массив

Кнопка которая задает массив

Создал функцию которая создает таблицу и передал ей массив , далее создал 2 инпута и кнопкуКак же задать массив написав его значения инпута...

466
Свернуть окно с помощью JQ вниз

Свернуть окно с помощью JQ вниз

ПриветПодскажите есть ли функция которая скрывает блок вниз-направо и открывает вверх-налево? Если нет, то как можно реализовать? Мне нужно...

425