0
這裏有一個Codepen鏈接,顯示我有什麼至今: http://codepen.io/alih/pen/xijbm如何「居中」這個可變寬度菜單的子元素?
編輯:這裏有一個新的Codepen鏈接,與列表項& ULS代替嵌套的div。我很歡迎有關如何在不出現額外標記的情況下提出建議,但我主要關心的是如何將下拉麪板居中對準達到其上方菜單的邊界。 http://codepen.io/alih/pen/KzsAc
我建立一個下拉菜單,具有以下特點:
- 多層次,但是下拉的只有一個級別。子列表將直接顯示在其父元素下面。
- 菜單的父級將是可變寬度的列表項
- 的下拉列表會對他們一個背景是永遠不變的寬度
- 的下拉列表將顯示爲「連接「連接到頂層菜單項左邊和右邊的帶有」繩索「的父元素。
- 這裏是我遇到的問題:下拉列表中的背景將以這些「繩索」爲中心。在Codepen演示中,這意味着綠色&灰色面板將以將面板「連接」到上述列表項目的邊框爲中心。
這個菜單需要儘可能早在IE7上工作,雖然我可能公然使用無關的div來達到我的目標,但我可能不會使用JavaScript(通常我會如何解決這個問題:減去寬度從下拉列表的寬度中選擇父項目,並向該下拉列表中添加該數量的負邊距)。
我想知道的是:有沒有什麼辦法可以單獨使用HTML & CSS?
我的CSS(編輯):
.other {
float:left
}
ul#topnav,
ul#topnav li,
ul#topnav ul {
list-style: none;
margin: 0;
padding: 0;
}
#topnavblock {
background:grey;
width:100%;
position:relative;
z-index:700;
}
#topnav {
z-index:2;
}
#topnav > li > a {
border-right: 1px solid #999;
}
#topnav li a:hover {
color: #444;
text-shadow: -1px -1px 1px #ffffff;
}
#topnav [class^="current"] {
background: lightyellow;
}
#topnav li a {
color: #893200;
text-decoration: none;
padding: 8px 25px 5px 25px;
text-align: center;
display: block;
text-shadow: 1px 1px 1px #ffffff;
font: bold 14px 'Arvo', serif;
}
#topnav [class^="current"] > a {
color: #FF6600;
}
#topnav [class^="current"] > a:hover {
color: #FF6600;
}
ul#topnav {
position: relative;
z-index: 597;
float: left;
left:20px;
padding: 0;
}
ul#topnav > li {
float: left;
min-height: 1px;
line-height: 1.3em;
vertical-align: middle;
}
ul#topnav > li {
padding:10px 0 14px 0;
}
ul#topnav li.hover,
ul#topnav li:hover {
position: relative;
z-index: 599;
cursor: default;
}
ul#topnav ul {
visibility: hidden;
position: absolute;
top: 100%;
left: 0;
z-index: 598;
width: 100%;
}
ul#topnav li .navwrap1 {
background: yellow;
margin-top: -23px;
padding-top: 23px;
width: 210px;
position: relative;
top: 15px;
}
ul#topnav li .navwrap2 {
background:grey;
padding-bottom: 33px;
}
ul#topnav > li > ul {
border-right: 3px solid grey;
margin-top: -11px;
margin-left: 0;
padding-left: 0;
}
ul#topnav ul .navwrap3 {
border-left:3px solid grey;
padding-top:60px;
}
ul#topnav .navwrap2 li {
float: none;
background:lightgreen;
width:100%;
}
ul#topnav ul ul {
position:relative;
top: 1px;
left: 0;
}
ul#topnav ul li a {
padding: 10px 10px 10px 15px;
}
ul#topnav ul ul li a {
padding: 10px 5px 10px 20px;
}
ul#topnav ul ul ul li a {
padding-left:20px;
}
ul#topnav li:hover ul {
visibility: visible;
}
我加價(簡寫,整個菜單可見在上面的CodePen鏈接):
<div id="topnavblock">
<ul id="topnav">
<li><a href="#">Here is a menu item</a>
<ul>
<li class="navwrap4">
<ul class="navwrap3">
<li class="navwrap1">
<ul class="navwrap2">
<li><a href="#">Menu item 1</a></li>
<li><a href="#">Another menu item of a different length</a>
<ul>
<li><a href="#">Sub-menu 2</a></li>
<li><a href="#">Sub-menu 2</a>
<ul>
<li>Third level nested menu</li>
<li>This also has a child of different length</li>
</ul>
</li>
<li><a href="#">Sub-menu 2</a></li>
</ul>
</li>
<li><a href="#">Sub-menu 3</a></li>
</ul><!--end navwrap2-->
</li> <!--end navwrap1-->
</ul><!--end navwrap3-->
</li><!--end navwrap4-->
</ul>
</li>
<li><a href="#">Item</a>
<ul>
<li class="navwrap4">
<ul class="navwrap3">
<li class="navwrap1">
<ul class="navwrap2">
<li><a href="#">Sub-menu 3</a></li>
<li><a href="#">Sub-menu 3</a>
<ul>
<li><a href="#">Sub-menu 4</a></li>
<li><a href="#">Sub-menu 4</a></li>
<li><a href="#">Sub-menu 4</a></li>
</ul>
</li>
<li><a href="#">Sub-menu 3</a></li>
</ul><!--end navwrap2-->
</li> <!--end navwrap1-->
</ul><!--end navwrap3-->
</li><!--end navwrap4-->
</ul>
</li>
</ul>
你確實知道將div放入ul的直接子元素是無效的html代碼 – Pete
將其他塊級別的後裔放入UL中是否同樣無效?如果您可以建議如何達到我以後的效果(上面詳細描述)而沒有無效的標記,我會很樂意用更好的東西來替換我的無效代碼。 - >編輯評論說:謝謝你的提醒,但現在我更關心的可能比有效。無論如何,如果我不能將孩子列表居中,我將完全需要另一種方法。 – Ila