2014-09-25 79 views
3

我有一個居中的第三級導航,顯示在第二級懸停時顯示。我想隱藏什麼,直到它直接懸停在它上面?第三級居中菜單下拉導航問題

P.S. - 我知道代碼會比較乾淨,就像我在網上看到的一樣,但不知道如何清理它,所以我希望代碼清晰。

謝謝!

JS小提琴:DEMO

#centeredmenu { 
    clear:both; 
    float:left; 
    margin:0 0 30px 0; 
    padding:0; 
    border-bottom:1px solid #000; /* black line below menu */ 
    width:100%; 
    font-family:Arial, Helvetica, sans-serif; /* Menu font */ 
    z-index:1000; /* This makes the dropdown menus appear above the page content below */ 
    position:relative; 
    background-color: #000; 
} 

/* Top menu items */ 
#centeredmenu ul { 
    margin:0; 
    padding:0; 
    list-style:none; 
    float:right; 
    position:relative; 
    right:50%; 
} 
#centeredmenu ul li { 
    margin:0 0 0 1px; 
    padding:0; 
    float:left; 
    position:relative; 
    left:50%; 
    top:1px; 
} 
#centeredmenu ul li a { 
    display: block; 
    margin: 0; 
    padding: 10px 20px; 
    font-size: 1em; 
    line-height: 1em; 
    text-decoration: none; 
    color: #fff; 
    font-weight: bold; 
    border-bottom: 1px solid #000; 
} 
#centeredmenu ul li a:hover { 
    background: #a3c2df; /* Top menu items background color */ 
    color: #fff; 
    border-bottom: 1px solid #03f; 
} 
#centeredmenu ul li:hover a { 
    background: #a3c2df; /* Top menu items background color */ 
    color: #000; 
    border-bottom: 1px solid #03f; 
} 

/* 2nd Level Items */ 
#centeredmenu ul ul { 
    display:none; /* Submenus are hidden by default */ 
    position:absolute; 
    left:0; 
    right:auto; /* Resets the right:50% on the parent ul */ 
    width:12em; /* Width of the drop-down menus */ 
} 
#centeredmenu ul ul li { 
    left:auto; /*Resets the left:50% on the parent li */ 
    margin:0; /* Resets the 1px margin from the top menu */ 
    clear:left; 
    width:100%; 
} 

/* 3rd Level Items */ 
#centeredmenu ul ul ul { 
    display:none; /* Submenus are hidden by default */ 
    position:absolute; 
    top:0; 
    left:155px; 
    right:auto; /* Resets the right:50% on the parent ul */ 
    width:12em; /* Width of the drop-down menus */ 
} 
#centeredmenu ul ul ul li { 
    left:auto; /* Resets the left:50% on the parent li */ 
    margin:0; /* Resets the 1px margin from the top menu */ 
    clear:left; 
    width:100%; 
} 

#centeredmenu ul ul li a, 
#centeredmenu ul li.active li a, 
#centeredmenu ul li:hover ul li a { 
    font-size:0.9em; 
    font-weight:normal; /* Resets the bold set for the top level menu items */ 
    background:#eee; 
    color:#444; 
    line-height:1.4em; /* Overwrite line-height value from top menu */ 
    border-bottom:1px solid #ddd; /* Submenu item horizontal lines */ 
} 
#centeredmenu ul ul li a:hover, 
#centeredmenu ul li.active ul li a:hover, 
#centeredmenu ul li:hover ul li a:hover { 
    background: #a3c2df; /* Submenu items background color */ 
    color:#000; /* Submenu items hover color */ 
} 

/* Flip the last 2nd menu so it stays within the page */ 
#centeredmenu ul ul.last { 
    left:auto; /* Resets left:0; value */ 
    right:0; /* Set right value instead */ 
} 

/* Make the 2nd menus appear on hover */ 
#centeredmenu ul li:hover ul { 
    display:block; /* Show the submenus */ 
} 

