Nano Hash - криптовалюты, майнинг, программирование

Bootstrap 4: Показать активный элемент навигации при свертывании панели навигации

Я пытаюсь создать панель навигации с помощью начальной загрузки, которая сворачивается при определенной ширине области просмотра. Теперь я хотел бы видеть, что если панель навигации свернута, navbar-brand исчезнет, ​​а текущий активный элемент навигации (например, «Дом», «О программе» и т. Д.) Будет виден слева, что позволит посетителю увидеть на на какой они странице.

Я полный новичок в начальной загрузке, я вроде как ожидал увидеть добавление класса 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>


  • Вам нужно использовать Bootstrap 3? Это было бы проще с Bootstrap 4. И, единственная вещь, которую вы хотите в свернутой / переключаемой части навигационной панели, - это бренд? 24.03.2018
  • Нет, тоже можно использовать bootstrap 4 :) 24.03.2018
  • Идея в том, что когда элементы brand + nav становятся слишком широкими, они рушатся. Затем бренд исчезает, и элементы навигации можно открывать с помощью гамбургер-меню. Но в свернутом состоянии слева (там, где раньше был бренд) должно быть написано «Дом» (или: «О нас», «Контакт» и т. Д.). Я как бы надеялся, что это будет возможно из коробки без излишнего волшебства jquery: / 24.03.2018

Ответы:


1

Не совсем "из коробки", но немного CSS будет работать с Bootstrap 4 (без jquery или разметки dup) ...

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

Это переопределяет поведение сворачивания навигационной панели, чтобы использовать visibility вместо display. Таким образом, мы можем управлять отображением active nav-item.

<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 идут вместе с точкой останова navbar-expand-md 768 пикселей. Вы можете изменить это, чтобы использовать другую точку останова, если необходимо.

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


Есть еще одно решение, использующее дублирующиеся ссылки navbar-nav, но для этого потребуется дополнительная разметка, и я думаю, что приведенное выше решение только для CSS более чистое.

24.03.2018
  • Ага, это в значительной степени то, что мне нужно! Спасибо! 25.03.2018

  • 2

    Попробуйте это решение. Хотя это должно быть продвинуто, чтобы ссылки навигационного меню были интерактивными.

    <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>
          <script>
              $ = window.jQuery
              $(document).ready(function(){
                $('.navbar-brand').attr('data-brand',$('.navbar-brand').text())
                   var txtMenu = $('#navbar ul.navbar-nav .active').text();
                   $('.navbar-brand').text(txtMenu)
                   $('nav.navbar').on('hide.bs.collapse', function(){ 
                   var txtM = $('#navbar ul.navbar-nav .active').text();
                   $('.navbar-brand').text(txtM)
                })
                $('nav.navbar').on('show.bs.collapse', function(){ 
                   var txtB = $('.navbar-brand').attr('data-brand');
                   $('.navbar-brand').text(txtB)
                })
              })
          </script>
    </body></html>

    24.03.2018
  • Спасибо, @seethrough. На самом деле я как бы надеялся, что будет более красивое решение ... мне это кажется довольно хакерским (хотя я далеко не эксперт по начальной загрузке, так что, возможно, это нормально для начальной загрузки). 24.03.2018

  • 3

    Недоступно непосредственно в начальной загрузке, но вы можете написать небольшой код Javascript здесь:

    function displayActiveMenu() {
      if ($(window).width() >= 768) {
        // do nothing if we are not collapsed
        return;
      }
    
      var element = $('li.active', '#navbar').clone();
      $('#active-navbar').html(element);
    }
    
    displayActiveMenu(); // for the first time
    $(window).on('resize', displayActiveMenu);
    @media (max-width: 767px) {
      #active-navbar {
        float: right;
        margin: 0;
      }
      #active-navbar>li>a {
         padding-top: 15px;
         padding-bottom: 15px;
      }
    }
    <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>
    
              <!-- this is the new element -->
              <ul class="nav navbar-nav visible-xs" id="active-navbar">
              </ul>
    
              <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>

    24.03.2018
  • Это не совсем то, что мне нужно. Вы копируете поведение бутстрапа при свертывании / расширении. Я действительно хочу, чтобы элемент active отображался, когда панель навигации свернута. 24.03.2018
  • Обновил ответ 24.03.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..