Ответ 1
Flexbox Задача и ограничение
Задача состоит в том, чтобы центрировать группу элементов гибкости и выровнять по левому краю их на обертке. Но если в строке нет фиксированного количества ящиков, и каждый ящик имеет фиксированную ширину, в настоящее время это невозможно с помощью flexbox.
Используя код, отправленный в вопросе, мы можем создать новый контейнер flex, который обертывает текущий контейнер flex (ul
), который позволит нам центрировать ul
с помощью justify-content: center
.
Затем элементы гибкости ul
можно выровнять по левому краю с помощью justify-content: flex-start
.
#container {
display: flex;
justify-content: center;
}
ul {
display: flex;
justify-content: flex-start;
}
Это создает центрированную группу выровненных по левому краю элементов.
Проблема с этим методом заключается в том, что при определенных размерах экрана будет справа пробел ul
, что делает его больше не центрированным.
Это происходит потому, что в гибком макете (и, вообще говоря, в CSS) контейнер:
- не знает, когда обтекает элемент;
- не знает, что ранее занятое пространство теперь пусто, а
- не пересчитывает свою ширину для сжатия более узкого макета.
Максимальная длина пробела справа - это длина элемента гибкости, который должен был находиться в контейнере.
В следующей демонстрационной версии, изменив размер окна по горизонтали, вы увидите, что пробелы приходят и уходят.
Более практичный подход
Желаемый макет может быть достигнут без flexbox с помощью inline-block
и медиа-запросов.
HTML
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
CSS
ul {
margin: 0 auto; /* center container */
width: 1200px;
padding-left: 0; /* remove list padding */
font-size: 0; /* remove inline-block white space;
see https://stackoverflow.com/a/32801275/3597276 */
}
li {
display: inline-block;
font-size: 18px; /* restore font size removed in container */
list-style-type: none;
width: 150px;
height: 50px;
line-height: 50px;
margin: 15px 25px;
box-sizing: border-box;
text-align: center;
}
@media screen and (max-width: 430px) { ul { width: 200px; } }
@media screen and (min-width: 431px) and (max-width: 630px) { ul { width: 400px; } }
@media screen and (min-width: 631px) and (max-width: 830px) { ul { width:600px; } }
@media screen and (min-width: 831px) and (max-width: 1030px) { ul { width: 800px; } }
@media screen and (min-width: 1031px) and (max-width: 1230px) { ul { width: 1000px; } }
Приведенный выше код отображает контейнер с горизонтальной ориентацией с выровненными по левому краю дочерними элементами:
Другие параметры
-
Правильная настройка и выравнивание элементов (-ов) в последней строке
-
Масонство - это библиотека компоновки сетки JavaScript. Это работает путем размещения элементов в оптимальном положении на основе доступных вертикальное пространство, вроде как каменщик, монтирующий камни в стене. Youve вероятно, видел его в использовании по всему Интернету.
source: http://masonry.desandro.com/
-
Модуль компоновки сетки CSS Уровень 1
Этот CSS-модуль определяет двумерную систему компоновки на основе сетки, оптимизированную для дизайна пользовательского интерфейса. В модели макета сетки дети контейнера сетки могут быть помещены в произвольные слоты в предопределенной гибкой или фиксированной сетке макета.