让元素水平垂直居中

 让一个元素水平居中的方法

  1.使用自动外边距实现居中  CSS中首选的让元素水平居中的方法就是使用margin属性—将元素的margin-leftmargin-right属性设置为auto即可。在实际使用中,我们可以为这些需要居中的元素创建一个起容器作用的div。需要特别注意的一点就是,必须为该容器指定宽度:

 

  div#container {

 

  margin-left: auto;

 

  margin-right: auto;

 

  width: 168px;

 

  }

 

  在大多数主流浏览器中,这种方法都非常有效,即使是Windows平台上的IE6,在其标准兼容模式(compliance mode)下也能够正常显示。但不幸的是,在更低版本的IE中,这种设置却并不能实现居中效果。所以若想在实际项目中使用这种方法,那么就要确保用户的IE浏览器版本不低于6.0

 

  尽管在支持上不尽如人意,但大多数设计师都建议尽可能地使用这种方法。该方法也被认为是在各种用CSS实现元素水平居中方法中最正确、最合理的一种。

 

  2.使用text-align实现居中  另一种实现元素居中的方法是使用text-align属性,将该属性值设置为center并应用到body元素上即可。这种做法是彻头彻尾的hack,但它却能兼容大多数浏览器,所以在某些情况下也自然必不可少。

 

  之所以说它是hack,是因为这种方法并没有将文本属性应用到文本上,而是应用到了作为容器的元素上。这也给我们带来了额外的工作。在创建好布局必须的div之后,我们要按照如下代码为body应用text-align属性:

 

  body{

 

  text-align:center;

 

  }

 

  之后会出现什么问题吗?body的所有子孙元素都会被居中显示。

 

  因此,我们就需要用再写一条规则,让其中的文本回到默认的居左对齐:

 

  p {

 

  text-align:left;

 

  }

 

  可以想象这条附加的规则将带来一些不便。另外,真正完全遵循标准的浏览器并不会改变容器的位置,而只会让其中的文字居中显示。

 

  3.组合使用自动外边距和文本对齐  因为文本对齐居中方式有着良好的向下兼容性,且自动外边距方式也被大多数当代浏览器支持,所以很多设计师将二者组合起来使用,以期让居中效果得到最大限度的跨浏览器支持:

 

  body {

 

  text-align: center;

 

  }

 

  #container {

 

  margin-left: auto;

 

  margin-right: auto;

 

  border: 1px solid red;

 

  width: 168px;

 

  text-align: left

 

  }

 

  可是这始终是个hack,无论如何也算不上完美。我们还是需要为居中容器中的文本编写附加的规则,但至少在各个浏览器中看起来都不错。

 

  4.负外边距解决方案  负外边距解决方案远不是仅仅为元素添加负外边距这么简单。这种方法需要同时使用绝对定位和负外边距两种技巧。

 

  下面是该方案的具体实现方法。首先,创建一个包含居中元素的容器,然后将其绝对定位于相对页面左边边缘50%的位置。这样,该容器的左外边距将从页面50%宽度的位置开始算起。

 

  然后,将容器的左外边距值设置为负的容器宽度的一半。这样即可将该容器固定在页面水平方向的中点。

 

  #container {

 

  background: #ffc url(mid.jpg) repeat-y center;

 

  position: absolute;

 

  left: 50%;

 

  width: 760px;

 

  margin-left: -380px;

 

  }

5.利用vertical-align:middle

这个方法目前是我的最爱,因为下面介绍的兼容性不是很好

这个是利用一个没有宽度b标签来实现水平垂直居中

<style>

.wrap {width:300px; height:300px; text-align:center; background:rgba(0,0,0,0.5);}

.vamb {display:inline-block; width:0px; height:100%; vertical-align:middle;}

.test {background:red; display:inline-block;}

</style>

 

 

<div>

<b></b>

<div>

CSS<br>

来个宽度大点的试试

</div>

</div>

 

6使用transform实现
一般使用百分比单位的时候都是相对父元素来计算的,但是在css里面有个比较特殊的属性是相对自身宽高来计算的。那就是transform:translate();
这样就简单了,只是这个低版本IE不兼容,而且很遗憾 安卓2.3使用这个有bug,暂时不能在移动端使用
<style>
*{margin:0px; padding:0px;}
.test {position: absolute; left:50%; top:50%; -webkit-transform:translate(-50%,-50%); transform:translate(-50%,-50%);}
</style>
<div>

<img src="imagesl/getCA403J56.jpg" width="100" >
</div>

7.弹性盒模型
弹性盒模型就是flexcss3新增布局方式,超级好用,谁用谁知道,推荐大家都学习一番。
这个方法我在手机端都很喜欢用,相对爽啊 呵呵。同样比较遗憾的是低版本IE不支持,不过手机端是没有问题的,使用旧版方法display:box;


<style>
*{margin:0px; padding:0px;}
.flex {display:-webkit-box; display:-ms-flex; display:-webkit-flex; display:flex;}
.flex-hc {-webkit-box-pack:center; -ms-justify-content:center; -webkit-justify-content:center; justify-content:center;}
.flex-vc {-webkit-box-align:center; -ms-align-items:center; -webkit-align-items:center; align-items:center;}
.wrap {position:fixed; width:100%; height:100%; background:rgba(0,0,0,0.5); left:0px; top:0px;}
</style>


<div class="wrap flex flex-hc flex-vc">
<div>
<img src="imagesl/getCA403J56.jpg" width="200" >
</div>
</div>

8.表格方法
表格本来对立面的内容是垂直居中的,所以用表格来做很适合。但是它里面的内容是行内元素才行,所以下面的代码就可以实现。
<style>
*{margin:0px; padding:0px;}
table {position:absolute; width:100%; height:100%; text-align:center; background:rgba(0,0,0,0.5);}
.test {background:red; display:inline-block;}
</style>
<table>
<tr>
<td>
<div>
水平垂直居中了吧<br>
两行文字哦
</div>
</td>
</tr>
</table>

9.在css里面有个display:table-cell;属性值可以让元素渲染为表格单元格,就可以轻松实行让子元素水平垂直居中了,自己试下
<style>
.wrap {display:table-cell; width:300px; height:300px; text-align:center; vertical-align:middle; background:rgba(0,0,0,0.5);}
.test {background:red; display:inline-block;}
</style>
<div>
<div>
水平垂直居中了吧<br>
两行文字哦
</div>
</div>

 

 

元素垂直居中的办法

 

<div>
   <p><img /></p>
</div>

div显示为表格框 (本人未测试通过)
div{display:table-cell;   /* 
也可为table */
      vertical:middle;       /* 
只有firefox在去掉以上属性时,支持此属性 */
     }
采用绝对地址和外边距居中 (推荐,不用看也可以通过)
div{position:relative;    /* 
可无需设置left等,此属性主要是为内部标签p定位 */
      height:xxpx;
     }
p{position:absolute;
    margin-top:
(自身高度/2);
   } 

定义p{inline-block;.....}为行框来填充img的上面距离实现居中。代码略。(未测试

元素内元素垂直居中  (定位不是十分精确,差别不大,好像只适用于单行。测试通过)
div{line-height:500px;    /* line-height
height相同 */
      height:500px;
}


你可能感兴趣的:(让元素水平垂直居中)