纯css实现全兼容的元素水平垂直居中

  对于图片在box内水平居中的问题,在项目中肯定是会经常碰到的。

  这是我目前知道的几种解决方法

  先贴出html代码 

<div class="boxBlock">
    <img src="http://skin.huitu.com/images/noface.gif" alt="" />
</div>

方法1:

.boxBlock{width:200px;height:200px;vertical-align:middle;display:table-cell;background:pink;text-align:center;*font-size:174px;*display:block;}/*约为高度的0.873,200*0.873*/
.boxBlock img{_width:expression(this.width >114? ‘114px‘:true);max-width:114px;_height:expression(this.height >114? ‘114px‘:true);max-height:114px;}

亲测,ie6以上,标准浏览器全支持。

标准浏览器是利用display模拟表格垂直居中特性实现。ie老版本浏览器竟然可以用font-size实现。还要设置width属性和height属性。

当然,在.boxBlock中如果设置了浮动,则垂直居中失效。解决方法很简单,在外面包一层div即可。外面浮动,里面不浮动。

方法2:

<div class="boxBlock">
    <div>
         <img src="http://skin.huitu.com/images/noface.gif" alt="" />
    </div>
</div>
.boxBlock{width:200px;height:200px;line-height:200px;background:pink;text-align:center;}
/* 兼容标准浏览器 */
.boxBlock div:before{
    content:"."; /* <a href="http://casinogreece.gr/">????????????</a> 具体的值与垂直居中无关,尽可能的节省字符 */
    margin-left:-15px; font-size:10px; /* 修复居中的小BUG */
    visibility:hidden; /*设置成隐藏元素*/
}
/*兼容ie6,7*/
.boxBlock div img{
    *margin-top:expression((200 - this.height )/2); /* CSS表达式用来兼容IE6/IE7 */
    vertical-align:middle;
    border:1px solid #ccc;
}

亲测,兼容ie6以上以及标准浏览器。对于标准浏览器,也是神奇的运用:before

方法3:标准浏览器运用display:table-cell,vertical-align: middle方式。ie6,7运用空标签方式

<div class="boxBlock mr20">
    <div>
        <i></i><img src="http://skin.huitu.com/images/noface.gif" alt="" />
    </div>
</div>
.boxBlock{width:200px;height:200px;line-height:200px;background:pink;text-align:center;vertical-align:middle;display:table-cell;}
.boxBlock i {
    display:inline-block;
    height:100%;
    vertical-align:middle
    }
.boxBlock img{vertical-align:middle}

亲测,兼容ie6以上及标准浏览器。ie6,7是运用空标签形式

方法4:标准浏览器运用display:table-cell,ie6,7运用定位方式

<div class="boxBlock mr20">
    <div>
        <img src="http://skin.huitu.com/images/noface.gif" alt="" />
    </div>
</div>
<style type="text/css">
.boxBlock{
    width:500px;height:400px;
    display:table;
    text-align:center;
    border:1px solid #d3d3d3;background:#fff;
}
.boxBlock div{
    display:table-cell;
    vertical-align:middle;
}
.boxBlock img{
    border:1px solid #ccc;
}
</style>
<!--[if lte IE 7]>
<style type="text/css">
.boxBlock{
    position:relative;
    overflow:hidden;
}
.boxBlock div{
    position:absolute;
    left:50%;top:50%;
}
.boxBlock img{
    position:relative;
    left:-50%;top:-50%;
}
</style>
<![endif]-->

亲测,兼容ie6以上及标准浏览器。ie6,7是定位实现。

注意:

1,box中必须为img等display为inline的标签

2,对于多行文字垂直居中问题,方法4适用

总结:

对于标准浏览器,设置display:table-cell; vertical-align:middle 方式实现最简单。方法二中的:before。个人觉得比较怪异。弃之。

对于低版本ie浏览器,看个人喜好而定。我喜欢不加标签的方式,运用css表达式实现。ie6,7性能问题觉得问题不大。  

时间: 2024-08-29 17:41:44

纯css实现全兼容的元素水平垂直居中的相关文章

CSS未知宽高元素水平垂直居中

