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>