热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

html容器中图片的拉伸与缩放

html中能通过background-image设置背景图片,也能通过标签来在容器中插入图片。当图片自身大小与容器大小无法匹配时,就需要缩放使其填充容器看上去正常显示。接

html中能通过"background-image"设置背景图片,也能通过标签来在容器中插入图片。

当图片自身大小与容器大小无法匹配时,就需要缩放使其填充容器看上去正常显示。接下来分开讲解。



  • 背景图片“background-image”

首先我们要设置背景图片。因为图片塞入容器中时,无论图片多大,他的宽度都是默认展开全部比例,而高度则需要手动设置,否则不会显示。

父容器设置了红色边框,以此分辨填充效果。

.mask_1 {
height
: 100%; /*这里需要设置高度为100%,因为图片默认以自身的宽度展开(无论他是否大过父级容器),若不设置高度,则图片将无法展示*/
background-image
: url("dragon.png");
}
.mask_2
{
height
: 100%;
width
: 100%;
background-image
: url(小图测试.jpg);
}

效果如下。左图原图比容器大,右图更小。

可以看到默认情况下,大图以容器左上角为原点铺开;小图则是以剩余空间进行平铺。

 

接下来使用 background-size 来进行拉伸的控制。这个属性能取三个值,默认是auto,也就是图片原始尺寸塞进去,无论他是否能显示完全。

 

 

cover:该属性会按比例拉伸当前图片,直至其中较短那条边填满容器。此举会填充整个容器,但不可避免地会出现裁剪——如果原图片长宽比与容器比例不一致的话。

.mask_1 {
height
: 100%;
background-image
: url("dragon.png");
background-size
: cover;
}
.mask_2
{
height
: 100%;
width
: 100%;
background-image
: url(小图测试.jpg);
background-size
: cover;
background-repeat
: no-repeat;/*禁止图片平铺空白,此项仅限于图片本身小于容器大小时*/
}

可以看到,大图片等比例缩放,短边为高,因此右侧被裁剪了;而小图片的短边为宽,因此下侧被裁剪了。

注:可以通过对margin设置负值,来使得内部容器背景图片向相应方向回调,看上去是在原始图片中心

.mask_1 {
height
: 100%;
background-image
: url("dragon.png");
background-size
: cover;
margin-left
: -25%;/*向左移动父容器25%宽度。切记对父容器设置overflow:hidden,否则溢出内容会超出父元素*/
}

注意,这里对相反方向的调动比例不应过大!!!

因为本身是由cover设定是按比例填充父容器的,若设置过大,他会向那个方向等比例放大。

以下图一为-25%,图二为-125%移动

 

 

contain:该选项类似上面的cover,只不过他判定的边是【最长那条边长】,因此图片会完整显示,但有可能会出现空白位置。

.mask_1 {
height
: 100%;
background-image
: url("dragon.png");
background-size
: contain;
/*这里大图片没有使用禁止重复,因此大图片下方的空白被填充了*/
}
.mask_2
{
height
: 100%;
width
: 100%;
background-image
: url(小图测试.jpg);
background-size
: contain;
background-repeat
: no-repeat;
}

 

 

具体数值:可以直接填上具体的数字或者百分比,以此来自定义缩放百分比。格式为 background-size: 宽 高; 如果不设置高的话,他会按照原始比例进行缩放。

.mask_1 {
height
: 100%;
background-image
: url("dragon.png");
background-size
: 50%;
}
.mask_2
{
height
: 100%;
width
: 100%;
background-image
: url(小图测试.jpg);
background-size
: 60% 120%;
background-repeat
: no-repeat;
}

可以看出,第一个大图片自动压缩为【父容器】的50%宽度大小(高度自动等比例缩放),并且因为没有设置禁止重复,因此尽数填充下去了;

而第二个高度设置超出了100%,因此被纵向拉伸并被裁剪了。

设置具体像素值也是同理,再次不再赘述。

 

 



  • 标签插入图片

 

 当然我们也可以在父容器内,通过标签插入图片。我们最好也做一下父容器的设置,别让溢出了。

<div>
<div style="width: 610px; height: 510px;
border: 5px solid red; clear: left;
overflow: hidden; float: left;
margin-right: 60px" class="mask_3"
>
<img src="dragon.png" alt="">/*大图片默认情况*/
div>
<div style="width: 610px; height: 510px;
border: 5px solid red; overflow: hidden;
float: left" class="mask_4"
>
<img src="小图测试.jpg" alt="">/*小图片*/
div>
div>

 

 可以看到是和背景图片差不多,默认情况下。

 

接下来用 object-fit 这个属性来进行调整。参数如下:

 

 

fill:该属性会使得图片显示所有内容至父容器内,如果大小不一致,那就按照父容器比例缩放;

.mask_3 img {
width
: 100%;
height
: 100%;
object-fit
: fill;
}
.mask_4 img
{
width
: 100%;
height
: 100%;
object-fit
: fill;
}

可以看到,左边大图向中间【缩】,变窄了;而右边小图向两边【伸】,变宽了。

 

 

contain:这个同背景图片的contain,以最长边进行判定,因此往往会显示完整,并留白。这里会自动处于父容器的中心位置。

.mask_3 img {
width
: 100%;
height
: 100%;
object-fit
: contain;
}
.mask_4 img
{
width
: 100%;
height
: 100%;
object-fit
: contain;
}

可以看到处于中心位置。需要注意的是,标签还是拥有一开始设定的100%父元素大小,只不过那些留白部分无法填充就是了。

 

 

cover:以短边进行填充,超出部分会自动裁剪,同理处于中心位置。

.mask_3 img {
width
: 100%;
height
: 100%;
object-fit
: cover;
}
.mask_4 img
{
width
: 100%;
height
: 100%;
object-fit
: cover;
}

 可以看到,这里就不需要像背景图片那样需要调整图片的负外边距,直接自带居中效果!

这里不支持上下左右移动,因为实际超出部分是被直接裁掉了的。所以设置边距的话只会留下空白。

 

 

none:原始尺寸展示,但整体处于父元素中心。

.mask_3 img {
width
: 100%;
height
: 100%;
object-fit
: none;
}
.mask_4 img
{
width
: 100%;
height
: 100%;
object-fit
: none;
}

可以看到,大图片多余部分被裁减,并处于父元素中心位置。小图片同理。

 

 

scale-down:自动处理。会自动选择【none】或者【contain】其中的一种,取决于谁能完整显示出来。

.mask_3 img {
width
: 100%;
height
: 100%;
object-fit
: scale-down;
}
.mask_4 img
{
width
: 100%;
height
: 100%;
object-fit
: scale-down;
}

可以看到,如果是大图片,那么他就会自动选择【contain】——以最长边进行填充;

若是小图片则以【none】属性展示。

力保让图片能够整体完整地展示出来!

 

 

 

与君共勉。

 



推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了W3C标准盒模型和IE传统盒模型的区别,探讨了CSS3中box-sizing属性的使用方法及其在布局中的重要性。通过实例分析,帮助读者更好地理解和应用这一关键概念。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本文探讨了在Linux系统上使用Docker时,通过volume将主机上的HTML5文件挂载到容器内部指定目录时遇到的403错误,并提供了解决方案和详细的操作步骤。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 百度服务再次遭遇技术问题,疑似DNS解析故障
    近日晚间,百度多项在线服务出现加载异常,包括移动端搜索在内的多个功能受到影响。初步迹象表明,问题可能与DNS服务器解析有关。 ... [详细]
author-avatar
周笨笨真笨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有