javascript - Bootstrap 4 : Show active nav-item on Navbar collapse

标签 javascript html css twitter-bootstrap bootstrap-4

我正在尝试使用在特定视口(viewport)宽度折叠的 Bootstrap 创建导航栏。现在,我想看到的是,如果导航栏折叠,navbar-brand 就会消失,并且当前事件的导航项(例如“主页”、“关于”等)将在离开,从而使访问者能够看到他们所在的页面。

我是一个完全的 bootstrap 菜鸟,我有点希望看到在导航栏折叠/展开时添加一个 css 类,但它不能那样工作。

<html lang="en"><head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  </head>
 <body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" 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>
          </button>
          <a class="navbar-brand" href="#">Project name</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Home</a></li>
            <li><a href="#about">About</a></li>
            <li><a href="#contact">Contact</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

</body></html>

最佳答案

不完全是“开箱即用”,但是一些 CSS 可以与 Bootstrap 4 一起使用(没有 jquery 或 dup 标记)...

https://www.codeply.com/go/5T4icATKjl

这会覆盖导航栏折叠行为以使用 visibility 而不是 display。这样我们就可以控制 active 导航项的显示。

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" ></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
    
<style>
.navbar .collapse {
    visibility: hidden;
    display: block;
}

.navbar .collapse.show {
    visibility: visible;
}

@media (max-width: 767px) {
    .navbar-nav .nav-link.active {
        visibility: visible;
    }
    
    .collapsing {
        transition: all 0.35s ease;
        height: 40px !important;
    }
    
    .collapse:not(.show) .navbar-nav .nav-item:not(.active) {
        display: none;
    }
}

@media (min-width: 768px) {
    .navbar .collapse .navbar-nav .nav-item {
        visibility: visible;
    }
}
</style>
<body>
<nav class="navbar navbar-expand-md fixed-top navbar-dark bg-dark">
    <div class="container">
        <div class="collapse" id="navbar1">
            <div class="navbar-nav flex-md-row">
                <a class="nav-item navbar-brand" href="#">Project name</a>
                <a class="nav-item nav-link" href="#">Home</a>
                <a class="nav-item nav-link" href="#">About</a>
                <a class="nav-item nav-link active" href="#">Contact</a>
            </div>
        </div>
        <button class="navbar-toggler align-self-start" type="button" data-toggle="collapse" data-target="#navbar1">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
</nav>
</body>

请注意@media 查询与 768px 的 navbar-expand-md 断点一起进行。如果需要,您可以更改它以使用不同的断点。

navbar-expand-sm - 576px
navbar-expand-lg - 992px
navbar-expand-xl - 1200px


还有另一种使用重复导航栏导航链接的解决方案,但这需要额外的标记,我认为上面的纯 CSS 解决方案更清晰。

关于javascript - Bootstrap 4 : Show active nav-item on Navbar collapse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464453/

相关文章:

html - 在 Bootstrap 的下拉菜单右侧插入图像

css - UIWebView iOS 4.2.1 中的阿拉伯语 TTF(TrueType 字体)

javascript - 如何使用 Go 从磁盘读取文件并将其传递给 WebAssembly?

javascript - 如何从 Rails 4 应用程序中的 javascript 生成的按钮调用 Controller 函数?

javascript - jQuery 事件处理逻辑

javascript - 使用 jodit 编辑器在 textarea 中写入或删除字符串

html - 如何在 HTML/CSS 中设置百分比高度值

html - 如何让页眉和导航丸出现在同一行

javascript - Masonry v3 在附加元素时是否仍然支持飞入过渡?

javascript - 如何获得元素的每个属性的名称和值?