未知宽度水平居中的几种方法

在某些特定的场合,在没有知道宽度的状况下却要求水平居中,前段时间在写分页的时候碰到了这个问题。当时在网上找了一些解决方法,并选了一个最合适的方法,现将当时整理的一些方法发出。下列以分页做为演示说明:php

点击查看演示DEMOcss

方案一

利用浮动的包裹性和相对定位百分比数据值特性,传说称之为“相对浮动”html

.unknow_width_center1 {position:relative; left:50%; float:left;}
.unknow_width_center1 li {position:relative;  right:50%; z-index:2; float:left}</pre>
<ul class="unknow_width_center1">
  <li><a href="#">1</a></li>
  <li><a href="#">2</a></li>
  <li><a href="#">3</a></li>
  <li><a href="#">4</a></li>
  <li><a href="#">5</a></li>
  <li><a href="#">7</a></li>
  <li><a href="#">8</a></li>
  <li><a href="#">9</a></li>
  <li><a href="#">10</a></li>
</ul>

经过给父元素设置浮动float,再设置父元素的position属性为relative和left:50%;子元素设置position:relative和left:-50%来实现水平居中。浏览器

能够保留块级元素仍然是以display:block的形式显示,不会添加无心义的标签,不添加嵌套深度。缺点是设置了position:relative;带来了一些反作用,而且须要闭合(清除)浮动。code

方案二

利用text-align属性特性(text-align:center 对于ie六、7块级和内联级均可以水平居中。其它浏览器内联级(内联块级,文字)元素才能够水平居中,块级无效。 )强制定义为内联 display:inlinehtm

.unknow_width_center2 {text-align:center; padding:5px;}
.unknow_width_center2 li {display:inline;}</pre>
<ul>
  <li><a href="#">1</a></li>
  <li><a href="#">2</a></li>
  <li><a href="#">3</a></li>
  <li><a href="#">4</a></li>
  <li><a href="#">5</a></li>
  <li><a href="#">7</a></li>
  <li><a href="#">8</a></li>
  <li><a href="#">9</a></li>
  <li><a href="#">10</a></li>
</ul>

将子元素设置为内联居中,那么你们都知道的display:inline内联元素宽高是不能够设定的,局限性太大,不宜使用。get

方案三

利用table的属性特性it

.unknow_width_center3{margin:0 auto}
.unknow_width_center3 ul {overflow:hidden; *zoom:1}
.unknow_width_center3 ul li {float:left;}</pre>
<table class="unknow_width_center3">
<tbody>
<tr>
<td>
<ul>
  <li><a href="#">1</a></li>
  <li><a href="#">2</a></li>
  <li><a href="#">3</a></li>
  <li><a href="#">4</a></li>
  <li><a href="#">5</a></li>
  <li><a href="#">7</a></li>
  <li><a href="#">8</a></li>
  <li><a href="#">9</a></li>
  <li><a href="#">10</a></li>
</ul>
</td>
</tr>
</tbody>
</table>

是使用table做为容器的方法来实现。添加了无心义的标签。Table标签自己并非块级元素,当咱们不设置table的宽度的话,他里面的宽度是由他内部元素的宽度撑起来的。但即便咱们没有设置table的宽度,直接设置table的外边距margin:0 auto;就能够实现水平居中了!这样咱们就能够经过设置table水平居中,间接使里面的内容居中。io

方案四

利用内联块display:inline-block的text-align属性table

.unknow_width_center4 {text-align:center}
.unknow_width_center4 ul li {display:inline-block; *display:inline; *zoom:1;}</pre>
<ul class="unknow_width_center4 ">
  <li><a href="#">1</a></li>
  <li><a href="#">2</a></li>
  <li><a href="#">3</a></li>
</ul>

IE6/7下直接设置display:inline-block的居中无效,这里在IE6/7下设置了display:inline,神奇的是居然能够设置宽高及其垂直方向的内外边距。缺点是display:inline-block会引发一些间隙,固然有看起来碍眼解决方案。

方案五

利用table table-cell

.unknow_width_center5 ul{  display:table; margin:0 auto; }
.unknow_width_center5 li{display:table-cell;}</pre>
<ul class="unknow_width_center5 ">
  <li><a href="#">1</a></li>
  <li><a href="#">2</a></li>
  <li><a href="#">3</a></li>
  <li><a href="#">4</a></li>
  <li><a href="#">5</a></li>
  <li><a href="#">7</a></li>
  <li><a href="#">8</a></li>
  <li><a href="#">9</a></li>
  <li><a href="#">10</a></li>
</ul>

ie6/ie7不支持table-cell属性,因此该方法也不适用ie6/ie7,若是须要兼容在这基础上加东西也很蛋疼。

点击查看演示DEMO
我的偏向使用方法一”相对浮动”,适用普遍代码简洁且不会出现什么问题,惋惜就是每次使用的时候要考虑浮动的处理。

转自:cocss » 未知宽度水平居中的几种方法

相关文章
相关标签/搜索