如何在无序的html列表中垂直对齐项目?

时间:2009-12-28 18:26:26

标签: css html-lists center vertical-alignment

如何在无序列表中垂直对齐项目以在IE6和7中工作?

我不能将行高设置为全高,因为我有1行项和2行项。

我的代码是:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title></title>
        <style type="text/css">
            ul {
                list-style: none;
                border: 1px solid black;
                height: 40px;
            }
            li {
                float: left;
                margin-right: 10px;
                height: 40px;
                width: 46px;
            }
            a {

            }
        </style>
    </head>
    <body>
        <ul>
            <li>
                <a href="/">item1</a>
            </li>
            <li>
                <a href="/">two lines</a>
            </li>
        </ul> 
    </body>
</html>

5 个答案:

答案 0 :(得分:1)

你不能将你的物品浮动到左边并期望它们垂直对齐....

删除

float: left;

从LI风格......

答案 1 :(得分:1)

如果我理解正确你想用浮子来收缩包裹李?

如果是这种情况,则需要设置

li {clear:left;}

所以lis在彼此之下,而不是彼此相邻。如果希望li缩小包含内容,也可以使用inline-block。

此外,根据目标,可能适合使用表格,具体取决于它的用途。

答案 2 :(得分:0)

对不起,如果这不是一个正确的答案,但它可能有助于澄清:

为什么您的列表项使用浮点数代替display: inline

答案 3 :(得分:0)

行基本上是相同的高度。所以没有办法在表格中有效地“合并单元格”。您应该将行高设置为“两行”项的高度,然后使用vertical-align属性对齐它们。

答案 4 :(得分:0)

如果我理解正确,你想要一个水平显示的列表,其中每个项目都有一个设置的宽度和高度,但里面的文本是垂直居中的,并且可能有两行文本的项目。

如果您知道预渲染哪些项目将是两行,则可以应用一个CSS类,该类仅在具有单行的那些项目上设置line-height: 40px;。通常情况并非这样,所以最好的方法是在渲染列表后使用JS来改变行高。

请参阅此jsfiddle:http://jsfiddle.net/UEsAS/2/

本质上,改变你的CSS不要在li上设置一个高度(如果它们是一行的话,这会导致它们的高度较低,这就是你可以检测哪些改变的高度)。然后运行以下(假设jQuery):

$(function() {
    var maxHeight = 40;
    $('li').each(function(i, el) {
        if ($(el).height() < maxHeight) {
            $(el).css('line-height', maxHeight + 'px');
        }
    });
});​