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 相关文章推荐
使用非html5实现js板连连看游戏示例代码
Sep 22 Javascript
js判断选择时间不能小于当前时间的示例代码
Sep 24 Javascript
JavaScript学习笔记之基础语法
Jan 22 Javascript
javascript定义类和类的实现实例详解
Dec 01 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
May 16 Javascript
react.js使用webpack搭配环境的入门教程
Aug 14 Javascript
jquery+php后台实现省市区联动功能示例
May 23 jQuery
javascript实现超好看的3D烟花特效
Jan 01 Javascript
JavaScript类的继承多种实现方法
May 30 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 Javascript
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
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
一篇入门的php Class 文章
2007/04/04 PHP
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
eclipse创建python项目步骤详解
2019/05/10 Python
python数值基础知识浅析
2019/11/19 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
澳大利亚家具商店:Freedom
2020/12/17 全球购物
九年级科学教学反思
2014/01/29 职场文书
导购员的岗位职责
2014/02/08 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
酒店节能降耗方案
2014/05/08 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
战马观后感
2015/06/08 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python