【问题标题】:Evenly-spaced navigation links that take up entire width of ul in CSS3在 CSS3 中占据整个 ul 宽度的等距导航链接
【发布时间】:2011-09-24 10:47:21
【问题描述】:

我想创建一个链接的水平导航列表,其中导航链接均匀分布并占据封闭容器<ul> 的整个宽度。导航链接可以是不同的宽度。第一个和最后一个链接应分别与<ul> 的开头和结尾对齐(意味着链接不居中),如下所示:

|left side..right side|

link1 link1 link3 link4

除非我弄错了,否则我认为在 CSS2 中没有办法做到这一点。但是有没有办法在 CSS3 中做到这一点?否则我需要用 Javascript 来做。

【问题讨论】:

    标签: css navigation hyperlink


    【解决方案1】:

    如果您坚持使用 CSS3,可以使用 box-flex。由于这并未在所有浏览器中完全实现,因此属性仍然具有 -moz-webkit 前缀。

    这是实现它的 CSS:

    ul {
      display: box;
    }
    
    li {
      box-flex: 1;
    }
    

    但由于并非所有浏览器都使用它,所以你必须添加-moz-box-flex-webkit-box-flex等。

    这是一个演示:http://jsfiddle.net/tBu4a/9/

    【讨论】:

    • 感谢搅拌机。这个解决方案似乎与下面的 robertc 有相同的问题——链接不与容器的左右边缘齐平排列,同时间隔相等。我最终编写了一个 JQuery 脚本来执行此操作,但如果有办法在 CSS3 中执行此操作,我仍然感兴趣!
    • 你这是什么意思?你能发布你的解决方案吗?我不是很明白你的意思...
    • 搅拌机,抱歉,如果我没有很好地解释这一点。请参阅我在下面发布的 robertc 下的评论,了解更多内容。
    • 哦,好的。为此,您需要添加交替的空白li 元素并给它们一个box-flex: 1。带有链接的lis 将是正常的display: inline-blocks。让我编辑我的解决方案。
    【解决方案2】:

    这对 CSS2 来说很简单:

    ul {
        display: table;
        width: 100%;
    }
    li {
        display: table-cell;
    }
    a {
        display: block;
    }
    

    Here's a working example。问题不在于 CSS2 没有办法做到这一点,而在于 IE 直到版本 8 才完全支持 CSS2。

    --编辑

    好的,现在我想我明白你的要求了:

    ul {
        display: table;
        width: 100%;
        border: 0;
        padding: 0;
        background-color: blue;
    }
    li {
        display: table-cell;
        border: 0;
        padding: 0;
        text-align: center;
    }
    li:first-child {
        text-align: left;
    }
    li:last-child {
        text-align: right;
    }
    a {
        display: block;
        padding: 0.25em 0;
        background-color: white;
        text-decoration: none;
    }
    

    Here it is in action。我已根据您的 cmets 将所有边框和填充清零,您可以重新添加一些,但您当然需要将第一个链接的左边框/填充和右侧的右边框/填充清零使用li:first-childli:first-child a(以及相反的last-child)链接。

    【讨论】:

    • 谢谢罗伯特。这很接近,但不是我想要的。您提供的示例中的链接不会占用封闭容器(<ul>)的整个宽度。第一个和最后一个链接的左右边缘需要与封闭容器的左右边缘齐平,同时仍然保持均匀间隔。这是这个问题的棘手部分。
    • @NorthK 它们确实占据了整个可用宽度,但容器上有一个边框(这样你就可以看到它们占据了所有可用宽度)。如果您不想看到它们,只需将所有边框设置为 0,this example 演示如果您在 navul 元素上设置背景颜色,它不会在 a 元素后面显示.
    • 嗨 robertc,“链接六”中的“x”应该与容器的右侧齐平,所有链接均等间距。在您发布的链接的示例代码中,“链接六”没有与容器的右侧对齐。有关我编写的 Javascript 解决方案,请参阅 [链接]stackoverflow.com/questions/6513438/…。尽管如此,仍然想让它在 CSS 中工作!再次感谢。
    • 非常感谢您的努力 robertc - 这真的很接近。但是由于第一个和最后一个列表项的文本对齐,链接的间距不相等。然而,我知道需要文本对齐,以便链接与容器的边缘对齐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多