2014-09-25 113 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