Bootstrap 不使用JavaScript展开/折叠移动的导航栏

icomxhvb  于 2022-12-16  发布在  Bootstrap
关注(0)|答案(1)|浏览(179)

在移动的设备上,Bootstrap 3默认情况下会将导航栏(navbar)缩小为一个汉堡图标。当点击汉堡时,JavaScript会切换导航菜单项的显示--展开或折叠导航栏。但是

如何在不需要JavaScript的情况下切换 Bootstrap 移动的导航栏的折叠/展开?

如果这是可能的,它将具有很好的性能优势:用户已经可以在JavaScript执行之前导航了(这对脆弱的移动的连接是一个很好的加分点),并且较小的项目可能能够完全放弃对jQuery + bootstrap javascript的依赖,节省了大约45 k的第一个页面加载。2另外,网站在JS错误的情况下变得更加健壮--至少页面导航仍然可用。
或者,可以对导航栏执行re-implement the bootstrap JS without jQuery dependency- done here
以下是static navbar top示例在移动的模式下的外观,以供参考:

pqwbnv8z

pqwbnv8z1#

是的,有可能!

在不使用JavaScript的情况下切换BS 3移动的导航栏

1.创建包含导航栏状态的隐藏复选框(如果选中则展开)
1.将导航栏button更改为label以用于此不可见复选框
1.使用CSS General Sibling Selector切换导航栏的显示.
如何在没有JavaScript的情况下更改CSS属性之前在SO上讨论过,并且那里显示了1的原理。应用这个 Bootstrap 很简单。
试用**Live demo**(得益于rawgit)或在flexponsive上查看其生产情况
完整的演示可以在Github项目bs3-navbar-collapse-without-javascript上找到。

浏览器支持

  • CSS常规同级选择器得到广泛支持
  • 在移动的中成功测试:安卓5和iOS 8
  • 也适用于桌面:Chrome 43和火狐38

限制

  • 如果您决定使用下拉菜单,那么它们仍然需要JS

详细步骤

首先,您需要添加自定义CSS:

/* show the collapse when navbar toggle is checked */
#navbar-toggle-cbox:checked ~ .collapse {
    display: block;
}

/* the checkbox used only internally; don't display it */
#navbar-toggle-cbox {
  display:none
}

然后按如下所示更改导航栏HTML:

<!-- insert checkbox -->
<input type="checkbox" id="navbar-toggle-cbox">
<!-- change the "hamburger" icon from being a button to a label for checkbox -->
<div class="navbar-header">
 <label for="navbar-toggle-cbox" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
    <span class="sr-only">Toggle navigation</span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
  </label>
<!-- end label not button -->

相关问题