автоматические столбцы сетки: 50px 50px 20px; без шаблона или сетки - PullRequest
2 голосов
/ 30 апреля 2019

Для меня очень нелогично, что как только я удаляю grid-area, grid-auto-columns: 50px 50px 20px; не делит контейнер на 3 столбца 50px 50px 20px. Вы должны ввести grid-area, прежде чем получите 3 столбца. Без тебя не получится ни одного столбца. Это почему? Почему они спроектировали это так?

.container {
  display: grid;
  grid-auto-rows: 20px 50px;
  grid-auto-columns: 50px 50px 20px;
  grid-row-gap: 5px;
  grid-column-gap: 5px;
}

div {
  margin: 0;
  padding: 0;
  border: 1px solid black;
}

.area {
  grid-area: 1/1/1/4;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div class="area">5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>

.container {
  display: grid;
  grid-auto-rows: 20px 50px;
  grid-auto-columns: 50px 50px 20px;
  grid-row-gap: 5px;
  grid-column-gap: 5px;
}

div {
  margin: 0;
  padding: 0;
  border: 1px solid black;
}

.area {
  grid-area: 1/1/1/4;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>

1 Ответ

2 голосов
/ 30 апреля 2019

Это потому, что поток по умолчанию равен row и не определено ни явных столбцов, ни неявных , поэтому у вас будет один столбец и столько же строккак элементы.

Вы можете достичь желаемого, установив grid-template-columns вместо grid-auto-columns, который будет явно определять столбцы (3 в вашем случае).

.container {
  display: grid;
  grid-auto-rows: 20px 50px;
  grid-template-columns: 50px 50px 20px;
  grid-row-gap: 5px;
  grid-column-gap: 5px;
}

div {
  margin: 0;
  padding: 0;
  border: 1px solid black;
}

.area {
  grid-area: 1/1/1/4;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>

И если вы измените поток на столбец, у вас будет это:

.container {
  display: grid;
  grid-auto-rows: 20px 50px;
  grid-auto-columns: 50px 50px 20px;
  grid-auto-flow:column;
  grid-row-gap: 5px;
  grid-column-gap: 5px;
}

div {
  margin: 0;
  padding: 0;
  border: 1px solid black;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>

Вы заметите аналогичную проблему для направления строки (без явных / неявных строк = 1 строка и n столбцов), которую вы можете исправить с grid-template-rows, который будет явно указывать строки:

.container {
  display: grid;
  grid-template-rows: 20px 50px;
  grid-auto-columns: 50px 50px 20px;
  grid-auto-flow:column;
  grid-row-gap: 5px;
  grid-column-gap: 5px;
}

div {
  margin: 0;
  padding: 0;
  border: 1px solid black;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>

Свойство CSS grid-auto-columns определяет размер неявно созданной дорожки столбца сетки .

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

Как вы можете прочитать, grid-auto-columns используется только тогда, когда существует неявная сеточная дорожка, созданная вручную , помещаяэлементы (как вы сделали) или путем изменения алгоритма автоматического размещения (как я сделал).Та же логика имеет место для направления строки, но поскольку поток по умолчанию row, он более интуитивно понятен.

В основном grid-auto-[rows|columns] полезны для обеспечения того, что создаваемая дополнительная (неявная) строка / столбец будет следовать определенному шаблону.

Пример с потоком строк:

.container {
  display: grid;
  /*our explicit grid 4x4 */
  grid-template-rows: 100px 100px;
  grid-template-columns: 100px 100px;
  /**/
  grid-auto-columns: 20px; /*extra columns will have 20px*/
  grid-auto-rows: 40px; /*extra rows will have 40px*/
  grid-row-gap: 5px;
  grid-column-gap: 5px;
}

div {
  margin: 0;
  padding: 0;
  border: 1px solid black;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div style="grid-column:3">I am creating an implicit column</div>
  <div>7</div>
  <div>8</div>
</div>

и с потоком колонны:

.container {
  display: grid;
  /*our explicit grid 4x4 */
  grid-template-rows: 100px 100px;
  grid-template-columns: 100px 100px;
  /**/
  grid-auto-columns: 20px; /*extra columns will have 20px*/
  grid-auto-rows: 40px; /*extra rows will have 40px*/
  grid-auto-flow:column;
  grid-row-gap: 5px;
  grid-column-gap: 5px;
}

div {
  margin: 0;
  padding: 0;
  border: 1px solid black;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div style="grid-row:3">I am creating an implicit row</div>
  <div>7</div>
  <div>8</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...