热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

web图片居中处理的方法是什么

这篇文章主要讲解了“web图片居中处理的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学

这篇文章主要讲解了“web图片居中处理的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web图片居中处理的方法是什么”吧!

我们在日常使用移动APP的时候,特别是一些资讯类的APP,都会有图片展示的相关UI,例如今日头条APP的单大图和三图模式,如下图:单图:

web图片居中处理的方法是什么

三图:

web图片居中处理的方法是什么

或者是类似微博或者朋友圈这种9宫格的图片展示效果,如下图:

web图片居中处理的方法是什么

对于这些图片,如果你单纯的以为直接用几个,配置一下src地址,然后渲染在页面上,那就大错特错了

对于这种类型的UI展示,我们需要明确下面几点:

  1. 图片在上传后,会有不同的大小,有的是长图(长大于宽),有的是宽图(宽大于长),或者是一些接近正方形的图片。

  2. 在保证图片原本长宽比的情况下,要想将图片显示在一个正方形的区域内,或者是固定长宽的区域内,是必须要截取一部分图片展示的。

  3. 采用CSS或者Javascript都可以实现这种效果。

大家可以看下面这几张图,红色的是图片本身,虚线框就是展示出来的区域,便于理解:宽图:

web图片居中处理的方法是什么

长图:

web图片居中处理的方法是什么

CSS的background-size:

单独使用CSS的话,我们可以轻松的实现上面这个效果,主要利用到的属性就是background-size这个属性,可以先从概念上了解一下这个属性:

background-size: length|percentage|cover|contain
  • length:设置背景图像的高度和宽度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 “auto”。

  • percentage:以父元素的百分比来设置背景图像的宽度和高度。第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 “auto”。

  • cover:在保持图像的纵横比的前提下,以适合铺满整个容器并将图像缩放成将完全覆盖背景定位区域的最小大小。优点是背景图片全部覆盖所属元素区域;缺点是超出的部分会被隐藏。

  • contain:与cover相反,在保持图像的纵横比的情况下,以适合铺满整个容器,并将图像缩放成将适合背景定位区域的最大大小。优点是图片不会出现变形,同时背景图片被完全展示出来;缺点是当所属元素的宽高比与背景图片的宽高比不同时,会出现背景留白。

我们可以采用background-size:cover;比较合适,在保证纵横比的情况下,如果图片超过背景区域,将多余部分隐藏即可,同时设置background-position: center center;将主要内容居中显示。

CSS的object-fit:

HTML5新增的标签的属性object-fit也可满足需求,但是要注意兼容性。

object-fit: fill|contain|cover|scale-down|none|initial|inherit;

主要用到以下属性:

  • fill:默认,不保证保持原有的比例,内容拉伸整个内容容器。

  • contain:保持原有尺寸比例,内容被缩放,参考background-size:contain。

  • cover:保持原有尺寸比例,但部分内容可能被剪切,参考background-size:cover。

  • scale-down:保持原有尺寸比例。内容的尺寸与 none 或 contain 中的一个相同,取决于它们两个之间谁得到的对象尺寸会更小一些,更加智能。

代码效果demo:

如果是一个单大图,我们可以直接给一个div设置background-image,然后设置background-image即可,代码如下:


    .one-img {
     width: 100%;
     padding-top: 50%;
     background-image: url('https://gpic.qpic.cn/gbar_pic/osL7w6JTehzgKuaKrPEJ8V3lia1zoLaPShY05MdBofOpBye0yNpRXYA/');
     background-size: cover;
     background-position: center center;
   }

效果如下图:

web图片居中处理的方法是什么

代码中图片来源于网络

这里有一个知识点,我们如果想要实现屏幕的适配,div的长宽是绝不可以写成固定值px的,所以宽度可以设置成100%,这样如果在大屏幕下,图片自身会变大,但是高度我们是无法设置一个合适的百分比的,这里我们借助了padding-top属性,将padding-top设置成百分比,可以让一个div的高度被撑开,具体的值依据宽度的值,即50%表示是宽度(width:100%)的50%。

三张连续图,代码如下:

    

   

   

   

 

.three-img-wrap {
    margin-top: 5px;
    width: 100%;
    overflow: hidden;
  }
.three-img {
    float: left;
    width: 33.3333%;
    padding-top: 33.3333%;
    border-right: 1px solid #fff;
    background-size: cover;
    background-position: center center;
    box-sizing: border-box;
  }

