2016-01-21 66 views
1

我正在为一个学校项目制作一个网站,并且从前有少量编码经验。我听说有可能只使用CSS来实现下拉菜单而不使用JavaScript。让下拉停留在悬停上

/* Configuration of menu width */ 
 
html body ul.sf-menu ul, 
 
html body ul.sf-menu ul li { 
 
    width: 200px; 
 
} 
 
html body ul.sf-menu ul ul { 
 
    margin: 0 0 0 200px; 
 
} 
 
/* Framework for proper showing/hiding/positioning */ 
 

 
ul.sf-menu, 
 
ul.sf-menu * { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
ul.sf-menu { 
 
    display: block; 
 
    position: relative; 
 
} 
 
ul.sf-menu li { 
 
    display: block; 
 
    list-style: none; 
 
    float: left; 
 
    position: relative; 
 
} 
 
ul.sf-menu li:hover { 
 
    visibility: inherit; 
 
    /* fixes IE7 'sticky bug' */ 
 
} 
 
ul.sf-menu a { 
 
    display: block; 
 
    position: relative; 
 
} 
 
ul.sf-menu ul { 
 
    position: absolute; 
 
    left: 0; 
 
    width: 150px; 
 
    top: auto; 
 
    left: -999999px; 
 
} 
 
ul.sf-menu ul a { 
 
    zoom: 1; 
 
    /* IE6/7 fix */ 
 
} 
 
ul.sf-menu ul li { 
 
    float: left; 
 
    /* Must always be floated otherwise there will be a rogue 1px margin-bottom in IE6/7 */ 
 
    width: 150px; 
 
} 
 
ul.sf-menu ul ul { 
 
    top: 0; 
 
    margin: 0 0 0 150px; 
 
} 
 
ul.sf-menu li:hover ul, 
 
ul.sf-menu li:focus ul, 
 
ul.sf-menu li.sf-hover ul, 
 
ul.sf-menu ul li:hover ul, 
 
ul.sf-menu ul li:focus ul, 
 
ul.sf-menu ul li.sf-hover ul, 
 
ul.sf-menu ul ul li:hover ul, 
 
ul.sf-menu ul ul li:focus ul, 
 
ul.sf-menu ul ul li.sf-hover ul, 
 
ul.sf-menu ul ul ul li:hover ul, 
 
ul.sf-menu ul ul ul li:focus ul, 
 
ul.sf-menu ul ul ul li.sf-hover ul { 
 
    left: auto; 
 
} 
 
ul.sf-menu li:hover ul ul, 
 
ul.sf-menu li:focus ul ul, 
 
ul.sf-menu li.sf-hover ul ul, 
 
ul.sf-menu ul li:hover ul ul, 
 
ul.sf-menu ul li:focus ul ul, 
 
ul.sf-menu ul li.sf-hover ul ul, 
 
ul.sf-menu ul ul li:hover ul ul, 
 
ul.sf-menu ul ul li:focus ul ul, 
 
ul.sf-menu ul ul li.sf-hover ul ul, 
 
ul.sf-menu ul ul ul li:hover ul ul, 
 
ul.sf-menu ul ul ul li:focus ul ul, 
 
ul.sf-menu ul ul ul li.sf-hover ul ul { 
 
    left: -999999px; 
 
} 
 
/* autoArrows CSS */ 
 

 
span.sf-arrow { 
 
    width: 7px; 
 
    height: 7px; 
 
    position: absolute; 
 
    top: 20px; 
 
    right: 5px; 
 
    display: block; 
 
    background: url(../images/arrows-white.png) no-repeat 0 0; 
 
    overflow: hidden; 
 
    /* making sure IE6 doesn't overflow and expand the box */ 
 
    font-size: 1px; 
 
} 
 
ul ul span.sf-arrow { 
 
    right: 5px; 
 
    top: 20px; 
 
    background-position: 0 100%; 
 
} 
 
/* Theming the menu */ 
 

 
ul#nav { 
 
    float: left; 
 
} 
 
ul#nav ul { 
 
    background: #555; 
 
    margin-top: 5px; 
 
    padding-bottom: 15px; 
 
} 
 
ul#nav li a { 
 
    padding: 7px 25px 6px 25px; 
 
    font: 170%'Yanone Kaffeesatz', arial, sans-serif; 
 
    text-decoration: none; 
 
    color: #000; 
 
    margin-right: 2px; 
 
} 
 
ul#nav li a:hover, 
 
ul#nav li a:focus, 
 
ul#nav li.selected a, 
 
ul#nav li.selected a:hover, 
 
ul#nav li.selected a:focus { 
 
    color: #09D4FF; 
 
    text-shadow: none; 
 
} 
 
ul#nav ul li a { 
 
    color: #FFF; 
 
} 
 
