图片在固定宽高盒子中的显示问题

简介: 我们经常可能会遇到这样一个情况:在一个固定宽高的盒子中,要放置一张宽高比不定的图片(比如说后台上传的图片),这时候图片应该如何设置样式呢?有人可能会说,那还不简单,图片宽高设置成父级盒子的宽高不就行了?举个例子:/*HTML*/ /*CSS*/.

我们经常可能会遇到这样一个情况:

在一个固定宽高的盒子中,要放置一张宽高比不定的图片(比如说后台上传的图片),这时候图片应该如何设置样式呢?

有人可能会说,那还不简单,图片宽高设置成父级盒子的宽高不就行了?

举个例子:

/*HTML*/
<div class="image">
    <img src="imgs/img.jpg"/>
</div>
/*CSS*/
.image{ width: 400px; height: 200px;}
.image img{ width: 100%; height: 100%;}

结果很显然,如果图片比例与父级盒子比例不对,则很容易造成图片变形:

图一

所以我们往往会直接不限制图片的高度,让图片溢出部分隐藏。

/*CSS*/
.image{ width: 400px; height: 200px; overflow: hidden;}
.image img{ width: 100%;}
图二

但是这并不是最佳的显示效果,最佳效果应该是让整个图片居中放置。所以有些人可能会用JS去计算,而有些人直接就用背景图片替代,因为背景图片可以直接设置background-size: cover,效果就像这样:

图三

然而,事实上,还有一种既可以不用JS,又可以不用背景图片的完美解决方案。

那就是使用CSS中的object-fit属性。

一、object-fit 属性的用法介绍

该属性一般作用于图片或视频标签上,主要有以下五种属性值:

fill(不保持纵横比缩放图片,使图片完全适应)
contain(保持纵横比缩放图片,使图片的长边能完全显示出来)
cover(保持纵横比缩放图片,只保证图片的短边能完全显示出来)
none(保持图片宽高不变)
scale-down(当图片实际宽高小于所设置的图片宽高时,显示效果与none一致;否则,显示效果与contain一致)

当然还有三个基本上不用的属性,它们显示的效果相当于未设置该属性,本文不做细讲。

inherit
initial
unset

接下来以具体实例分别讲讲以上五个主要的属性值。

/*HTML*/
<img src="imgs/img.jpg"/>

1. fill

/*CSS*/
img{ width: 400px; height: 200px; object-fit: fill;}

图片可能变形,效果同图一。

2. contain

