original: false
title: 实现图片垂直居中的几种方法
date: 2015-11-11 16:04:58
tags:
- html
- css
- js
---
[TOC=3,3]
### 背景
monitor韩昨天遇到一个需要将图片显示在浏览器中间的问题,一开始我记错以为`<img>`的display为`inline-block`,志超提醒为`inline`,随后整理以下资料,便于以后使用。
大部分为搜集而来,原创见谅,小弟才疏学浅。
### 方法一:
把一些 div 的显示方式设置为表格,因此我们可以使用表格的 vertical-align属性。
结构效果如下:
http://jsfiddle.net/hehanlin/xta6rzha/
<iframe width="100%" height="300" src="//jsfiddle.net/hehanlin/xta6rzha/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
优点:不用受内容高度的限制,简单实现垂直居中;
缺点:不兼容ie6,7
### 方法二:
这个方法使用绝对定位的 div,把它的 top 设置为 50%,margin-top 设置为负的 content 高度。这意味着对象必须在 CSS 中指定固定的高度。
结构效果如下:
http://jsfiddle.net/hehanlin/5j8jn109/
<iframe width="100%" height="300" src="//jsfiddle.net/hehanlin/5j8jn109/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
优点:兼容性好
缺点:必须知道内容盒子的高度才可以,有了这点限制;
### 方法三:
这个方法和方法二的原理是一样的。废话不多说看代码
http://jsfiddle.net/hehanlin/azy9ovww/
<iframe width="100%" height="300" src="//jsfiddle.net/hehanlin/azy9ovww/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
优缺点和法二一样,缺点嘛多了个额外的标签;
### 方法四:
这个方法使用了一个 position:absolute,有固定宽度和高度的 div。这个 div 被设置为 top:0; bottom:0;。但是因为它有固定高度,其实并不能和上下都间距为 0,因此 margin:auto; 会使它居中。使用 margin:auto;使块级元素垂直居中是很简单的。
结构效果如下:
http://jsfiddle.net/hehanlin/h5Lm4kaj/
<iframe width="100%" height="300" src="//jsfiddle.net/hehanlin/h5Lm4kaj/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
优点:非常简单
缺点:不兼容ie6,7
### 方法五:
这个方法只能将单行文本置中。只需要简单地把 line-height 设置为那个对象的 height 值就可以使文本居中了。这个就不用实例了,你看就明白;
### 方法六:
这个方法的原理是利用元素的vertical-align,区别于方法一的是不限制在table元素中(用于图片的居中不错);
结构效果如下:
http://jsfiddle.net/hehanlin/1w134dc2/
<iframe width="100%" height="300" src="//jsfiddle.net/hehanlin/1w134dc2/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
优点:不用受内容高度的限制,兼容性好;
缺点:垂直居中的对象只限在行内元素范围
### 方法七
用js轻松实现
http://jsfiddle.net/hehanlin/hadaf59x/
<iframe width="100%" height="300" src="//jsfiddle.net/hehanlin/hadaf59x/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>