В приведенном ниже примере я хочу, чтобы все элементы имели ширину наибольшего содержимого (например, элемент 5 ) .
Количество элементов в списке является динамическим, и может быть сто
из них.
Ширина содержимого каждого элемента также является динамической.
Количество элементов в каждой строке будет варьироваться в зависимости от ширины
контейнер.
желаемый выход
Примечание: Медиа-запросы не будут работать для моего сценария.
ИСПОЛЬЗОВАНИЕ CSS FLEX
Flex
считается одномерным . Это означает, что он может достичь желаемого результата на одной оси (строке), если содержимое не меньше доступного пространства.
Пример без упаковки (одна строка)
.container {
display: flex;
}
.item {
background: #58c;
text-align: center;
white-space: nowrap;
margin: 0 10px 10px 0;
flex: 1;
}
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5 is longer</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
</div>
Атрибут Flex flex-wrap
можно использовать для создания двумерного макета. Опять же, это хорошо работает, но для расчета ширины каждого элемента требуется фиксированная ширина .
Пример упаковки (несколько строк)
.container {
display: flex;
flex-wrap:wrap;
}
.item {
background: #58c;
text-align: center;
white-space: nowrap;
margin: 0 10px 10px 0;
flex: 0 1 100px;
}
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5 is longer</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<div class="item">10</div>
</div>
С ИСПОЛЬЗОВАНИЕМ CSS GRID
Для двумерного дизайна рекомендуется CSS Grid , но в приведенном ниже примере используется фиксированная ширина. Похоже, min-content
здесь нужно учитывать, но как?
Неудачный пример
grid-template-columns: repeat(auto-fit, min-content);
ФИКСИРОВАННЫЙ ПРИМЕР (несколько строк)
.container {
display: grid;
grid-template-columns: repeat(auto-fit, 100px);
grid-auto-rows: 20px;
grid-gap: 5px;
}
.item {
background: #58c;
text-align: center;
white-space: nowrap;
}
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5 is longer</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<div class="item">10</div>
</div>
Я не думаю, что это возможно с сеткой из-за следующего примечания W3C :
«Автоматическое повторение (автозаполнение или автоподгонка) нельзя сочетать с
внутренние или гибкие размеры. "
Основная информация
По сути, я думаю, что нет никакого способа сделать это с помощью CSS.
Чтобы получить ширину каждого элемента, оно должно быть:
- предопределено (исправлено).
- выводится по горизонтали с использованием процента или доли.
- выводится вертикально из текущего столбца.
Не вижу способа вывести ширину элементов из другой строки И столбца одновременно.