我如何证明水平列表的合理性?

Max*_*xpm 42 html css justify html-lists

我有一个水平导航栏,如下所示:

<ul id = "Navigation">
    <li><a href = "About.html">About</a></li>
    <li><a href = "Contact.html">Contact</a></li>
    <!-- ... -->
</ul>
Run Code Online (Sandbox Code Playgroud)

我使用CSS删除子弹点并使其水平.

#Navigation li
{
    list-style-type: none;
    display: inline;
}
Run Code Online (Sandbox Code Playgroud)

我试图证明文本的合理性,以便每个链接均匀分布以填满整个ul空间.我尝试添加text: justify到选择器liul选择器,但它们仍然是左对齐的.

#Navigation
{
    text-align: justify;
}

#Navigation li
{
    list-style-type: none;
    display: inline;
    text-align: justify;
}
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为如果我使用text-align: right它,它的行为与预期的一样.

如何均匀分布链接?

thi*_*dot 35

你需要使用"技巧"来完成这项工作.

见: http ://jsfiddle.net/2kRJv/

HTML:

<ul id="Navigation">
    <li><a href="About.html">About</a></li>
    <li><a href="Contact.html">Contact</a></li>
    <!-- ... -->
    <li class="stretch"></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

CSS:

#Navigation
{
    list-style-type: none;
    text-align: justify;
    height: 21px;
    background: #ccc
}

#Navigation li
{
    display: inline
}
#Navigation .stretch {
    display: inline-block;
    width: 100%;

    /* if you need IE6/7 support */
    *display: inline;
    zoom: 1
}
Run Code Online (Sandbox Code Playgroud)

有关IE6/7技巧的详细信息:内联块在Internet Explorer 7,6中不起作用

  • @Maxpm:`text-align:justify` [仅适用](http://jsfiddle.net/R4449/)当你有多行"text"时(或者在这种情况下,`li`s是`inline`).因此,添加了另一个"线"(`.stretch`).`display:inline-block`允许`width:100%`工作. (9认同)
  • 抬头 - 如果你在每个`<li>`里面都有多个单词,那么这种方法就会变得很奇怪(全宽度证明). (5认同)
  • @JoshuaStewardson:幸运的是,这很容易修复:http://jsfiddle.net/thirtydot/2kRJv/822/.我刚刚注意到其他人也更早发布了相同的修复程序:http://stackoverflow.com/questions/6879467/how-do-i-justify-a-horizo​​ntal-list/14649908#14649908. (2认同)

Jos*_*ier 31

现代方法 - CSS3 Flexboxes

现在我们有了CSS3 flexbox,你不再需要采用技巧和变通方法来实现这一点.幸运的是,浏览器支持已经走过了漫长的道路,我们大多数人都可以开始使用flexbox.

只需将父元素设置displayflex,然后将justify-content属性更改为space-between或者space-around为了在子弹性框项目之间/周围添加空间.然后添加其他供应商前缀以获得更多浏览器支持.

使用justify-content: space-between - (这里的例子):

ul {
    list-style: none;
    padding: 0;
    margin: 0;
}
.menu {
    display: flex;
    justify-content: space-between;
}
Run Code Online (Sandbox Code Playgroud)
<ul class="menu">
    <li>About</li>
    <li>Contact</li>
    <li>Contact Longer Link</li>
    <li>Contact</li>
</ul>
Run Code Online (Sandbox Code Playgroud)


使用justify-content: space-around - (这里的例子):

ul {
    list-style: none;
    padding: 0;
    margin: 0;
}
.menu {
    display: flex;
    justify-content: space-around;
}
Run Code Online (Sandbox Code Playgroud)
<ul class="menu">
    <li>About</li>
    <li>Contact</li>
    <li>Contact Longer Link</li>
    <li>Contact</li>
</ul>
Run Code Online (Sandbox Code Playgroud)


Ben*_*ter 24

这也可以使用元素上的伪元素来实现ul:

ul {
    margin: 0;
    padding: 0;
    list-style-type: none;
    text-align: justify;
}

ul:after {
    content: "";
    width: 100%;
    display: inline-block;
}

li {
    display: inline;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

做就是了:

ul { width:100%; }
ul li {
  display:table-cell;
  width:1%;
}
Run Code Online (Sandbox Code Playgroud)