方法一 思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中优点:父元素(parent)可以动态的改变高度(table元素的特性)缺点:IE8以下不支持 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>未知宽高元素水平垂直居中&l

纯css实现文字及图片水平垂直居中

1.图片及文字水平居中只需要加上text-align:center即可: 2.单行文本垂直居中,高度等于行高即可: 3.多行文本及图片垂直居中: 需要在外面嵌套两层,第一层设置固定高度 height,和display:table;第二层加上display:table-cell;vertical-align:middle;即可实现(IE7及以下无效) 4.图片垂直居中的另一种方案,兼容任何浏览器: 在图片外面嵌套一层,设置好高度 display: table-cell;vertical-align

css 常用的绝对定位元素水平垂直居中的方法

两种方法都能够实现: 1. div { height:80%; /*一定要设置高度*/ overflow:hidden;/*建议设置*/ margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; } 2. div{ position: absolute; width: 80%; height: 60%; padding: 2%; top: 50%; left: 50%; margin-left: -41%; /

css实现块级元素水平垂直居中的方法?

父级给相对定位,子级给绝对定位,margin设置为auto,上下左右值设为0. 父级给相对定位,子级给绝对定位,设置left和top为50%,再向左和向上移动负的子级一半. 父级设置display:flex;justify-content: cneter;align-items: center; 父级设置display: table-cell;vertical-align: middle;text-align: center;子级设置display: inline-block; 原文地址:htt

《转》CSS元素水平垂直居中方法总结(主要对大漠以及张鑫旭博客所述方法进行了归纳)

转自大地Dudy的CSS元素水平垂直居中方法总结(主要对大漠以及张鑫旭博客所述方法进行了归纳) 本文主要是对主流居中方法进行了归纳,有些地方甚至就是把别人的代码直接复制过来的,没有什么自己的东西,除了大漠以及张鑫旭的方法外,还有来自司徒正美.怿飞博客的几个方法 以下方法,由于测试环境的原因,IE系列只测试了IE9和IE6,以下所说的IE的支持性只是相对于IE9和IE6来说的: 一.元素的水平垂直居中: 第一种方法: <!doctype html> <html lang="en&

CSS元素水平垂直居中方法总结(方法主要来自大漠以及张鑫旭博客)

以下方法,由于测试环境的原因,IE系列只测试了IE9和IE6,以下所说IE的支持性只是相对于IE9和IE6来说的: 一.元素的水平垂直居中: 第一种方法:<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"&g

css 实现元素水平垂直居中总结5中方法

个人总结,如有错误请指出,有好的建议请留言.o(^▽^)o 一.margin:0 auto:text-align:center:line-height方法 1 <div id="divAuto">margin,text-align;水平居中</div> 1 /* 2 margin:0 auto; 设置块元素(或与之类似的元素)的水平居中 3 text-align:center;设置文本或img标签等一些内联对象(或与之类似的元素)的水平居中 4 line-hei

css中元素水平垂直居中4种方法介绍

table-cell轻松设置文本图片水平垂直居中 让一个元素垂直居中的思路:把这个元素的容器设置为table-cell,也就是具有表格单元格的特性,再使用vertical-align(这个属性对block元素不起作用,但对table-cell元素是有效的)设置元素垂直居中,即可达到我们想要的效果. IE7及以下版本不支持此方法,IE8及以上版本及大部分的主流浏览器都很好的支持. HTML代码  代码如下   <div class="img">    <img src=

关于元素水平垂直居中的那些事?

关于元素水平垂直居中的那些事? 中国式的美,总是少不了对称美的存在.对称美,存在于建筑之上,也巧秀于美食之中.对称之美,中国之风!美,用户体验的一种,作为用户体验的打造者,我们是不是也应该知道些有关于前端开发中的对称美呢?那我们大前端中到底存在些什么对称美呢?ok,那我们今天就来聊聊,关于元素水平垂直居中的那些事吧! 什么是元素水平垂直居中? 什么是元素水平垂直居中?想必大家看到这问题,心里早已经有数了!水平则为左右,垂直即为上下,居中亦为中心.也就是说,我们在使用元素的时候,有可能要水平居中,