Css grid, большой размер на некоторых картах, как их разместить вот так - PullRequest
0 голосов
/ 02 ноября 2018

Я использую сетку для этого макета, и я на полпути. Как вы можете видеть, номер 10,20,30,40,50 размещается на том же месте (я размещаю их там). Я хотел бы, чтобы мой макет от 1 до 10

  • Большой слева (1,11,21,31,41 ...), 4 маленьких справа
  • Большой справа (10,20,30,40 ...), 4 маленьких слева

ПРИМЕЧАНИЕ. Этот список может содержать от 40 до 100 элементов, поэтому использование фиксированных позиций для его размещения не будет возможным. Кроме того, создание большого числа 6 и изменение порядка также не работает из-за сортировки.

Надеюсь, понятно, что я здесь пытаюсь сделать.

.layout-scale {
  display: grid;
  grid-template-columns: repeat(4, 25%);
  grid-gap: 1rem;
}

.layout-scale__items {
  background-color: aqua;
  min-height: 10rem;
}

.layout-scale__items:nth-child(10n + 1) {
  background-color: deeppink;
  grid-column: span 2;
  grid-row: span 2;
}

.layout-scale__items:nth-child(10n + 10) {
  background-color: lime;
  grid-column: 3 / span 2;
  grid-row: 3 / span 2;
}
<div class="layout-scale">
  <div class="layout-scale__items">1</div>
  <div class="layout-scale__items">2</div>
  <div class="layout-scale__items">3</div>
  <div class="layout-scale__items">4</div>
  <div class="layout-scale__items">5</div>
  <div class="layout-scale__items">6</div>
  <div class="layout-scale__items">7</div>
  <div class="layout-scale__items">8</div>
  <div class="layout-scale__items">9</div>
  <div class="layout-scale__items">10</div>
  <div class="layout-scale__items">11</div>
  <div class="layout-scale__items">12</div>
  <div class="layout-scale__items">13</div>
  <div class="layout-scale__items">14</div>
  <div class="layout-scale__items">15</div>
  <div class="layout-scale__items">16</div>
  <div class="layout-scale__items">17</div>
  <div class="layout-scale__items">18</div>
  <div class="layout-scale__items">19</div>
  <div class="layout-scale__items">20</div>
  <div class="layout-scale__items">21</div>
  <div class="layout-scale__items">22</div>
  <div class="layout-scale__items">23</div>
  <div class="layout-scale__items">24</div>
  <div class="layout-scale__items">25</div>
  <div class="layout-scale__items">26</div>
  <div class="layout-scale__items">27</div>
  <div class="layout-scale__items">28</div>
  <div class="layout-scale__items">29</div>
  <div class="layout-scale__items">30</div>
  <div class="layout-scale__items">31</div>
  <div class="layout-scale__items">32</div>
  <div class="layout-scale__items">33</div>
  <div class="layout-scale__items">34</div>
  <div class="layout-scale__items">35</div>
  <div class="layout-scale__items">36</div>
  <div class="layout-scale__items">37</div>
  <div class="layout-scale__items">38</div>
  <div class="layout-scale__items">39</div>
  <div class="layout-scale__items">40</div>
  <div class="layout-scale__items">41</div>
  <div class="layout-scale__items">42</div>
  <div class="layout-scale__items">43</div>
  <div class="layout-scale__items">44</div>
  <div class="layout-scale__items">45</div>
  <div class="layout-scale__items">46</div>
  <div class="layout-scale__items">47</div>
  <div class="layout-scale__items">48</div>
  <div class="layout-scale__items">49</div>
  <div class="layout-scale__items">50</div>
</div>

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Я приземлился в решении этой проблемы с «фиксированной» позицией на grid-row. У меня есть цикл в Scss, который генерирует его для :nth-child(). 10 дополнительных классов стоят того по сравнению с дополнительной разметкой и css, чтобы решить ее с помощью «строки» начальной загрузки, если вы захотите, и еще больше css для того, что в конечном итоге могло бы стать запасным решением. Для моего варианта использования это будет не более 100 наименований. Если в вашем случае используется более 100 наименований, просто измените время цикла.

$increment: 3;

// change the 10 to your wanted amount
@for $i from 1 through 10 {

    .layout-scale__items:nth-child(#{$i*10}) {
        grid-row: #{$increment} / span 2;
    }

    $increment: $increment + 4;
}

Мое полное решение на jsfiddle (из-за внутреннего редактора кода не поддерживает scss)

<div class="layout-scale">
    <div class="layout-scale__items">1</div>
    <div class="layout-scale__items">2</div>
    <div class="layout-scale__items">3</div>
    <div class="layout-scale__items">4</div>
    <div class="layout-scale__items">5</div>
    <div class="layout-scale__items">6</div>
    <div class="layout-scale__items">7</div>
    <div class="layout-scale__items">8</div>
    <div class="layout-scale__items">9</div>
    <div class="layout-scale__items">10</div>
    <div class="layout-scale__items">11</div>
    ...
</div>


.layout-scale {
    display: grid;
    grid-template-columns: repeat(4, 25%);
    grid-gap: 1rem;
}

.layout-scale__items {
    background-color: aqua;
    min-height: 10rem;
}

.layout-scale__items:nth-child(10n + 1) {
    background-color: deeppink;
    grid-column: span 2;
    grid-row: span 2;
}

.layout-scale__items:nth-child(10n + 10) {
    background-color: lime;
    grid-column: 3 / span 2;
}

$increment: 3;
@for $i from 1 through 10 {
    .layout-scale__items:nth-child(#{$i*10}) {
        grid-row: #{$increment} / span 2;
    }
    $increment: $increment + 4;
}
0 голосов
/ 02 ноября 2018

Все зеленые поля начинаются с 3-го ряда (grid-row: 3 / span 2), поэтому они находятся в одном месте. Кроме того, если я поняла закономерность, вы должны использовать индексы 1,11,21, .. и индексы 8,18,28, ...

Попробуйте это:

.layout-scale {
  display: grid;
  grid-template-columns: repeat(4, 25%);
  grid-gap: 1rem;
}
.layout-scale__items {
  background-color: aqua;
  min-height: 10rem;
}
.layout-scale__items:nth-child(10n + 1) {
  background-color: deeppink;
  grid-column: span 2;
  grid-row: span 2;
}
.layout-scale__items:nth-child(10n + 8) {
  background-color: lime;
  grid-column: span 2;
  grid-row: span 2;
}
...