css - 不按所有列定义 Grid 的高度

标签 css css-grid

我创建了一个由 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),而只假定由其他内容确定的高度?

最佳答案

您应该只需要为图像添加一个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>

关于css - 不按所有列定义 Grid 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59766464/

相关文章:

html - 使用我的 CSS 选择器覆盖所有给定的 CSS 样式

css - 如何使用 CSS 制作文本并遵循图像大小

javascript - 提交表单时显示 ajax 加载程序图标

css - 网格列不起作用?

html - grid-template-areas 垂直分布一组文章

html - 只有一列滚动的网格布局

jquery - 如何修改 jQuery UI 自动完成组合框的布局

css - 手持设备上的屏幕宽度溢出

javascript - 使 CSS 网格或 Flex 元素大小相等,并在其之间拉伸(stretch)分隔符

html - 在创建特定的固定 CSS 网格布局方面寻求帮助