Упорядочивайте элементы в столбцах по классам с помощью CSS-сетки

Я пытаюсь получить список div, упорядоченных по столбцам по его классу с сеткой css, но без JS.

Вот пример HTML:

<main>
<div class = "A">A_1</div>
<div class = "A">A_2</div>
<div class = "B">B_1</div>
<div class = "A">A_3</div>
<div class = "D">D_1</div>
<div class = "B">B_2</div>
<div class = "C">C_1</div>
<div class = "A">A_4</div>
<div class = "B">B_3</div>
<div class = "C">C_2</div>
<div class = "A">A_N</div>
<div class = "C">C_3</div>
<div class = "B">B_4</div>
<div class = "C">C_4</div>
<div class = "B">B_N</div>
<div class = "C">C_N</div>
<div class = "D">D_2</div>
<div class = "D">D_3</div>
<div class = "D">D_4</div>
<div class = "D">D_N</div>
</main>

И желаемый результат должен выглядеть так:

-------------------------
|  A  |  B  |  C  |  D  |
-------------------------
| A_1 | B_1 | C_1 | D_1 |
-------------------------
| A_2 | B_2 | C_2 | D_2 |
-------------------------
| A_3 | B_3 | C_3 | D_3 |
-------------------------
| A_4 | B_4 | C_4 | D_4 |
-------------------------
| A_N | B_N | C_N | D_N |
-------------------------

Есть ли способ сделать это? Я пробовал использовать grid-template-area, но либо мне нужно указывать один за другим, либо элементы в столбце накладываются друг на друга.

Если этого нельзя добиться с помощью сеток, как я могу это сделать?

Спасибо всем!

Css - это язык стилей, насколько мне известно, он не может сортировать - вы можете упорядочивать вещи предопределенным способом, но не сортировать

Pete 14.08.2018 17:36

вы можете только приблизиться к этому, используя хакерский CSS

Temani Afif 14.08.2018 17:42
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
2
296
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Визуально этим можно управлять с помощью свойства order, но оно не расширяемое или динамическое.

main {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(5, 2em); /* number of rows is required - so not dynamic */
  grid-auto-flow: column;
}

.A {
  order: 1;
}

.B {
  order: 2;
}

.C {
  order: 3;
}

.D {
  order: 4;
}
<main>
  <div class = "A">A_1</div>
  <div class = "A">A_2</div>
  <div class = "B">B_1</div>
  <div class = "A">A_3</div>
  <div class = "D">D_1</div>
  <div class = "B">B_2</div>
  <div class = "C">C_1</div>
  <div class = "A">A_4</div>
  <div class = "B">B_3</div>
  <div class = "C">C_2</div>
  <div class = "A">A_N</div>
  <div class = "C">C_3</div>
  <div class = "B">B_4</div>
  <div class = "C">C_4</div>
  <div class = "B">B_N</div>
  <div class = "C">C_N</div>
  <div class = "D">D_2</div>
  <div class = "D">D_3</div>
  <div class = "D">D_4</div>
  <div class = "D">D_N</div>
</main>

Если вы создаете свою сетку с помощью flexbox, и все элементы A, A_1, A_2, A_3 находятся в порядке, когда вы смотрите на них, поскольку они возвращаются таким образом (что означает, что вам не нужно сортировать их в их собственном классе), я считаю вы можете использовать свойство order для элементов. И вам нужно будет установить свойство flex-direction для родительского элемента на «столбец».

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

https://codepen.io/brianespinosa/pen/XBQyyE

Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее должен включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится.

Paulie_D 14.08.2018 17:59

Другие вопросы по теме