🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
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>