/* Make the 3rd menus appear on hover */ 
#centeredmenu ul li:hover ul ul{ 
    display:block; /* Show the submenus */ 
} 
<div id="centeredmenu"> 
    <ul> 
     <li><a href="#">Home</a></li> 
     <li><a href="#">Documents</a> 
     <ul> 
      <li><a href="#">Reading</a></li> 
      <li><a href="#">Writing</a> 
       <ul>   
        <li><a href="#">Excerpt 1</a></li> 
        <li><a href="#">Excerpt 2</a></li> 
        <li><a href="#">Excerpt 3</a></li> 
        <li><a href="#">Excerpt 4</a></li> 

       </ul> 
      </li> 

     </ul> 
     </li> 
    </ul> 
</div> 

回答

0

#centeredmenu ul li:hover ul在你的CSS菜單的兩個層次相匹配。 li:hover ul部件使瀏覽器搜索ul標籤,其中li:hover作爲祖先。這不一定是直接的父母,它也可以是祖父母,偉大的祖父母等。試着看看你是否明白爲什麼這兩種菜單級別都適用。 http://learn.shayhowe.com/html-css/getting-to-know-css/可能會給你的CSS選擇器是如何工作的

一些瞭解速戰速決是改變#centeredmenu ul li:hover ul#centeredmenu ul li:hover > ul和刪除您有#centeredmenu ul li:hover ul ul

我今天在玩類似的東西,看我的例子http://codepen.io/ckuijjer/pen/huyxn。我試圖使用大多數類和幾乎沒有任何元素樣式。

+0

謝謝@ckuijjer的解釋和說明。我一定會閱讀該頁面資源鏈接。令我感到困惑的是,我仍然放置了所有各種CSS組合,即ul.last,li:hover等。 大部分類的使用甚至更先進 - Codepen很好! – alondonb 2014-09-25 20:44:47

1

#centeredmenu ul li:hover ul意味着懸停元素(無論是深度)以下的所有ul元素!這反過來意味着當您將鼠標懸停在li上時,該li元素的每個ul孩子都將具有關聯的規則。 #centeredmenu ul li:hover > ul表示第一個後代(> - 僅限第一個後代)!這可以防止懸停傳播低於預期水平。 「#centeredmenu ul li:hover ul ul」具有相同的問題,除了開始傳播2級別並且一直持續到結束。

#centeredmenu { 
 
    clear: both; 
 
    float: left; 
 
    margin: 0 0 30px 0; 
 
    padding: 0; 
 
    border-bottom: 1px solid #000; 
 
    /* black line below menu */ 
 
    width: 100%; 
 
    font-family: Arial, Helvetica, sans-serif; 
 
    /* Menu font */ 
 
    z-index: 1000; 
 
    /* This makes the dropdown menus appear above the page content below */ 
 
    position: relative; 
 
    background-color: #000; 
 
} 
 
/* Top menu items */ 
 

 
#centeredmenu ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
    float: right; 
 
    position: relative; 
 
    right: 50%; 
 
} 
 
#centeredmenu ul li { 
 
    margin: 0 0 0 1px; 
 
    padding: 0; 
 
    float: left; 
 
    position: relative; 
 
    left: 50%; 
 
    top: 1px; 
 
} 
 
#centeredmenu ul li a { 
 
    display: block; 
 
    margin: 0; 
 
    padding: 10px 20px; 
 
    font-size: 1em; 
 
    line-height: 1em; 
 
    /* [disabled]background: #ddd; */ 
 
    text-decoration: none; 
 
    color: #fff; 
 
    font-weight: bold; 
 
    border-bottom: 1px solid #000; 
 
} 
 
#centeredmenu ul li a:hover { 
 
    background: #a3c2df; 
 
    /* Top menu items background colour */ 
 
    color: #fff; 
 
    border-bottom: 1px solid #03f; 
 
} 
 
#centeredmenu ul li:hover a { 
 
    background: #a3c2df; 
 
    /* Top menu items background colour */ 
 
    color: #000; 
 
    border-bottom: 1px solid #03f; 
 
} 
 
/* 2nd Level Items */ 
 

 
#centeredmenu ul ul { 
 
    display: none; 
 
    /* Sub menus are hiden by default */ 
 
    position: absolute; 
 
    left: 0; 
 
    right: auto; 
 
    /*resets the right:50% on the parent ul */ 
 
    width: 12em; 
 
    /* width of the drop-down menus */ 
 
} 
 
