CSS 列表导航:所有项目左对齐,但最后一项右对齐
CSS List Navigation: Align All Items Left, but Last Item Right
我有一个简单的列表驱动导航,如下所示:
Page 1 Page 2 Page 3 My Account
我需要'My Account'向右浮动:
Page 1 Page 2 Page 3 My Account
列表如下:
<nav class="nav">
<ul class="menu">
<li>Page 1</li>
<li>Page 2</li>
<li>Page 3</li>
<li>My Account</li>
</ul>
</nav>
我在最后一个列表项中添加了一个 float:right,最初看起来不错,直到我将屏幕缩小了一点。但随后它迫使前三项向下一点,所以 'My Account' 仍然对齐,但比其他三项高一点。像这样:
My Account
Page 1 Page 2 Page 3
编辑之后:
实际列表比我上面发布的要复杂。它有下拉菜单和很多样式。这是 CSS:
.nav, .menu {
height: 54px;
}
.nav {
background: #004F9D;
clear: both;
display: block;
position: relative;
}
.nav ul ul {
display: none;
}
.nav ul li:hover > ul {
display: block;
}
.nav ul ul {
background: white;
padding: 0;
position: absolute;
top: 100%;
z-index:1000;
background-color: #ffffff;
border: 1px solid #cccccc;
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
min-width: 160px;
font-size: 14px;
}
.nav ul ul li {
float: none;
position: relative;
}
.nav ul ul li a {
color: black;
}
.nav ul ul li a:hover {
background: #428BCA;
}
.menu {
clear: both;
display: block;
overflow: hidden;
}
.menu li {
clear: none;
display: block;
float: left;
padding: 10px 0;
}
.menu li img {
padding-right:10px;
}
.menu li:hover {
background-color: #00aedd;
}
.menu a, .menu span {
background-repeat: no-repeat;
clear: both;
display: block;
color: #fff;
font-size: 14px;
height: 34px;
line-height: 35px;
overflow: hidden;
text-decoration: none;
}
.menu a {
padding-left: 15px;
padding-right: 15px;
}
.menu span {
padding-right: 15px;
}
最好的方法是 divide 整个 div 分成相等的部分,前 3 项使用 text-align: center;
,然后text-align: right
到最后一个。不要使用 float:left
和 float:right
,因为它会破坏网站的响应特性。
这是使用 css 对齐 属性、flexbox 的解决方案。它比使用浮动更简洁,因为它使所有内容都保持在文档流中。请注意它支持 IE 浏览器 9 及更高版本
.menu {
display: -webkit-flex;
display: -ms-flex;
display: flex;
}
.menu li {
display: inline-block;
list-style: none;
}
.menu li:not(:last-of-type) {
margin: 0 5px;
}
.menu li:last-of-type {
margin-left: auto;
}
我有一个简单的列表驱动导航,如下所示:
Page 1 Page 2 Page 3 My Account
我需要'My Account'向右浮动:
Page 1 Page 2 Page 3 My Account
列表如下:
<nav class="nav">
<ul class="menu">
<li>Page 1</li>
<li>Page 2</li>
<li>Page 3</li>
<li>My Account</li>
</ul>
</nav>
我在最后一个列表项中添加了一个 float:right,最初看起来不错,直到我将屏幕缩小了一点。但随后它迫使前三项向下一点,所以 'My Account' 仍然对齐,但比其他三项高一点。像这样:
My Account
Page 1 Page 2 Page 3
编辑之后:
实际列表比我上面发布的要复杂。它有下拉菜单和很多样式。这是 CSS:
.nav, .menu {
height: 54px;
}
.nav {
background: #004F9D;
clear: both;
display: block;
position: relative;
}
.nav ul ul {
display: none;
}
.nav ul li:hover > ul {
display: block;
}
.nav ul ul {
background: white;
padding: 0;
position: absolute;
top: 100%;
z-index:1000;
background-color: #ffffff;
border: 1px solid #cccccc;
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
min-width: 160px;
font-size: 14px;
}
.nav ul ul li {
float: none;
position: relative;
}
.nav ul ul li a {
color: black;
}
.nav ul ul li a:hover {
background: #428BCA;
}
.menu {
clear: both;
display: block;
overflow: hidden;
}
.menu li {
clear: none;
display: block;
float: left;
padding: 10px 0;
}
.menu li img {
padding-right:10px;
}
.menu li:hover {
background-color: #00aedd;
}
.menu a, .menu span {
background-repeat: no-repeat;
clear: both;
display: block;
color: #fff;
font-size: 14px;
height: 34px;
line-height: 35px;
overflow: hidden;
text-decoration: none;
}
.menu a {
padding-left: 15px;
padding-right: 15px;
}
.menu span {
padding-right: 15px;
}
最好的方法是 divide 整个 div 分成相等的部分,前 3 项使用 text-align: center;
,然后text-align: right
到最后一个。不要使用 float:left
和 float:right
,因为它会破坏网站的响应特性。
这是使用 css 对齐 属性、flexbox 的解决方案。它比使用浮动更简洁,因为它使所有内容都保持在文档流中。请注意它支持 IE 浏览器 9 及更高版本
.menu {
display: -webkit-flex;
display: -ms-flex;
display: flex;
}
.menu li {
display: inline-block;
list-style: none;
}
.menu li:not(:last-of-type) {
margin: 0 5px;
}
.menu li:last-of-type {
margin-left: auto;
}