【问题标题】:Creating a menu similar to Google Plus创建类似于 Google Plus 的菜单
【发布时间】:2014-10-03 18:32:39
【问题描述】:

我正在尝试实现类似于 Google Plus 的响应式菜单,在调整窗口大小时,主菜单选项会添加到“更多”下拉菜单中或从“更多”下拉菜单中删除。

我目前的菜单是这样的:

代码如下:

// JQuery
$(document).ready(function() {
    $("a.drop-menu").click(function () {
        $('#drop-menu').toggle();
    });
});

<!-- HTML -->
<ul id="navigation">
  <li><a href="#" class="active">Home</a></li>
  <li><a href="#">About</a></li>
  <li><a href="#">Calendar</a></li>
  <li><a href="#">Forum</a></li>
  <li><a href="#">Gallery</a></li>
  <li><a href="javascript:;" class="drop-menu">More</a>
      <ul id="drop-menu">
        <li><a href="#">Contact</a></li>
        <li><a href="#">Contact</a></li>
      </ul></li>
</ul>

/* CSS */ 
#navigation {
  list-style-type: none;
  padding: 0px;
  margin: 0px;
}
#navigation li {
  display: inline-block;
}
#navigation li a:link, #navigation li a:visited, #navigation li a:active {
  display: block;
  width: 120px;
  line-height: 50px;
  text-align: center;
  font-weight: bold;
  text-decoration: none;
  background-color: #27383F;
  color: #CCC8C0;
}
#navigation li a:hover, #navigation li a.active {
  background-color: #2C3C53;
}

#drop-menu {
  display: none;
  position: absolute;
  padding: 0px;
  margin: 0px;
}
#drop-menu li {
  display: block;
}

JSFiddle

目前,当调整浏览器窗口大小时,菜单选项会按如下方式折叠:

但是,下图是我想要的结果:

我想知道是否有一种方法可以在没有媒体查询的情况下完成此任务?更具体地说:

  1. 如何动态检测窗口大小是否足够大或太小而无法在单行的主导航中包含li 标签?
  2. 如何在一个菜单和另一个菜单之间交换 li 标签?

【问题讨论】:

标签: javascript jquery css responsive-design


【解决方案1】:

不使用media-queries 我想你可以使用jQuery $( window ).width(); 它将返回浏览器视口的宽度。应该是这样的:

$(document).ready(function() {
    $("a.drop-menu").click(function () {
        $('#drop-menu').toggle();
    });
    if($( window ).width() < $("#navigation > li").length * (120 + 5)){
        //5px is the approximation of the gap between each <li>
        var html = $("#navigation > li").last().prev().html();
        $("#navigation > li").last().prev().remove();
        $("#drop-menu").append(html);
    }
    var bigger = $("#navigation > li").length + 1;
    var smaller = $("#navigation > li").length;
    $( window ).resize(function() {
      if($( window ).width() <= smaller * (120 + 5)){
          //5px is the approximation of the gap between each <li>
          var html = $("#navigation > li").last().prev().html();
          if(html != undefined){
              $("#navigation > li").last().prev().remove();
              $("#drop-menu").prepend("<li>"+html+"</li>");
              bigger = $("#navigation > li").length + 1;
              smaller = $("#navigation > li").length;
          }
      }
      if($( window ).width() >= bigger * (120 + 5)){
          //5px is the approximation of the gap between each <li>
          var html = $("#drop-menu > li").first().html();
          if(html != undefined){
              $("#drop-menu > li").first().remove();
              $("#navigation > li").last().before("<li>"+html+"</li>");
              bigger = $("#navigation > li").length + 1;
              smaller = $("#navigation > li").length;
          }
      };
    });
});

看看这个Fiddle,我相信这不是完美的结果。但是,我相信你可以把它作为你的起点。希望它对你有帮助。。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-05-28
  • 2010-10-29
  • 2011-05-29
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多