2013-01-08 18 views
0

後,我有這樣的CSS:如何使一個CSS菜單仍然可見孩子已被點擊

#menuBar { 
    /*width: 960px;*/ 
    height: 35px; 
    clear: both; 
} 

ul#nav { 
    float: left; 
    width: 100%; 
    margin: 0; 
    padding: 0; 
    list-style: none; 
    background-color: #0068b4; 
} 

ul#nav li { 
    display: inline; 
} 

ul#nav li a { 
    float: left; 
    line-height: 35px; 
    color: #ffffff; 
    text-decoration: none; 
    margin: 0; 
    padding: 0 30px; 
    background-color: #0068b4; 
} 

/* APPLIES THE ACTIVE STATE TO PARENT*/ 
ul#nav .currentParent a, ul#nav li:hover > a { 
    color: #ffffff; 
    text-decoration: none; 
    background: #005899; 
} 

/* THE SUBMENU LIST HIDDEN BY DEFAULT */ 
ul#nav ul { 
    display: none; 
} 

/* WHEN THE FIRST LEVEL MENU ITEM IS HOVERED, THE CHILD MENU APPEARS */ 
ul#nav li:hover > ul { 
    position: absolute; 
    display: block; 
    width: 97%; 
    height: 35px; 
    margin: 35px 0 0 0; 
    background-color: #e0e0e0; 
} 

ul#nav li:hover > ul li a { 
    float: left; 
    line-height: 35px; 
    color: #000000; 
    text-decoration: none; 
    margin: 0; 
    padding: 0 30px 0 30px; 
    background-color: #e0e0e0; 
} 

/* APPLIES THE ACTIVE STATE TO CHILD*/ 
ul#nav li ul li.currentChild a, ul#nav li:hover > ul li a:hover { 
    color: #000000; 
    text-decoration: none; 
    background-color: #afafaf; 
} 

而這個HTML:

<div id="menuBar"> 
    <ul id="nav"> 
    <li><a href="javascript: void;">Menu 1</a> 
     <ul> 
      <li><a href="menu1submenuitem1.html">Menu 1 Submenu item 1</a></li> 
      <li><a href="menu1submenuitem2.html">Menu 1 Submenu item 2</a></li> 
      <li><a href="menu1submenuitem3.html">Menu 1 Submenu item 3</a></li> 
     </ul> 
    </li> 
    <li><a href="javascript: void;">Menu 2</a> 
     <ul> 
      <li><a href="menu2submenuitem1.html">Menu 2 Submenu item 1</a></li> 
      <li><a href="menu2submenuitem2.html">Menu 2 Submenu item 2</a></li> 
     </ul> 
    </li> 
    <li class="currentParent"><a href="javascript: void;">Menu 3</a> 
     <ul> 
      <li><a href="menu3submenuitem1.html">Menu 3 Submenu item 1</a></li> 
      <li class="currentChild"><a href="menu3submenuitem2.html">Menu 3 Submenu item 2</a></li> 
      <li><a href="menu3submenuitem3.html">Menu 3 Submenu item 3</a></li> 
     </ul> 
    </li> 
    </ul> 
</div> 

我用這個來顯示兩級水平菜單。我想要實現的是,當點擊第二級選項時,我希望父級和子級本身保持突出顯示。爲此,我實際上在我的ASP.net頁面後面的代碼中構建了菜單的HTML,並使用樣式:currentParent和currentChild來突出顯示它們。這是工作,我無法弄清楚是如何使包含被點擊的孩子保持可見的第二級。我試過在很多地方加入display: none,但沒有任何工作。我想知道是否有人可以幫助我,並給我一些建議,我需要添加到CSS來實現這一點的修改?

編輯1:

我已經完成了代碼,並審查了它的工作(你可以在這裏看到:http://jsfiddle.net/cesarvinas/ZQWe7/)。您可以在我申請的類當前父到上級菜單菜單3和類currentChild到子菜單項菜單3子菜單項2的HTML代碼中看到。有了這個,父母和孩子現在突出顯示。此外,我想要的是包含子菜單項(灰色)的行:菜單3子菜單項目1,菜單3子菜單項目2菜單3子菜單項目3仍然可見。

正如我在主要文章中解釋的,我已經將代碼添加到ASP .net頁面後面的代碼中,以構建HTML並在必要時分配CSS類。

有沒有辦法讓我可以分配給父類<li>(在這個例子中,菜單3家長),以保持其子可見的CSS類?

EDIT 2個

感謝我在這裏收到,特意從3dgoo的幫助下,這幾乎是完成的。我在這裏更新了示例:http://jsfiddle.net/cesarvinas/ZQWe7/5/。但是,爲了使不是最新的子菜單項目保持銀色(而不是像3dgoo示例中的那樣是藍色),我必須創建另一個CSS類「.notselected」,用於那些未被選中的子菜單項。我的問題是:有沒有辦法實現相同的,而不必添加額外的CSS類?這是我做了什麼:

ul#nav li ul li.notselected a, 
ul#nav li:hover > ul li a { 
    float: left; 
    line-height: 35px; 
    color: #000000; 
    text-decoration: none; 
    margin: 0; 
    padding: 0 30px 0 30px; 
    background-color: #e0e0e0; 
} 

