CSS动态水平导航菜单填充特定宽度(表行为)

时间:2011-02-22 18:10:17

标签: html css menu html-table navigation

我需要创建一个水平导航菜单,其中包含不断变化的项目数量(这很重要 - 我不能将宽度硬编码到CSS中,我不想用JS计算它们)一定宽度,比方说800px。

使用表格enter image description here

<table width="800" cellspacing="0" cellpadding="0">
  <tr>
    <td>One</td>
    <td>Two</td>
    <td>Three</td>
    <td>Four</td>
    <td>Five Seven</td>
  </tr>
</table>

<style>
table td {
      padding: 5px 0;
      margin: 0;
      background: #fdd;
      border: 1px solid #f00;
      text-align: center;
    }
</style>

请注意,较长的项目占用更多空间,我可以在不更改CSS中的任何内容的情况下将项目添加到HTML中,并且菜单项会缩小以容纳其他项目 - 整个菜单永远不会短于或长于800px。

由于菜单不是语义正确使用表,可以用列表和纯CSS来完成吗?

4 个答案:

答案 0 :(得分:11)

browsers that support the table display CSS规则中,是:

<style>
  nav {display:table; width:800px; background:yellow}
  ul {display:table-row; }
  li {display:table-cell; border:1px solid red}
</style>

<nav>
 <ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five Seven</li>
 </ul>
</nav>

基本上,您必须构建一个令牌表。在行动中:http://jsbin.com/urisa4

否则:不,如果你不能妥协你的要求,那就不行了。

答案 1 :(得分:3)

你可以这样做:

<style type="text/css">
#container { width: 800px ; border: 1px dashed #333; }
#container div { width: inherit; display: table-cell; background: #ccc}
</style>

<div id="container">
    <div>Something</div>
    <div>Something</div>
    <div>Something</div>
</div>  

这样就可以填满你想要的东西,但可以成长为很多东西。

希望这有帮助。

答案 2 :(得分:1)

使用CSS执行此操作的唯一方法是对width元素的li进行硬编码(假设您使用以下结构):

  <ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li>Five Seven</li>
  </ul>

ul {
    width: 80%; /* or whatever */
}

ul li {
    width: 16%;
    padding: 1%;
}

JS Fiddle demo

这可能是“未使用的”10%(用于margin或其他padding)。

在未来的某个时刻,css calculations可能会更流畅地执行此操作。

答案 3 :(得分:1)

这有效,但我不认为你想要这样的东西:)

<div class="master">
    <ul>
        <li>test1</li>
        <li>test2</li>
        <li>aölsdkfaösdlfk</li>
        <li>yeah baby</li>
        <li>hi</li>
    </ul>
</div>

.master {
   width:800px;
   background-color:black;
   height:100px;
   color:white;
    display:table;
}
table {
 width:100%;   
}

ul {
 display:table-row;  
 width:100%; 
}
li {
 display:table-cell;  
 width:auto; 
 margin:1px;
 border:1px solid white;
 background-color:red;
 text-align:center;
    vertical-align:middle;
}

http://jsfiddle.net/UnNyS/