/*CSS*/
img{ width: 400px; height: 200px; object-fit: contain; background: #eee;}

类似于background-size: contain,图片可以完整显示,如图四。

图四

3. cover

/*CSS*/
img{ width: 400px; height: 200px; object-fit: cover;}

类似于background-size: cover,图片会被裁切(只有当图片实际宽高比与样式设置的宽高比正好一致时才不会被裁切),效果同图三。

4. none

图片 宽高 保持不变,可能出现以下两种情况。

① 图片实际宽度大于样式设置的宽度(或图片实际高度大于样式设置的高度)

/*CSS*/
img{ width: 400px; height: 200px; object-fit: none;}

图片会被裁切,如图五。(图片实际宽高为512*512)

图五

② 图片实际宽度小于样式设置的宽度(或图片实际高度小于样式设置的高度)

/*CSS*/
img{ width: 600px; height: 600px; object-fit: none; background: #eee;}

图片不会被裁切,如图六。

图六

5. scale-down

图片 宽高比 保持不变,同样也可能出现以下两种情况。

① 图片实际宽度大于样式设置的宽度(或图片实际高度大于样式设置的高度)

/*CSS*/
img{ width: 400px; height: 200px; object-fit: scale-down; background: #eee;}

效果与 object-fit: contain 一致,如图四。

② 图片实际宽度小于样式设置的宽度(或图片实际高度小于样式设置的高度)

/*CSS*/
img{ width: 600px; height: 600px; object-fit: scale-down; background: #eee;}

效果与 object-fit: none 一致,如图六。

二、object-position 属性的用法介绍

object-position属性规定了指定元素的替换内容在其盒子内的对齐方式,与 background-position 类似,默认为居中,该属性实际用到的情况比较少,本文不再具体展开。

三、object-fit与object-position属性的兼容性

兼容性整体还可以,移动端基本没什么问题,只可惜还是IE……

相关文章
|
6月前
|
人工智能 前端开发 Unix
从CLI原理出发,如何做好AI Coding
本文探讨CLI类AI编程工具的产品美学与技术原理,分析其遵循Unix哲学的轻量、可组合、可集成特性,解析Single Agent架构与上下文工程的实践,并分享如何通过Prompt优化、任务拆解与团队对齐,高效利用CLI提升编码效率,展望AI时代人机协作的新范式。
1281 10
从CLI原理出发,如何做好AI Coding
|
JavaScript 前端开发 开发者
36.3K star!开发者专属PPT神器,Markdown秒变炫酷幻灯片!
Slidev 是专为开发者打造的现代化幻灯片制作工具,基于 Markdown + Vue 技术栈实现。它让技术分享、产品演示、教学培训等场景的幻灯片制作效率提升300%,支持实时编码演示、数学公式渲染、流程图绘制等开发者刚需功能,可将.md文件一键转换为网页/PDF/PPTX格式。
1240 4
|
9月前
|
机器学习/深度学习 数据采集 算法
基于VMD-LSTM的电力负荷预测研究(Matlab代码实现)
基于VMD-LSTM的电力负荷预测研究(Matlab代码实现)
590 0
|
数据采集 监控 Go
用 Go 实现一个轻量级并发任务调度器(支持限速)
本文介绍了如何用 Go 实现一个轻量级的并发任务调度器,解决日常开发中批量任务处理的需求。调度器支持最大并发数控制、速率限制、失败重试及结果收集等功能。通过示例代码展示了其使用方法,并分析了核心组件设计,包括任务(Task)和调度器(Scheduler)。该工具适用于网络爬虫、批量请求等场景。文章最后总结了 Go 并发模型的优势,并提出了扩展功能的方向,如失败回调、超时控制等,欢迎读者交流改进。
549 25
|
10月前
|
存储 安全 数据中心
数据中心概述
数据中心是包含计算机系统、通信设备及配套环境控制、安全装置的复杂设施,用于集中存储、处理和传输数据。根据用途可分为企业、运营商和互联网数据中心。其基础设施涵盖机房、供电、散热、网络设备及管理软件。发展历程从大型机时代逐步演进至云计算时代,现以大规模、资源池化为特征。
1127 0
|
JavaScript 前端开发
BootStrap在Vue中的安装使用详细教程
这篇文章提供了在Vue项目中安装和使用Bootstrap的详细教程,包括安装jQuery、引入Bootstrap、配置Webpack以及在项目中进行测试和查看效果的步骤。
BootStrap在Vue中的安装使用详细教程
|
Java 编译器
【java面试】- java反射以及优缺点
java反射以及优缺点
670 0
|
人工智能 安全 数据挖掘
AI时代,如何问数查数更轻松?(1)
AI时代,如何问数查数更轻松?
1134 4
|
机器学习/深度学习 人工智能 监控
视觉目标跟踪漫谈:从原理到应用
视觉目标跟踪 (visual object tracking) 是计算机视觉 (computer vision) 领域的一个重要研究问题。通常来说,视觉目标跟踪是在一个视频的后续帧中找到在当前帧中定义的感兴趣物体 (object of interest) 的过程,主要应用于一些需要目标空间位置以及外观(形状、颜色等)特性的视觉应用中。本文旨在对跟踪做一个尽量全面、细致和具有时效性的综述,研究跟踪的定义、应用、架构、算法以及评估等方面的内容。联合作者:图希,恬宁,崇北,昆虚,明烁。 文末福利:免费下载《15分钟开发视觉AI应用》电子书。
8774 0
视觉目标跟踪漫谈:从原理到应用
|
存储 数据挖掘 BI
离线数据仓库规范
离线数据仓库规范

热门文章

最新文章