CSS动态水平导航菜单填充特定宽度(表格行为)
我需要创建一个水平导航菜单,其中的项目数量不断变化(这很重要 - 我无法将宽度硬编码到 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>
请注意,较长的项目会占用更多空间,我可以将项目添加到 HTML 中而不需要更改任何内容在 CSS 中,菜单项会缩小以容纳其他项目 - 整个菜单永远不会短于或长于 800px。
由于菜单在语义上不是表格的正确使用,因此可以使用列表和纯 CSS 来完成此操作吗?
I need to create a horizontal navigation menu with a changing number of items (this is important - I can't hard-code widths into the CSS and I don't want to calculate them with JS) that fill up to a certain width, let's say 800px.
With tables,
<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>
Note that longer items take up more space and I can add items into the HTML without changing anything in CSS and the menu items shrink to accommodate additional items - the whole menu never being shorter or longer than 800px.
As a menu isn't a semantically correct use of a table, can this be done with say a list and pure CSS?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在 支持表格显示的浏览器 CSS 规则中,是的:
基本上,您必须建立一个令牌表。实际操作:http://jsbin.com/urisa4
否则:不,如果您不能妥协您的要求,则不这样做。
In browsers that support the table display CSS rules, yes:
Basically, you'd have to build a token table. In action: http://jsbin.com/urisa4
Otherwise: no, not if you can't compromise your requirements.
你可以这样做:
这样它就可以填满你想要的东西,但可以增长到很多项目。
希望这有帮助。
You could do something like this:
That way it fills up what you want, but can grow to a lot of items.
Hope this helps.
使用 CSS 实现此目的的唯一方法是对
li
元素的width
进行硬编码(假设您使用以下结构):JS Fiddle 演示。
这可能会留下“未使用”的 10%(用于
margin
或额外的padding
)。在未来的某个时刻,css 计算可能能够更流畅地执行此操作。
The only way to do this with CSS is to hard-code the
width
of theli
elements (assuming you'd be using the following structure):JS Fiddle demo.
This leaves, potentially, an 'unused' 10% (to be used for
margin
or additionalpadding
).At some point in the future css calculations might be able to perform this more fluidly.
这可行,但我不认为你想要这样的想法:)
http://jsfiddle.net/UnNyS/< /a>
This works, but i don´t think you want some think like this :)
http://jsfiddle.net/UnNyS/