和HTML:

<li class="currentParent"><a href="#">Menu 3</a> 
    <ul> 
     <li class="notselected"><a href="#">Menu 3 Submenu item 1</a></li> 
     <li class="currentChild"><a href="#">Menu 3 Submenu item 2</a></li> 
     <li class="notselected"><a href="#">Menu 3 Submenu item 3</a></li> 
    </ul> 
</li> 

我這個在CSS嘗試:

ul#nav li ul li a, 
ul#nav li:hover > ul li a { 
    float: left; 
    line-height: 35px; 
    color: #000000; 
    text-decoration: none; 
    margin: 0; 
    padding: 0 30px 0 30px; 
    background-color: #e0e0e0; 
} 

,並從HTML移除class="notselected" ,但它不起作用。這是爲什麼?

謝謝。

+0

您當前的代碼無效,請參閱:http://jsfiddle.net/kSWAd/1/。請更新/修復它,並更清楚地解釋你想要做什麼。 – Shomz

+0

對不起,舒姆茲。我已經修復了帖子中的代碼,並且創建了這個:http://jsfiddle.net/cesarvinas/ZQWe7/,以便您可以查看。我還在** EDIT 1 **中添加了更多解釋,請讓我知道現在它是否更清晰。我希望你能幫忙。 –

+0

沒問題,只是想幫忙。現在更清楚了,我會給你寫一個答案。 – Shomz

回答

0

您可以使用下面的CSS選擇器ul#nav li.currentParent > ul像這樣做:

CSS

... 
ul#nav li.currentParent > ul, // Add this 
ul#nav li:hover > ul { 
    position: absolute; 
    display: block; 
    width: 97%; 
    height: 35px; 
    margin: 35px 0 0 0; 
    background-color: #e0e0e0; 
} 
ul#nav li:hover > ul { // And add these three lines 
    z-index: 10; 
} 
... 

Demo

+0

非常感謝您的幫助,3dgoo。我已經能夠進行額外的更改,因此所選父項中的其他子菜單項顯示爲銀色而不是藍色。不過,我還有一個問題,因爲我必須創建一個「未選中」的類,以便將它添加到未選定的子菜單項中以保持它們的銀色。你能否請檢查我的第二個編輯,並告訴我是否有另一種方法來實現同樣的功能而不創建額外的類? –

+0

@CesarVinas - 你在這裏。稍後我會寫一個解釋:http://jsfiddle.net/ZQWe7/21/ – 3dgoo

+0

再次感謝,3dgoo。我在CSS中看到了不止一處變化,所以我很樂意解釋。隨時你可以! :) –

0

所以,你想從第二排被點擊項目突出顯示,點擊後可看到適當的第二行。

如果菜單將使用標準鏈接(每次點擊刷新頁面),也許最好使用ASP變量來表示當前頁面,並根據該變量進行CSS修改以使正確的子菜單可見,並且正確的項目突出顯示(您可以從3dgoo的CSS示例選擇器ul#nav li.currentParent > ul開始)。

第二種情況是您不刷新點擊頁面(例如,使用AJAX僅加載頁面的一部分)。在這種情況下,您必須使用Javascript/jQuery來監聽點擊並相應地更改類。這意味着當您單擊某個項目時,其父項li元素當然需要成爲唯一的currentChild類及其父項currentParent

編輯

您可以選擇所有的currentParent子錨這樣的:ul#nav li.currentParent ul li a再經過上currentChild添加懸停/積極作用。

+0

謝謝,舒姆茲。我的情況是第一個,是的,我已經使用變量來識別當前頁面。這方面沒有問題。我的問題實際上是CSS和我對樣式所做的修改來完成菜單欄演示文稿中的更改。我正在審覈3dgoo的建議,目前爲止它的工作原理除了可見行中的子菜單項目現在是藍色而非銀色以外,所以如果您有其他建議,則非常歡迎。 –

+1

你的意思是這樣的:http://jsfiddle.net/ZQWe7/13/? 我用'ul#nav li.currentParent ul li a'替換了CSS的'notselected'選擇器部分正好是!! – Shomz

+0

!這是最終結果:http://jsfiddle.net/cesarvinas/ZQWe7/18/ –

相關問題