ul#nav ul li a:hover { 
 
    color: #09D4FF; 
 
    margin-right: 2px; 
 
} 
 
/* Image Transitions */ 
 

 
ul#images { 
 
    margin: 0 15px 10px 0; 
 
    padding: 0; 
 
    list-style: none; 
 
    position: relative; 
 
} 
 
ul#images li { 
 
    display: block; 
 
    overflow: hidden; 
 
    padding: 0; 
 
    float: left; 
 
    width: 155px; 
 
    height: 300px; 
 
}
<nav> 
 
    <ul class="sf-menu" id="nav"> 
 
    <li class="selected"><a href="index.html">Home</a> 
 
    </li> 
 
    <li><a href="form.html"> Form </a> 
 
    </li> 
 
    <li><a href="page.html">A Page</a> 
 
    </li> 
 
    <li><a href="another_page.html">Another Page</a> 
 
    </li> 
 
    <li><a href="#">Example Drop Down</a> 
 
     <ul> 
 
     <li><a href="#">Drop Down One</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Two</a> 
 
      <ul> 
 
      <li> 
 
       <img src="arrows-white.png" /> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down One</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Two</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Three</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Four</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Five</a> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     <li><a href="#">Drop Down Three</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Four</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Five</a> 
 
     </li> 
 
     </ul> 
 
    </li> 
 
    <li><a href="contact.php">Contact Us</a> 
 
    </li> 
 
    </ul> 
 
</nav>

+0

您可以使用http://cssmenumaker.com/css-drop-down-menu – Apb

回答

2

您的问题是,你只需要通过这里从#nav删除margin-top: -

ul#nav ul { 
    background: #555; 
    //margin-top: 5px; 
    padding-bottom: 15px; 
} 

这是造成一个空间een悬停li及其孩子ul(下拉列表)你显示。

工作的代码如下

html body ul.sf-menu ul, 
 
html body ul.sf-menu ul li { 
 
    width: 200px; 
 
} 
 
html body ul.sf-menu ul ul { 
 
    margin: 0 0 0 200px; 
 
} 
 
/* Framework for proper showing/hiding/positioning */ 
 

 
ul.sf-menu, 
 
ul.sf-menu * { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
ul.sf-menu { 
 
    display: block; 
 
    position: relative; 
 
} 
 
ul.sf-menu li { 
 
    display: block; 
 
    list-style: none; 
 
    float: left; 
 
    position: relative; 
 
} 
 
ul.sf-menu li:hover { 
 
    visibility: inherit; 
 
    /* fixes IE7 'sticky bug' */ 
 
} 
 
ul.sf-menu a { 
 
    display: block; 
 
    position: relative; 
 
} 
 
ul.sf-menu ul { 
 
    position: absolute; 
 
    left: 0; 
 
    width: 150px; 
 
    top: auto; 
 
    left: -999999px; 
 
} 
 
ul.sf-menu ul a { 
 
    zoom: 1; 
 
    /* IE6/7 fix */ 
 
} 
 
ul.sf-menu ul li { 
 
    float: left; 
 
    /* Must always be floated otherwise there will be a rogue 1px margin-bottom in IE6/7 */ 
 
    width: 150px; 
 
} 
 
ul.sf-menu ul ul { 
 
    top: 0; 
 
    margin: 0 0 0 150px; 
 
} 
 
ul.sf-menu li:hover ul, 
 
ul.sf-menu li:focus ul, 
 
ul.sf-menu li.sf-hover ul, 
 
ul.sf-menu ul li:hover ul, 
 
ul.sf-menu ul li:focus ul, 
 
ul.sf-menu ul li.sf-hover ul, 
 
ul.sf-menu ul ul li:hover ul, 
 
ul.sf-menu ul ul li:focus ul, 
 
ul.sf-menu ul ul li.sf-hover ul, 
 
ul.sf-menu ul ul ul li:hover ul, 
 
ul.sf-menu ul ul ul li:focus ul, 
 
ul.sf-menu ul ul ul li.sf-hover ul { 
 
    left: auto; 
 
} 
 
ul.sf-menu li:hover ul ul, 
 
ul.sf-menu li:focus ul ul, 
 
ul.sf-menu li.sf-hover ul ul, 
 
ul.sf-menu ul li:hover ul ul, 
 
ul.sf-menu ul li:focus ul ul, 
 
ul.sf-menu ul li.sf-hover ul ul, 
 
ul.sf-menu ul ul li:hover ul ul, 
 
ul.sf-menu ul ul li:focus ul ul, 
 
ul.sf-menu ul ul li.sf-hover ul ul, 
 
ul.sf-menu ul ul ul li:hover ul ul, 
 
ul.sf-menu ul ul ul li:focus ul ul, 
 
ul.sf-menu ul ul ul li.sf-hover ul ul { 
 
    left: -999999px; 
 
} 
 
/* autoArrows CSS */ 
 

 
span.sf-arrow { 
 
    width: 7px; 
 
    height: 7px; 
 
    position: absolute; 
 
    top: 20px; 
 
    right: 5px; 
 
    display: block; 
 
    background: url(../images/arrows-white.png) no-repeat 0 0; 
 
    overflow: hidden; 
 
    /* making sure IE6 doesn't overflow and expand the box */ 
 
    font-size: 1px; 
 
} 
 
ul ul span.sf-arrow { 
 
    right: 5px; 
 
    top: 20px; 
 
    background-position: 0 100%; 
 
} 
 
/* Theming the menu */ 
 

 
ul#nav { 
 
    float: left; 
 
} 
 
