如何使用CSS制作可调整大小的li元素

时间:2010-09-17 22:11:36

标签: css list html-lists

场景:我有一个无序列表< ul> 宽度(比方说200px),其中四个< li> 大小相同的元素。因此每个应该是50px。当我添加第5个< li> 元素每个宽度应重新调整为40px。如果我改变<的宽度ul< 到500px,5 < li> 元素,每个< li> 元素应为100px。

这只能用CSS吗?如果是,它是如何实施的?

目前,我有一个满足上述要求的解决方案,但它包含jQuery来重新调整< li> 基于数学计算的元素。

感谢您的关注。

4 个答案:

答案 0 :(得分:6)

显然你可以伪造像here这样的表,但我不确定这是否适用于所有浏览器(编辑:它适用于winxp ie8,chrome 7,firefox)。

<div id="menu">
    <ul>
        <li>
            <a href="...">...</a>
        </li>
        <!-- other list items -->
    </ul>
</div>

#menu {
    display: table;
}

ul {
    display: table-row;
}

li {
    display: table-cell;
}

fiddle.net上的示例here

答案 1 :(得分:0)

你的问题对我来说并不完全有意义。如果您关闭width,则列表将尽可能宽。但这是你问题的一个问题:

<style type="text/css"> 
ul
{
  width:500px;
}
li
{
  width:100px;
}
</style>

<ul>
  <li>1. one</li>
  <li>2. two</li>
  <li>3. three</li>
  <li>4. four</li>
  <li>5. five</li>
</ul>

答案 2 :(得分:0)

使用CSS表达式是可能的,但CSS表达式会带来非常严重的性能损失。 JavaScript(以及jQuery)是用于创建所需效果的合适工具。

CSS只应用于样式,HTML应仅用于结构,并且只要您想创建动态内容,就应该使用JavaScript。

答案 3 :(得分:0)

在浏览器实现calc(), min() and max()功能之前,这在脚本(服务器,客户端,侧面)或使用表之外是不可能的。

目前,令人惊讶的是(可能只对我而言),FirefoxWebkit or Opera都不支持calc()功能,甚至不包括各种各样的供应商前缀。

那就是说,有一天像下面的可能会工作(但不是今天,可悲的是):

ul {
  counter-reset: numListItems;
  width: 60%;
}

ul li {
  counter-increment: numListItems;
  width: calc(100%/numListItems);
}

但是,显然,对于 工作的浏览器,需要在calc()范围内实现某些形式和理解变量,这似乎不一定是路线图(我不确定counter()是否可以与calc()互操作。)