【问题标题】:aspect-ratio with dynamic width and height, similar to object-fit contain具有动态宽度和高度的纵横比,类似于 object-fit 包含
【发布时间】:2022-02-12 19:18:26
【问题描述】:

我有一个容器元素(屏幕截图上的巧克力色),它包含一个 3x2 的瓷砖网格。瓷砖包含具有 16/9 分辨率图像和一些页眉和页脚的图像元素。瓷砖的跨度可以是 1-3,中间有 4px 的间隙。 图像设置为 object-fit:contain,容器元素(屏幕截图上的巧克力色)占用父级(灰色)的 100% 宽度和高度,这导致图像平铺比例与图像比例不匹配,并且图像周围有条(图片上的蓝色水色)。 我需要缩放容器元素(巧克力色),所以它的内容会得到这样的尺寸,图像元素会完全适合。

这里是堆栈闪电战。我尝试使用图像父级的纵横比,它适用于中等大小的分辨率,但不适用于小或大,然后图像再次获得水色条。

为简化起见,stackblitz 仅包含一个图像元素图块,它应该完全适合巧克力元素。您可以忽略图像内部的网格。

https://stackblitz.com/edit/angular-ivy-xu92pf?file=src/app/app.component.css

当前(巧克力容器从父容器中获取 100% 的宽度和高度):

预期(巧克力容器具有宽高比,因此其图像内容 16/9 将完美契合。在现实世界中,图像内容将没有固定的宽高比):

【问题讨论】:

  • 你试过什么?你能创建一个代码 sn-p 吗?
  • 我添加了带有纵横比 css 属性的 stackblitz,我已经尝试过了,它以某种方式工作,但不是在所有分辨率下。
  • 我得到了你的代码,你能提供一张图片或其他东西来显示你的预期结果吗?你的问题太多了,我现在很困惑。
  • 我更改了描述,并添加了预期结果

标签: css aspect-ratio object-fit


【解决方案1】:

这是您的预期吗?关键是使用align-items: flex-start; 使.image-container 浮动在其.parent 的顶部。

.parent {
  display: flex;
  align-items: flex-start; /* Keep the child element float to the top */
  width: 330px;
  min-height: 250px;
  background-color: grey;
  padding: 8px;
}

.image-container {
  background-color: chocolate;
  /*aspect-ratio: 16/10, 5;*/
  /*this will be custom calculated from the content of image-container*/
  width: 100%;
  padding: 5px;
}

img {
  height: 100%;
  width: 100%;
  background-color: aqua;
  object-fit: contain;
  display: block; /* to make the image fill up its parent element */
}
<p>#1</p>
<div class="parent">
  <div class="image-container">
    <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/14179/image.png" />
  </div>
</div>

<p>#2</p>

<div class="parent">
  <div class="image-container">
    <img src="https://picsum.photos/200/80" />
  </div>
</div>

<p>#3</p>

<div class="parent">
  <div class="image-container">
    <img src="https://picsum.photos/200/300" />
  </div>
</div>

【讨论】:

  • 谢谢。结果是我所期望的,但不适用于我的模板。我仍然需要同时设置 w+h 或 w | h + 模板中的纵横比(对于容器),否则容器的内容为 0 w | h,并且不可见。如果我设置 w | h 或纵横比,您建议的 flex 不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
相关资源
最近更新 更多