ul#nav ul { 
 
    background: #555; 
 
    //margin-top: 5px; 
 
    padding-bottom: 15px; 
 
} 
 
ul#nav li a { 
 
    padding: 7px 25px 6px 25px; 
 
    font: 170%'Yanone Kaffeesatz', arial, sans-serif; 
 
    text-decoration: none; 
 
    color: #000; 
 
    margin-right: 2px; 
 
} 
 
ul#nav li a:hover, 
 
ul#nav li a:focus, 
 
ul#nav li.selected a, 
 
ul#nav li.selected a:hover, 
 
ul#nav li.selected a:focus { 
 
    color: #09D4FF; 
 
    text-shadow: none; 
 
} 
 
ul#nav ul li a { 
 
    color: #FFF; 
 
} 
 
ul#nav ul li a:hover { 
 
    color: #09D4FF; 
 
    margin-right: 2px; 
 
} 
 
/* Image Transitions */ 
 

 
ul#images { 
 
    margin: 0 15px 10px 0; 
 
    padding: 0; 
 
    list-style: none; 
 
    position: relative; 
 
} 
 
ul#images li { 
 
    display: block; 
 
    overflow: hidden; 
 
    padding: 0; 
 
    float: left; 
 
    width: 155px; 
 
    height: 300px; 
 
}
<nav> 
 
    <ul class="sf-menu" id="nav"> 
 
    <li class="selected"><a href="index.html">Home</a> 
 
    </li> 
 
    <li><a href="form.html"> Form </a> 
 
    </li> 
 
    <li><a href="page.html">A Page</a> 
 
    </li> 
 
    <li><a href="another_page.html">Another Page</a> 
 
    </li> 
 
    <li><a href="#">Example Drop Down</a> 
 
     <ul> 
 
     <li><a href="#">Drop Down One</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Two</a> 
 
      <ul> 
 
      <li> 
 
       <img src="arrows-white.png" /> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down One</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Two</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Three</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Four</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Five</a> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     <li><a href="#">Drop Down Three</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Four</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Five</a> 
 
     </li> 
 
     </ul> 
 
    </li> 
 
    <li><a href="contact.php">Contact Us</a> 
 
    </li> 
 
    </ul> 
 
</nav>

1

你可以通过添加一个类名:

我有麻烦悬停下拉期间,它当鼠标下降到li元素dissappears给每个li包含嵌套的元素ul,比如说li的类名称是.has-nested-ul,那么我们可以控制max-height属性 - 我们可以使用height但它有缺点 - 就像这样:

JS Fiddle

html body ul.sf-menu ul, html body ul.sf-menu ul li { 
 
    width: 200px; 
 
} 
 
html body ul.sf-menu ul { 
 
    max-height: 0; 
 
    overflow: hidden; 
 
} 
 
html body ul.sf-menu li.has-nested-ul:hover ul { 
 
    max-height: 1000px; 
 
}
<nav> 
 
    <ul class="sf-menu" id="nav"> 
 
    <li class="selected"><a href="index.html">Home</a> 
 
    </li> 
 
    <li><a href="form.html"> Form </a> 
 
    </li> 
 
    <li><a href="page.html">A Page</a> 
 
    </li> 
 
    <li><a href="another_page.html">Another Page</a> 
 
    </li> 
 
    <li class="has-nested-ul"><a href="#">Example Drop Down</a> 
 
     <ul> 
 
     <li><a href="#">Drop Down One</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Two</a> 
 
      <ul> 
 
      <li> 
 
       <img src="arrows-white.png" /> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down One</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Two</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Three</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Four</a> 
 
      </li> 
 
      <li><a href="#">Sub Drop Down Five</a> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     <li><a href="#">Drop Down Three</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Four</a> 
 
     </li> 
 
     <li><a href="#">Drop Down Five</a> 
 
     </li> 
 
     </ul> 
 
    </li> 
 
    <li><a href="contact.php">Contact Us</a> 
 
    </li> 
 
    </ul> 
 
</nav>