我需要创建一个水平导航菜单,其中包含不断变化的项目数量(这很重要 - 我不能将宽度硬编码到CSS中,我不想用JS计算它们)一定宽度,比方说800px。
使用表格
<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来完成吗?
答案 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%;
}
这可能是“未使用的”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;
}