Определить высоту сетки не по всем столбцам - PullRequest
0 голосов
/ 16 января 2020

Я создал сетку, состоящую из 3 столбцов и 4 строк. Последний столбец полностью покрыт изображением (».box-image«, а не фоновым изображением), поэтому это изображение и столбец, в котором оно находится, не должны увеличивать высоту других столбцов.

.grid{
    display: grid;
    grid-template-columns: 25% 25% 1fr;
    grid-template-rows: auto 1fr 1fr 50px;
}
.grid .box-image{
    grid-column: 3;
    grid-row: 1 / 5;
}

.grid .box-image img{
    object-fit: cover;
    width: 100%;
    height: 100%;
}

Как определить, что .box-image не увеличивает высоту сетки (1fr 1fr), а только принимает высоту, определяемую другим содержимым?

1 Ответ

0 голосов
/ 16 января 2020

Вам нужно всего лишь добавить max-height к изображению. Смотрите 2 примера ниже, которые имеют различную высоту строки. В обоих случаях изображение заполняет высоту, основываясь на высоте других строк.

.grid{
    display: grid;
    grid-template-columns: repeat(2, 25%) 4fr;
    grid-template-rows: auto 1fr 1fr 50px;
}

.grid > div {
  background-color: lightgray;
  border: 1px solid gray;
}

.grid .box-image {
    grid-column: 3;
    grid-row: 1 / 5;
}

.grid .box-image img {
    object-fit: cover;
    width: 100%;
    max-height: 100%;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div class="box-image">
    <img src="https://via.placeholder.com/200">
  </div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
  <div>9</div>
</div>

С изображением 1000x1000 пикселей:

.grid{
    display: grid;
    grid-template-columns: repeat(2, 25%) 4fr;
    grid-template-rows: auto 1fr 1fr 50px;
}

.grid > div {
  background-color: lightgray;
  border: 1px solid gray;
}

.grid .box-image {
    grid-column: 3;
    grid-row: 1 / 5;
}

.grid .box-image img {
    object-fit: cover;
    width: 100%;
    max-height: 100%;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div class="box-image">
    <img src="https://via.placeholder.com/1000">
  </div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
  <div>9</div>
</div>

Без изображения:

.grid{
    display: grid;
    grid-template-columns: repeat(2, 25%) 4fr;
    grid-template-rows: auto 1fr 1fr 50px;
}

.grid > div {
  background-color: lightgray;
  border: 1px solid gray;
}

.grid .box-image {
    grid-column: 3;
    grid-row: 1 / 5;
}

.grid .box-image img {
    object-fit: cover;
    width: 100%;
    max-height: 100%;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div class="box-image"></div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
  <div>9</div>
</div>
...