在全屏图像轮播中拟合纵向和横向图像

Posted

技术标签:

【中文标题】在全屏图像轮播中拟合纵向和横向图像【英文标题】:Fitting portrait and landscape images in a full screen image carousel 【发布时间】:2016-08-13 18:05:11 【问题描述】:

我正在创建一个全屏灯箱幻灯片/轮播,并使用srcset 提供最合适的图像。

但是,我不确定如何解决这个问题,因为我的图片是横向和纵向的。

根据图像纵横比、图像尺寸和屏幕尺寸,某些图像将首先在宽度处达到最大值,而在其他图像处达到高度。

在某些情况下,所有图像的最大宽度优先(考虑纵向)或高度(考虑横向)。

tl;dr - 永远不会总是宽度或高度被最大化 === 这很复杂

我该怎么写这个作为 size 属性的媒体查询?我什至不知道从哪里开始。

对于代码和视觉示例,我创建了一支笔 - Go to Pen

HTML

<div class="container">
  <img src="image.jpg">
</div>
<div class="container">
  <img src="image-2.jpg">
</div>

CSS

.container 
  display: flex;
  height:100vh;
  width:100vw;
  justify-content: center;
  align-items: center;


img 
  display: block;
  max-width:100%;
  max-height:100%;

【问题讨论】:

我相信,如果您以某种方式预先将图片标记为纵向或横向(例如班级或?p?l at src 的末尾),然后选择它(max- 大小作为完整视口)。要么这样,要么你将不得不为此处理 JS,因为我不相信 CSS 可以自然地看到它,@media 会变得混乱。 取而代之的是,假设您通过background-image 而不是img 标签指定图像,请查看***.com/questions/11757537/… 答案是:您需要知道图像的高度和宽度。 ***.com/questions/29778235/… @abluejelly - 我已经更新了一个 codepen 的链接,希望能展示我的问题 @alexanderfarkas - 我已经更新了一个 codepen 的链接,希望能展示我的问题 【参考方案1】:

所以如果我理解正确 - 您应该能够通过 Object-fit 实现这一点。

所以你可以尝试这样的事情:

    ...
    img 
    height: 100%;
    width: 100%;
    max-height: 100vh;
    max-width: 100vh;
    object-fit: contain; // this will fill the view window without losing aspect ratio.
    

【讨论】:

以上是关于在全屏图像轮播中拟合纵向和横向图像的主要内容,如果未能解决你的问题,请参考以下文章

图像轮播中的双“活动”类

图像未加载到轮播中

在 Bootstrap 轮播中拉伸和填充图像

小型设备上轮播中的按钮封面图像

图像轮播中的项目对齐

如何在 Bootstrap 4 轮播中制作全角背景图像?