【发布时间】:2013-08-30 09:19:30
【问题描述】:
更新:根据以下答案之一简化了 HTML 和 CSS。但是问题仍然存在。
我有一个类似这样的工作导航:
item11item2item3 Centered item4item5item6
我想在项目之间添加填充,使其看起来像这样:
item1 item2 item3 Centered item4 item5 item6
left 上的项目右对齐。 右边的项目是left-justified。
问题
- 如果我使用
float: right;来证明列表的合理性,我会得到item3 item2 item1。 - 如果我使用
float: left;并将容器宽度设置为auto,我可以获得正确的布局,但只有当我使用px填充时。 -
当我使用像
padding-left: 3%;这样的%填充时,它会中断并且看起来像这样:item1 item2 Centered item4 item5 item6 item3
这是我的 HTML:
<div class="container">
<nav>
<ul class="left">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<ul class="center">
<li>Centered</li>
</ul>
<ul class="right">
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
</ul>
</nav>
</div>
这是我的 CSS:
/* Reset */
html, body, nav, li {
margin: 0; padding: 0; border: 0;
}
li {
list-style-type: none;
list-style-position: outside;
}
/* Styles */
.container {
width: 100%;
height: auto;
}
nav {
width: 80%;
margin: 0 auto;
}
nav > ul.left {
position: absolute;
right: 55%;
}
nav > ul.left > li {
float: left;
padding-right: 5%;
}
.center {
position: absolute;
left: 45%;
width: 10%;
}
.center li {
text-align: center;
}
nav > ul.right {
position: absolute;
left: 55%;
width: 45%;
}
nav > ul.right > li {
float: left;
padding-left: 5%;
}
注意事项:
- 我使用绝对定位和容器来保持“居中”完全居中,即使左右导航项的宽度不相同。
- 我使用基于 % 的宽度,因为它是一种灵活的布局(响应式)
- 上面的代码工作正常,但我真的很想基于填充百分比,所以它很灵活。
所以它似乎li-container div 正确地继承了宽度并在我使用像素时考虑了填充,但在我使用百分比时却没有。这是典型的行为吗?解决办法是什么?
Here's a jsFiddle 以防你想玩弄它。
附加更新:
主要问题似乎是需要将“左”项右对齐。如果我使用float:right,那么我会得到相反的顺序,这不好。如果我在左边的项目上使用float:left,那么顺序是正确的,但我需要从容器中删除显式宽度,或者项目不是右对齐的。删除显式容器宽度会导致我遇到的问题。
【问题讨论】:
-
<div>不是<ul>的有效子代。唯一允许的内容是:“零个或多个 li 和脚本支持元素。”,参见4.5.6 The ul element。 -
从 ul > li nav 更新到 div > li nav 能解决问题吗?
-
将代码更新为
nav > li- 我认为现在有效,对吧? -
li元素的唯一有效父元素是:ul, li, menu,参见 w3.org li – list item "Permitted parent elements"
标签: html css navigation padding