#centeredmenu ul ul li { 
 
    left: auto; 
 
    /*resets the left:50% on the parent li */ 
 
    margin: 0; 
 
    /* Reset the 1px margin from the top menu */ 
 
    clear: left; 
 
    width: 100%; 
 
} 
 
/* 3rd Level Items */ 
 

 
#centeredmenu ul ul ul { 
 
    display: none; 
 
    /* Sub menus are hiden by default */ 
 
    position: absolute; 
 
    top: 0; 
 
    left: 155px; 
 
    right: auto; 
 
    /*resets the right:50% on the parent ul */ 
 
    width: 12em; 
 
    /* width of the drop-down menus */ 
 
} 
 
#centeredmenu ul ul ul li { 
 
    left: auto; 
 
    /*resets the left:50% on the parent li */ 
 
    margin: 0; 
 
    /* Reset the 1px margin from the top menu */ 
 
    clear: left; 
 
    width: 100%; 
 
} 
 
#centeredmenu ul ul li a, 
 
#centeredmenu ul li.active li a, 
 
#centeredmenu ul li:hover ul li a { 
 
    font-size: 0.9em; 
 
    font-weight: normal; 
 
    /* resets the bold set for the top level menu items */ 
 
    background: #eee; 
 
    color: #444; 
 
    line-height: 1.4em; 
 
    /* overwrite line-height value from top menu */ 
 
    border-bottom: 1px solid #ddd; 
 
    /* sub menu item horizontal lines */ 
 
} 
 
#centeredmenu ul ul li a:hover, 
 
#centeredmenu ul li.active ul li a:hover, 
 
#centeredmenu ul li:hover ul li a:hover { 
 
    background: #a3c2df; 
 
    /* Sub menu items background colour */ 
 
    color: #000; 
 
    /* Sub menu items hover colour */ 
 
} 
 
/* Flip the last 2nd menu so it stays within the page */ 
 

 
#centeredmenu ul ul.last { 
 
    left: auto; 
 
    /* reset left:0; value */ 
 
    right: 0; 
 
    /* Set right value instead */ 
 
} 
 
/* Make the 2nd menus appear on hover */ 
 

 
#centeredmenu ul li:hover > ul { 
 
    display: block; 
 
    /* Show the sub menus */ 
 
} 
 
#centeredmenu ul li ul li ul { 
 
    display: none; 
 
} 
 
#centeredmenu ul li ul li:hover ul { 
 
    display: block; 
 
}
<div id="centeredmenu"> 
 
    <ul> 
 
    <li><a href="#">Home</a> 
 
    </li> 
 
    <li><a href="#">Documents</a> 
 
     <ul> 
 
     <li><a href="#">Reading</a> 
 
     </li> 
 
     <li><a href="#">Writing</a> 
 
      <ul> 
 
      <li><a href="#">Excerpt 1</a> 
 
      </li> 
 
      <li><a href="#">Excerpt 2</a> 
 
      </li> 
 
      <li><a href="#">Excerpt 3</a> 
 
      </li> 
 
      <li><a href="#">Excerpt 4</a> 
 
      </li> 
 

 
      </ul> 
 
     </li> 
 

 
     </ul> 
 
    </li> 
 
    </ul> 
 
</div>

+0

@emmanuel它的作品不是嗎? – 2014-09-25 19:42:09

+0

@emmanuel你說得對,我很抱歉。現在只是有點脾氣暴躁。 ('在這裏輸入代碼'是因爲它不會讓我發佈小提琴鏈接' - 在一天結束時可能是一個好主意)。 – 2014-09-25 19:48:08

+0

謝謝@emmanuel,這正是我想要實現的。所以,如果我理解正確的 UL李:懸停> UL 是所有DD菜單(第二,第三,第四等)的行動,但我仍然需要最後和倒數第二個CSS #centeredmenu ul li ul li ul和#centeredmenu ul li li li:懸停ul來控制何時。 這是正確的嗎?或者最後一個也應該> ul呢? – alondonb 2014-09-25 21:02:16