【问题标题】:A clickable drop-up menu可点击的下拉菜单
【发布时间】:2015-03-27 01:37:40
【问题描述】:

我的网站顶部有以下可点击的导航菜单:

jsFiddle

这段代码sn-p中也有代码:

$("nav td a").click(function(e) {
  if ($(this).parent().hasClass('selected')) {
    $("nav .selected div div").slideUp(200);
    $("nav .selected").removeClass("selected");
    //alert("HERE!");
  } else {
    $("nav .selected div div").slideUp(200);
    $("nav .selected").removeClass("selected");
    //alert("NO HERE");
    if ($(this).next(".subs").length) {
      $(this).parent().addClass("selected");
      $(this).next(".subs").children().slideDown(200);
    }
  }
  e.stopPropagation();
});

$("body").click(function() {
  $("nav .selected div div").slideUp(200);
  $("nav .selected").removeClass("selected");
});
nav {
  background: #f0f7fa;
  color: #85a0ad;
  margin: 40px -38px 0 -38px;
  padding: 10px 38px;
}
nav table {
  border-collapse: collapse;
  width: 100%;
}
nav td {
  padding: 0;
  position: relative;
}
nav > td > a {
  display: block;
  color: #f0f7fa;
  position: relative;
  text-decoration: none;
}
nav > td.selected > a {
  z-index: 2;
}
nav td div {
  position: relative;
}
nav li div {
  position: relative;
}
nav td div div {
  background-color: #f0f0f0;
  padding: 12px 0;
  display: none;
  font-size: 0.95em;
  margin: 0;
  position: absolute;
  top: -1px;
  z-index: 1;
  width: 190px;
}
nav td div div.wrp2 {
  width: 380px;
}
nav .sep {
  left: 190px;
  border-left: 1px solid #044a4b;
  bottom: 0;
  height: auto;
  margin: 15px 0;
  position: absolute;
  top: 0;
  width: 1px;
}
nav td div ul {
  padding-left: 10px;
  padding-right: 10px;
  position: relative;
  width: 170px;
  float: left;
  list-style-type: none;
}
nav td div ul li {
  margin: 0;
  padding: 0;
}
nav td ul ul {
  padding: 0 0 8px;
}
nav td ul ul li {
  margin: 0;
  padding: 0;
}
nav td ul ul li a {
  color: #044a4b;
  display: block;
  margin-bottom: 1px;
  padding: 3px 5px;
  text-decoration: none;
  font-size: 1.1em;
}
nav td ul ul li a:hover {
  background-color: #85a0ad;
  color: #fff;
}
nav td.gap {
  width: 33%;
}
nav.top {
  margin-top: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav class="top">
  <table>
    <tr>
      <td>&#x25BE;&nbsp;<a href="#" class="clicker">Lectures</a>
        <div class="subs">
          <div class="wrp2">
            <ul class="navul">
              <li>
                <h4>Intros</h4>
                <ul>
                  <li><a class=lecture href="lecture00.html">Introduction</a>
                  </li>
                </ul>
              </li>
              <li>
                <h4>Graph<span class="full-nav">&nbsp;Theory</span></h4>
                <ul>
                  <li><a class=lecture href="lecture01.html">Euler Circuits</a>
                  </li>
                  <li><a class=lecture href="lecture02.html">Beyond Euler Circuits</a>
                  </li>
                  <li><a class=lecture href="lecture03.html">Hamiltonian Circuits</a>
                  </li>
                  <li><a class=lecture href="lecture04.html">Travelling Salesmen</a>
                  </li>
                  <li><a class=lecture href="lecture05.html">Minimum Cost&mdash;Spanning Trees</a>
                  </li>
                </ul>
              </li>
            </ul>
          </div>
        </div>
        <td class="gap">&nbsp;
          <td>&equiv;&nbsp;<a href="#">Course<span class="full-nav">&nbsp;Info</span></a>
    </tr>
  </table>
</nav>

我还想将相同的菜单放在页面底部,可点击菜单向上而不是向下打开。我见过this post,但它是关于一个在悬停时打开的菜单,而我的是通过点击打开的。我对几件事感到困惑:

  1. 我应该将“位置:绝对;底部:100%”放在 CSS 中的什么位置?
  2. 当菜单向上打开时,我应该如何更改 slideUp/slideDown 调用?
  3. 如何防止一个菜单干扰另一个菜单? [我的意思是,在我早期的尝试中,单击底部菜单会立即自行关闭,因为 jQuery 代码执行的是 slideUp 然后是 slideDown,但也许这不是问题。]

【问题讨论】:

  • 这段代码在底层使用起来并不容易。我强烈建议您避开桌子并使用&lt;div&gt;s 构建菜单。这也会更好地便携
  • @Fuzzyma:是什么让这张桌子更难处理?我已经成功地使用悬停时打开的菜单在底部工作,如链接问题中所述。我无法让它与这个特定的菜单和点击打开一起工作。
  • 请在悬停版本中添加代码。将其更改为单击应该没什么大不了的。然而,处理表格总是令人毛骨悚然。在定位方面,表格单元的行为与普通元素不同,这就是它难以处理的原因
  • @Fuzzyma:在搞砸了这个之后,我认为你是对的,桌子让事情变得困难。我使用表格是因为我喜欢在菜单项之间留一个空格:如何使用 div 和 ul 来实现?
  • 您也可以为列表添加边距和填充(甚至高度和宽度)。在您的情况下,您将使用 &lt;div&gt; 作为滑动框,您可以使用嵌套列表作为菜单和子菜单(或只是普通列表)

标签: jquery html css drop-down-menu


【解决方案1】:

在此处查看小提琴:http://jsfiddle.net/h5fjwju6/

只需稍微更新一下 CSS,即可设置 .top 类设置和 .bottom 类设置。您的任何 jQuery 都没有更改!...

对 HTML 的更新:

<!-- Just add another nav with class bottom, below your current top nav -->

<nav class="bottom">
   <table>
     <tr>
       ...

CSS 更新:

nav {
   background: #f0f7fa;
   color: #85a0ad;
   margin: 40px -38px 0 -38px;
   padding: 10px 38px;
   position:fixed;     // <-- added this
}

nav td div div {
   background-color: #f0f0f0;
   padding: 12px 0;
   display: none;
   font-size: 0.95em;
   margin: 0;
   position: absolute;
   //top: -1px;              <-- removed this
   z-index: 1;
   width: 190px;
}
nav.top {                 // <-- added this   
   top: 1px;              
}
nav.top td div div  {     // <-- added this
   top: 1px;             
}
nav.bottom {              // <-- added this 
   bottom: 0px;           
}  
nav.bottom td div div {   // <-- added this   
   bottom: 25px;   
}    

【讨论】:

  • 我只是想让你知道这非常有效!我不得不调整底部分隔以获得我想要的东西,但你的更新确实起到了作用。不过有一个问题:我实际上一开始忘了输入position: fixed,它仍然很好用。 position: fixed 到底是做什么的?再次,非常感谢!
  • 欢迎您! Position:fixed 将菜单保持在屏幕的顶部或底部,即使滚动大页面也是如此。如果您不希望它在滚动时停留在屏幕上,那么是的,您可以将其移除,这样就可以了。
【解决方案2】:

尝试在图标处添加 span 标签

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav class="top">
  <table>
    <tr>
        <td><span class="icon">&#x25BE;</span>&nbsp;<a href="#" class="clicker">Lectures</a>
        <div class="subs">......

添加这个 CSS:

td.selected span.icon{
    -ms-transform: rotate(180deg);
    -webkit-transform: rotate(180deg);
    transform: rotate(180deg);
    display:inline-block;
}

check out this

【讨论】:

  • 菜单应该向上打开。
猜你喜欢
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多