西风坊

哦,犷野西风,你秋之实体的气息……

« 重拾网球高性能页面的14条军规(一) »

ul导航的居中

用ul元素来做导航早已成为绝大多数网站的共识。设置li为float:left,然后在定义li的width,margin等属性即可完成。要让标题居中怎么办呢?只要讲ul的margin设为margin:0 auto;然后在定义ul的宽度就可以了。

css代码:

ul{width:400px;margin:0 auto;}
li{float:left;width:86px;margin-right:14px;background:#ffcccc;}

html代码:

<ul>
  <li>标题1</li>
  <li>标题2</li>
  <li>标题3</li>
  <li>标题4</li>
</ul>

然而很多时候导航条的宽度并不是已知的,这个时候,因为元素已经设为左浮动,所有外层的text-align属性或是本身的margin属性都已失去了作用。这时该怎么办呢?在相册中遇到了这个问题,当时用了个比较“笨”的办法,用js去控制。我自然也知道这种样式的控制最好还是不要用js的道理,毕竟,行为和表现是不同层面的东西。

后来无意中看到了centering Float Left Menus这篇文章,算是获得了一种新的方法。

简单地讲一下,在IE中通过ul外面所增加的<del>元素,并将其的display设为inline-block。然后在ul外面的元素的text-align设为center就可以了。而在非IE浏览器下,通过设置ul的display为table,li的display为table-ceil即可实现。(就是讲ul和li模拟成表格的属性)。

CSS代码如下:

#menu {
  display:table;
  padding:0; 
  margin:0 auto; 
  list-style-type:none;
  white-space:nowrap;
  }
#menu li {
  display:table-cell;
  }
* html #menu li {
  float:left;
  }
#menu a {
  width:auto;
  display:block;
  padding:4px 16px;
  color:#fff; 
  background:#08c; 
  border:1px solid #fff; 
  text-decoration:none;
  }
* html #menu a {
  float:left;
  }
#menu a:hover {
  color:#000; 
  background:#d4d4d4;
  }

.container {text-decoration:none;}
* html .container {display:inline-block;}


html代码:

<del class="container">
  <ul id="menu">
   <li><a href="#nogo">标题1</a></li>
   <li><a href="#nogo">标题2</a></li>
   <li><a href="#nogo">标题3</a></li>
   <li><a href="#nogo">标题4</a></li>
 </ul>
</del>

只要设置del外面的div的text-align为center就可以保证ul在目标区域内的居中了。

只是不太明白,del标签是应用在表示要删除的元素上的。<del>我是要删除的文本</del>就会给“我是要删除的文本”中间加上一条线。(对应还有个ins,是表示要添加的文本,给文本加上了下划线)。为什么要用del呢?尝试了一下,将del改成div,对应的属性全部不变,ie下的居中就没有效果了!

期待有高人答复……

 

0分/0个投票

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog. Templete from Google黑板报.

浙ICP备08015283号 Copyright 2007 space007.com. Some Rights Reserved.