Bootstrap Mega Menu

完整的代码放在 jsFiddle Bootstrap Mega Menu

我们管 Mega Menu 叫做“大菜单”吧,“巨”、“超级”啥的,不足以彰显我们的草根贵气。

有道词典:

Mega Menu: 大数据量网页菜单;超级菜单式;巨型菜单;超级菜单。


基于Bootstrap Dropdown,实现一个大菜单,有三个问题要解决:

菜单容器的样式

复用 Yamm!3 的关键样式。

/** Copy from Yamm!3 http://geedmo.github.io/yamm3/ */
.mega .nav,
.mega .collapse,
.mega .dropup,
.mega .dropdown {
  position: static;
}

.mega .container {
  position: relative;
}

.mega .dropdown-menu {
  left: auto;
}

.mega .mega-content {
  padding: 20px 30px;
}

.mega .dropdown.mega-fw .dropdown-menu {
  left: 0;
  right: 0;
}

鼠标事件

Bootstrap Dropdown 组件通过点击打开菜单,不符合大菜单场景,需要修改成,鼠标移入时打开菜单,鼠标移出时关闭菜单。

  1. 鼠标移入时,显示菜单。
  2. 鼠标移出时,隐藏菜单。
  3. 鼠标点击菜单中的链接时,隐藏菜单。
$(function() {
  $('body')
    .on("mouseenter", "li.dropdown", function() {
      !$('li.dropdown').hasClass('hover') && $(this).addClass('hover');
    })
    .on("mouseleave", "li.dropdown", function() {
      $('li.dropdown').hasClass('hover') && $(this).removeClass('hover');
    })
    .on("click", "a.menu-link", function() {
      var $this = $(this);
      setTimeout(function() {
        $this.closest('li.dropdown').removeClass('hover');
      }, 100);
    });
});

自适应屏幕宽度

当屏幕尺寸小于768像素时,菜单会自动折叠,恢复Bootstrap默认行为,通过点击来打开菜单。

有个取巧的方法,我们使用一个只在屏幕大于768像素时生效的.hover类,这样一来,屏幕超过768像素,菜单是通过鼠标进入打开,而屏幕小于768像素时,使用Bootstrap Dropdown的默认行为,即通过点击来打开和关闭菜单。

@media (min-width: 768px) {
  /* disable dropping down on mouse click */
  ul.nav li.open > ul.dropdown-menu {
    display: none;
  }
  /* enable dropping down on mouse hover */
  ul.nav li.dropdown.hover > ul.dropdown-menu {
    display: block;
  }
  /* changing caret pointing direction on hover */
  .nav .dropdown.hover .caret {
    border-top: none;
    border-bottom: 4px dashed;
  }
}

完整的代码放在jsFiddle Bootstrap Mega Menu


参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值