【问题标题】:unable to fit three images inside their grid container无法在其网格容器中容纳三个图像
【发布时间】:2021-10-01 12:09:14
【问题描述】:

我不知道如何解决这个问题:

.picture-container {
  position: absolute;
  top: 36%; 
  width: 90%;
  left: 5%;
  
  border: 5px dashed red;
}

.three-image-container {
  display: grid;
  grid-template-columns: auto auto auto;
  gap: 20px;
}

.img-frame-container {

}


.img-frame {
  border: 5px solid #e8e8e8;
  box-shadow: 1px 7px 20px 9px rgb(0 0 0 / 75%);
  border-radius: 5px;
  cursor: pointer;
  background: #dfe4ea;
  user-select: none;
  width: 250px;
  height: 150px;
}
<div class="scale-container">

<div class="picture-container">
  <div class="three-image-container">
    <div class="img-frame-container">
      <img class="img-frame" src="https://images.pexels.com/photos/4876243/pexels-photo-4876243.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
    </div>
    <div class="img-frame-container">
      <img class="img-frame" src="https://images.pexels.com/photos/9646282/pexels-photo-9646282.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
    </div>
    <div class="img-frame-container">
      <img class="img-frame" src="https://images.pexels.com/photos/1386454/pexels-photo-1386454.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
    </div>
  </div>
</div>

</div>

我希望所有这些图像及其框架具有与您在上面看到的完全相同的widthheight,但我希望它们适合picture-container 的宽度和高度。

现在使用固定尺寸,第三张图片超出了picture-container 的右边框。

如何将三个框架都放在容器中?

我认为使用这个:

display: grid;
grid-template-columns: auto auto auto;

会做我想做的事,但如果我在框架内使用图像似乎不起作用!

请注意,框架的大小应该相同,并且不超过容器大小,我希望能够拥有更多或更少的框架,因此我们可能需要某种最大宽度或其他东西。

【问题讨论】:

  • 您将图像宽度强制为 250 像素。在.img-frame 上添加max-width:100%gap 属性也应该是 grid-gap

标签: html css css-grid


【解决方案1】:

您将图像宽度强制为 250 像素。 我在.img-framebox-sizing: border-box 上添加了max-width:100%,以确保项目的宽度包括边框。

Read more on the box-sizing property

gap 属性也应该是grid-gap

.picture-container {
  position: absolute;
  top: 36%; 
  width: 90%;
  left: 5%;
  border: 5px dashed red;
}

.three-image-container {
  display: grid;
  grid-template-columns: auto auto auto;
  grid-gap: 20px; /* this was fixed */
}

.img-frame-container {

}


.img-frame {
  border: 5px solid #e8e8e8;
  box-shadow: 1px 7px 20px 9px rgb(0 0 0 / 75%);
  border-radius: 5px;
  cursor: pointer;
  background: #dfe4ea;
  user-select: none;
  width: 250px;
  height: 150px;
  /* these 2 lines were added */
  max-width: 100%; 
  box-sizing: border-box;
}
<div class="scale-container">

<div class="picture-container">
  <div class="three-image-container">
    <div class="img-frame-container">
      <img class="img-frame" src="https://images.pexels.com/photos/4876243/pexels-photo-4876243.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
    </div>
    <div class="img-frame-container">
      <img class="img-frame" src="https://images.pexels.com/photos/9646282/pexels-photo-9646282.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
    </div>
    <div class="img-frame-container">
      <img class="img-frame" src="https://images.pexels.com/photos/1386454/pexels-photo-1386454.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
    </div>
  </div>
</div>

</div>

【讨论】:

  • BRILIENT.......而且仍然很简单......
【解决方案2】:

displaygrid 更改为 flex 并使用宽度的相对值(%,值取决于容器或窗口大小)而不是绝对值(px,值不依赖于在容器或窗口大小上)。

使用*{box-sizing: border-box} 这样border padding 就不会占用额外空间,而是在size 等于screen width 时利用内容空间减少溢出

See here more about box-sizing

* {
  box-sizing: border-box
}

.picture-container {
  width: 100%;
  border: 5px dashed red;
}

.three-image-container {
  display: flex;
}

.img-frame-container {
  width: 100%;
  padding:0 10px;
}

.img-frame {
  border: 5px solid #e8e8e8;
  box-shadow: 1px 7px 20px 9px rgb(0 0 0 / 75%);
  border-radius: 5px;
  cursor: pointer;
  background: #dfe4ea;
  user-select: none;
  width: 100%;
  height: 150px;
  object-fit: fill;
}
<div class="scale-container">

  <div class="picture-container">
    <div class="three-image-container">
      <div class="img-frame-container">
        <img class="img-frame" src="https://images.pexels.com/photos/4876243/pexels-photo-4876243.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
      </div>
      <div class="img-frame-container">
        <img class="img-frame" src="https://images.pexels.com/photos/9646282/pexels-photo-9646282.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
      </div>
      <div class="img-frame-container">
        <img class="img-frame" src="https://images.pexels.com/photos/1386454/pexels-photo-1386454.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500">
      </div>
    </div>
  </div>

</div>

【讨论】:

  • % vs px 不是“软代码 vs 硬代码”。当某些东西被硬编码时,它使用的是绝对固定值而不是相对或动态值;在谈论 % 与 px 时,您应该使用该术语(相对与绝对)。
  • 感谢@TylerH ,将其更改为 relative/absolute 。什么时候使用硬代码和软代码
  • hard coded 表示这是一段以后无法更改的代码。 HTML 明智地限制了实际硬编码的内容。最接近它的是电子邮件模板。
  • @Rana 软代码根本不是一个术语;硬代码用于符合我在第一条评论中提到的上下文的情况(例如,当您手动编写一些代码或值而不是从某个源动态计算该值时)
【解决方案3】:

.picture-container 中删除width: 90%;

它使 div 占据了父级(它本身填充窗口)宽度的 90%,而不管它自己的内容如何。

【讨论】:

  • 在这种情况下不是问题。
  • 但我对其进行了测试并解决了问题。
  • 当你让屏幕宽度低于 750px 时会发生什么?这些图像的固定宽度为 250 像素;仅删除 90% 的宽度并不能解决问题
  • 首先问题不在于 3*250 可能超出某些屏幕宽度。这很明显,但 OP 没有提出来。他们询问了带有边界的容器溢出的图像。我假设如果他们为某些元素提供固定宽度,那可能很重要,我会尽量保留它。你假设它不重要。由于 OP 没有指定,它们都是有效的方法。 (实际上这个问题自从我第一次阅读以来已经被多次编辑。它仍然不是 100% 清楚,但最初比较模糊)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多