效果如下:

web图片居中处理的方法是什么

每个div,设置float:left来实现横向平铺,注意一下这里不建议使用display:inline-block,会出现都得空隙,如果想要实现9宫格,将这3个复制2份即可。

或者是另外一种3+2+1显示方式图,代码如下:

.three-img-other-wrap {
     margin-top: 5px;
     width: 100%;
     overflow: hidden;
}

.three-img-other-1 {
     width: 66.6666%;
     padding-top: 66.6666%;
     float: left;
     border-right: 1px solid #fff;
     background-size: cover;
     background-position: center center;
     box-sizing: border-box;
   }
.three-img-other-2 {
     width: 33.3333%;
     padding-top: 33.3333%;
     float: left;
     border-bottom: 1px solid #fff;
     background-size: cover;
     background-position: center center;
     box-sizing: border-box;

}
.three-img-other-3 {
     width: 33.3333%;
     padding-top: 33.3333%;
     float: left;
     background-size: cover;
     background-position: center center;
     box-sizing: border-box;
}

 

 

 


效果如下:

web图片居中处理的方法是什么

图片之间的缝问题:

从上面的效果图来看,每张图片之间都有一定的间距(一般是1px-3px之间),在这里我们如果使用margin来实现的话,我们是无法设置一个具体的数值的,因为我们的长宽都是采用百分比,margin也必须采用百分比,否则会出现错乱,但是在此场景下margin不适合采用百分比,所以我们采用border边框来模拟这个间距:

border-right: 1px solid #fff;
box-sizing: border-box;

需要注意box-sizing: border-box;,这样border将的长度将会计算在整个宽度里面,即border+width等于具体的设置的百分比。

采用Javascript来实现:

其实从代码的优雅程度上来说,采用我们上面讲解的纯Css的方法是比较好的一种方法,但是也有弊端:1. 无法监听图片的加载成功和失败事件,例如onerror或者onload。这会导致我们无法给加载失败的图片一个默认的显示图。2. 我们在实现图片懒加载的逻辑时,div+background-image这种方式相交于方式需要写更多的逻辑。

在这里给大家介绍一下div+background-image和之间的区别:

在网页加载的过程中,以css背景图存在的图片background-image会等到结构加载完成(网页的内容全部显示以后)才开始加载,而html中的标签img是网页结构(内容)的一部分会在加载结构的过程中加载,换句话讲,网页会先加载标签的内容,再加载背景图片background-image,如果你用引入了一个很大的图片,那么在这个图片下载完成之前,后的内容都不会显示。而如果用css来引入同样的图片,网页结构和内容加载完成之后,才开始加载背景图片,不会影响你浏览网页内容。

如果我们想要用Javascript加,来实现这种效果,基本逻辑是:

  1. 首先需要知道图片的宽高。

  2. 给每个设置src之后,需要同时设置一个父div用来包裹这个

  3. 同时父div需要设置overflow:hidden,然后根据外框的大小,和图片的宽高,动态设置的margin或者left,top来产生位移。

这里的核心是如何根据外框的宽高来动态计算出图片的位移,我们可以封装一个方法来计算,具体的逻辑可以看注释:

getImagePosition(img, cW, cH) {
   // cW为外框宽度,// cW为外框高度,
   img.marginTop = img.marginLeft = 0;

   // img.h表示图片本身高度,img.height表示计算设置之后的高度
   // img.w表示图片本身高度,img.width表示计算设置之后的高度

   img.width = cW;
   img.height = cH;

   // 长图 优先设置宽度,然后长图居中
   if (img.h * cW / img.w > cH) {
       img.height = img.h * cW / img.w;
       img.marginTop = (cH - img.height) * 0.5 // 0.5表示居中
   } else {// 宽图 优先设置高度度,然后宽图居中
       img.width = img.w * cH / img.h;
       img.marginLeft = (cW - img.width) * 0.5 // 0.5表示居中
   }

   return img;
}

在计算出图片位移后,外框的宽高也可以使用Javascript来动态设置,例如屏幕宽度的三分之一或者是图片宽度的三分之二,代码如下:

document.body.clientWidth * 0.5
document.body.clientWidth * 2 / 3

感谢各位的阅读,以上就是“web图片居中处理的方法是什么”的内容了,经过本文的学习后,相信大家对web图片居中处理的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
author-avatar
爱你一辈子2502860605
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有