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 相关文章推荐
懒就要懒到底——鼠标自动点击(含时间判断)
Feb 20 Javascript
关于使用runtimeStyle属性问题讨论文章
Mar 08 Javascript
js中将URL中的参数提取出来作为对象的实现代码
Aug 16 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
Dec 20 Javascript
浅谈Jquery核心函数
Jun 18 Javascript
基于vue.js的分页插件详解
Nov 27 Javascript
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
vue中v-for加载本地静态图片方法
Mar 03 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
Sep 07 jQuery
javascript中关于类型判断的一些疑惑小结
Oct 14 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
Dec 13 Javascript
微信小程序设置滚动条过程详解
Jul 25 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
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
js url传值中文乱码之解决之道
2009/11/20 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
pyqt5简介及安装方法介绍
2018/01/31 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
python装饰器练习题及答案
2019/11/01 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
创优争先心得体会
2014/09/11 职场文书
普宁寺导游词
2015/02/04 职场文书
小学体育组工作总结2015
2015/07/21 职场文书