CSS图片响应式 垂直水平居中


Posted in Javascript onAugust 14, 2015

我看最近微博流行CSS居中技术,我看了几编资料写的都不多好,于是抽时间把相关资料整合了,具体内容如下。

点击此处下载源码

效果展示:

CSS图片响应式 垂直水平居中

要求:

1.尽可能兼容更多浏览器,这里兼容到ie7,ie6不支持max-*就不考虑了。

2.浏览器尺寸变化时,图片总是等比例拉伸或缩放。

3.包裹图片的div也是响应式的,并且每个div的尺寸是一样的。

4.图片始终保持水平垂直居中。

5.图片的行列数不变,这里一直都是3*3.

下面来搞定一个个要求。

满足要求1意味着这里要尽量不使用高级浏览器才有的属性,比如高级浏览器居中常用的什么

display:table-cell;vertical-align;center;
flexbox
transform

。。。

如果不得不用这些属性,也必须要有兼容低版本浏览器的替代方案。

要求2中图片等比拉伸缩放在响应式设计中很容易搞定。

直接对图片img{max-width: 100%;}就可以了。外面的宽度就算设成比图片宽度小的尺寸,图片会填满外面div,同时等比例的计算出图片这时该有的高度。

CSS图片响应式 垂直水平居中

可以看到图片尺寸是640*480(4:3),外面div设成300px,图片尺寸这时变为300*225(4:3).

然后是要求2里面的浏览器尺寸变化。这个也容易,把外面div的宽度写成百分百就可以了。

CSS图片响应式 垂直水平居中

可以看到不管外面div尺寸怎么变,图片的宽高比始终没变。

然后是要求3,外面div响应式。

第一反应是把尺寸设置成百分百。比如最上面的效果,一行有三张图片。把每个包裹图片的div宽度设成33.3%;那这时div还会像里面的图片一样,等比例缩放或拉伸,div的高度就会参差不齐。

<div id='wrap'>
  <ul>
   <li>
    <p><img src="1.jpg"></p>
   </li>
      .....
  </ul>
 </div>

*{
  margin: 0;
  padding:0;
 }
 li{
  list-style-type: none;
  display:inline-block;
  vertical-align: middle;
  max-width: 200px;
  width: 32%;
  border:1px solid red;
 }
 img{
  max-width: 100%;
  max-height: 100%;
  display: inline-block;
  vertical-align: middle;
 }
 #wrap{
  max-width: 620px;
  font-size: 0;
 }

CSS图片响应式 垂直水平居中

可以看到第一张图片的高度已经超过200px,因为第一张图片是宽度小于高度,很显然这时应该以高度为基准,宽度等比例缩放。如果在图片父元素加overflow:hidden;就看不到大猪的猪脚了。

那么到底怎么做才能让外面div响应式?

padding-top:100%;

<div id='wrap'>
  <ul>
   <li>
    <div class="dummy"></div>
   </li>
      ...
  </ul>
 </div>
 
 *{
  margin: 0;
  padding:0;
 }
 li{
  list-style-type: none;
  float: left;
  display: block;
  max-width: 200px;
  width: 32%;
  border:1px solid red;
 }
 .dummy{
  padding-top: 100%;
 }
 #wrap{
  max-width: 620px;
  font-size: 0;
 }

CSS图片响应式 垂直水平居中

这里宽高比是1:1.如果宽高比是4:3,就设成padding-top: 75%;,其他的以此类推。

要求3是搞定,下面是要求4。

先把图片放进去。

CSS图片响应式 垂直水平居中

这时让图片脱离文档流,并把图片整个铺满。

img{
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  max-width: 100%;
  max-height: 100%;
  display: block;
  margin: 0 auto;
  border: 2px solid blue;
 }

同时把包裹图片div position:relative;

CSS图片响应式 垂直水平居中

注意到上面图片margin:0 auto;,已经可以水平居中了。

下面就只差一个图片垂直居中了,要求5只需在最外面div设置一个max-width就可以设置一行的列数了。

垂直居中有很多方法,但是这里图片position:absolute;,很容易想到设置margin:auto;padding:auto;就可以让脱离文档流的图片水平垂直居中。参见Absolute Horizontal And Vertical Centering In CSS。

CSS图片响应式 垂直水平居中

但是这种方法对ie7无效。因此只有在图片外面再加一层div.

这里本?庞玫氖呛艹<?囊恢执怪本又械姆椒ā?/p>

<li>
    <div class="dummy"></div>
    <p><img src="1.jpg"><i></i></p>
   </li>
 img{
  max-width: 100%;
  max-height: 100%;
  display: inline-block;
  vertical-align: middle;
 }
 i{
  display: inline-block;
  vertical-align: middle;
  height:100%;
 }

注意,这时<p>标签要设置height:100%.否则在ie7中,<i>标签没有可以参照的高度,使得它无法达到和外部容器一样的高度。

以上内容是本文针对CSS图片响应式 垂直水平居中的全部内容,希望大家喜欢。

Javascript 相关文章推荐
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
Apr 24 Javascript
得到form下的所有的input的js代码
Nov 07 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
Jun 24 Javascript
JavaScript作用域示例详解
Jul 07 Javascript
vue的全局提示框组件实例代码
Feb 26 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
Dec 11 Javascript
JS函数节流和防抖之间的区分和实现详解
Jan 11 Javascript
Webpack 4如何动态切割JS注入文件名详解
Jul 09 Javascript
vue使用自定义指令实现拖拽
Jan 29 Javascript
在博客园博文中添加自定义右键菜单的方法详解
Feb 05 Javascript
react-intl实现React国际化多语言的方法
Sep 27 Javascript
js实现选中复选框文字变色的方法
Aug 14 #Javascript
avalon js实现仿微博拖动图片排序
Aug 14 #Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 #Javascript
freemarker判断对象是否为空的方法
Aug 13 #Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
Aug 13 #Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 #Javascript
再JavaScript的jQuery库中编写动画效果的指南
Aug 13 #Javascript
You might like
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
自己写了一个php检测文件编码的函数
2014/04/21 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
Vue computed计算属性的使用方法
2017/07/14 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
python和php哪个容易学
2020/06/19 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
国税会议欢迎词
2014/01/16 职场文书
求职简历的自我评价
2014/01/31 职场文书
三下乡活动方案
2014/01/31 职场文书
党风廉政承诺书
2014/03/27 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python