我需要创建一个水平 css 下拉菜单,其中最右边的下拉列表右对齐而不是左对齐。
假设子 UL LI 比父 LI 长,它们将与父 LI 左对齐,而如果子 UL 的右边缘流过父 UL(菜单容器)的右边界,则子 UL 向右对齐父 LI 的边缘。
用例:具有 100% 屏幕宽度的流畅页面布局——不能有下拉菜单强制水平滚动。
例如
<ul id="menu">
<li>First Item
<ul>
<li>First sub item</li> # aligns to the left
</ul>
</li>
<li>Second Item
<ul>
<li>second list sub item</li> # aligns to the left edge of parent
</ul>
</li>
<li>Third Item
<ul>
<li>third list sub item</li> # aligns to the left edge of parent
</ul>
</li>
<li>Fourth Item
<ul> # expected to flow over right edge
<li>fourth list sub item</li> # aligns to the right of parent LI
</ul>
</li>
<li>Fifth Item
<ul> # expected to flow over right edge
<li>fifth list sub item</li> # aligns to the right of parent LI
</ul>
</li>
</ul>
和CSS:
#menu, #menu li {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
list-style:none;
}
#menu {
width:100%;
float:left;
position:relative;
padding:0;
margin:2em 0;
z-index:5;
}
#menu li {
position:relative;
float:left;
width:20%; /* 5 list items for main nav */
}
#menu li a {
text-decoration:none;
display:block;
}
#menu li a:hover, #menu li:hover a {
text-decoration:none;
}
#menu ul {
position:absolute;
left:-9999px;
margin:0;
padding:0;
}
#menu ul li {
border-top:1px solid #fff;
float:none;
width:100% !important;
}
#menu ul a {
white-spacing:nowrap;
font-weight:normal;
}
#menu li:hover ul {
left:0;
}
#menu ul li a {
padding:0.5em 1em;
}