Равномерно распределенные столбцы между строками с использованием сетки / гибкого трубопровода
Рассмотрим следующий фрагмент:
#container{
border: solid 1px black;
display: inline-grid;
grid-template-columns: repeat(3, auto);
}
<div id="container">
<div class="row">
<div class="item">A1111</div>
<div class="item">B1</div>
<div class="item">C1</div>
</div>
<div class="row">
<div class="item">A2</div>
<div class="item">B2222</div>
<div class="item">C2</div>
</div>
<div class="row">
<div class="item">A3</div>
<div class="item">B3</div>
<div class="item">C3333</div>
</div>
</div>
Конечным результатом является табличное отображение, где каждый элемент каждой строки равен ширине самого широкого элемента в этом столбце.
A1111 A2 A3
B1 B2222 B3
C1 C2 C3333
Что замечательно-но мне нужна таблица, выложенная в виде строк...
A1111 B1 C1
A2 B2222 C2
A3 B3 C3333
display: table
решает это-но таблица имеет некоторые недостатки вокруг интервалов, выравниваний и так далее. Поэтому сетка и флекс выглядят привлекательно.
Увы, я не могу понять, как получить информацию, изложенную как и хотелось.
Добавление display: grid
к .row
помогает упорядочить информацию, но не сохраняет равные ширины столбцов.
Содержимое элемента будет изменяться, и поэтому нельзя использовать фиксированную ширину, и не желательно, чтобы сетка/flex охватывала всю страницу/содержащую ширину.
3 ответа:
Вы можете определить, какой столбец должен быть элементом сетки, используя grid-column. Это означает, что строка не требует содержащей строки div.
Рабочий пример...
#container{ border: solid 1px black; display: inline-grid; grid-auto-flow: row; grid-gap: 10px; padding: 10px; } .col1{ grid-column: 1; } .col2{ grid-column: 2; } .col3{ grid-column: 3; }
<div id="container"> <div class="col1">A11111</div> <div class="col2">B1</div> <div class="col3">C1</div> <div class="col1">A2</div> <div class="col2">B2222222</div> <div class="col3">C2</div> <div class="col1">A3</div> <div class="col2">B3</div> <div class="col3">C33333333</div> </div> </div>
Ваша главная проблема заключается в том, что разметка слишком глубока. У вас есть табличная разметка, глубиной в три уровня: таблица, строки и ячейки. Для компоновки сетки вам вообще не нужны элементы "строки".
Когда вы используете
Вы также сказали, что вам нужны столбцы одинаковой ширины. Для этого вам следует: используйте единицуdisplay: grid
илиdisplay: inline-grid
на элементе, он делает этот элемент сеточным контейнером. Затем каждый из его дочерних элементов становитсяэлементами сетки . Элементы сетки будут расположены в сетке, определенной их контейнером.fr
вместоauto
для размеров столбцов:grid-template-columns: repeat(3, 1fr);
... это сделает каждый столбец шириной в одну единицу "дроби".
#container{ border: solid 1px black; display: inline-grid; grid-template-columns: repeat(3, 1fr); }
<div id="container"> <div class="item">A1111</div> <div class="item">B1</div> <div class="item">C1</div> <div class="item">A2</div> <div class="item">B2222</div> <div class="item">C2</div> <div class="item">A3</div> <div class="item">B3</div> <div class="item">C3333</div> </div>
Есть способ, которым я бы это сделал.
Прикрепленный JSFiddle (щелчок)
.row { display: flex; flex-flow: row nowrap; justify-content: space-between; } .row > .item { display:block; flex: 1 1; border: 1px solid #000; }
Есть такое замечательное руководство
flex
; Нажмите здесь.