如何在网格内的 div 内缩放图像?

How can I scale an image inside a div which is inside a grid?

我正在使用网格布局。我使用 grid-template-columngrid-template-rows 来定义它的结构。我希望第一个单元格包含一个图像。因为我想将它水平居中,所以我的想法是将它放在一个 div 中,它本身可以是一个 flex 或 grid 容器。

我在缩放图像时遇到问题。当不使用 div 时,我基本上是将图像直接放在网格内,我可以使用 height: 100%; 并按比例缩小,以便高度适合单元格。

但是当使用一个额外的 div 容器时,它不再起作用了。使用 height: 100% 似乎是指整个网格布局的高度,而不仅仅是 div。 Google 说我应该使用 max-heightmax-width,但我无法让它工作。下面是一个简单的测试项目(HTML 和 CSS)来显示问题。当使用 width: 25px; 你可以看到,网格的部分应该有多大。

感谢任何帮助。请记住,这是一个简单的测试项目,所以不要介意我的 类 和 ID 的命名。

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body,
html {
  height: 100%;
}

.class {
  background-color: blue;
}

.container {
  height: 100vh;
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr 3fr 3fr;
  gap: 10px;
  background-color: green;
}

#image-container>img {
  max-height: 100%;
}
<div class="container">
  <div class="class" id="image-container">
    <img src="https://www.industrialempathy.com/img/remote/ZiClJf-1920w.jpg" alt="">
  </div>
  <div class="class" id="2">Good</div>
  <div class="class" id="3">Day</div>
</div>

我的首选方法是将其设置为背景图像,并带有 background-size:contain(或封面)。这应用了来自浏览器的逻辑,而不是试图自己正确处理并且完全响应。

.exampleA, .exampleB{
    width: 34%;
    height: 150px;
    background-position: center;
    background-repeat: no-repeat;
    background-color: pink;  /* Just for this demo:  to display canvas size */
    border: 1px solid black; /* Just for this demo */
    display: inline-block;
}

.exampleA {
    background-size: contain;
}
.exampleB {
    background-size: cover;
}
<div class="exampleA"
     style="background-image: url('https://www.industrialempathy.com/img/remote/ZiClJf-1920w.jpg');"
></div>
        
<div class="exampleB"
      style="background-image: url('https://www.industrialempathy.com/img/remote/ZiClJf-1920w.jpg');"
></div>

检查子元素 class 和父元素 max-height 的溢出以获得预期结果。

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body,
html {
  min-height: 100%;
}

.parent {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr repeat(2, 3fr);
  gap: 1rem;
  background: orchid;
  max-width: 100%;
  max-height: 100vh;
}
.class{
  background: teal;
  overflow: hidden;
}

img{
  display:block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
<div class="parent">
  <div class="class">
    <img src="https://www.industrialempathy.com/img/remote/ZiClJf-1920w.jpg" alt="">
  </div>
  <div class="class">
    <p>Good</p>
  </div>
  <div class="class">
    <p>Day</p>
  </div>
</div>