Бічна панель відкрита за замовчуванням на робочому столі, закрита для мобільних пристроїв


9

У мене виникають реальні проблеми, намагаючись дозволити вміст бічної панелі / навігації (за допомогою Bootstrap) показувати (бути розширеним) за замовчуванням на робочому столі та закрити за замовчуванням на мобільному телефоні та мати значок, який відображається лише на мобільному пристрої. Я не можу зробити так, щоб це спрацювало.

<nav class="menu menu-open" id="theMenu">
      <div class="menu-wrap">
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
          <i class="fa fa-bars menu-close d-lg-none" id="menu-toggle"></i>
            </button>
          <div id="menu-logo">
            <img src="Final_Logo.png" width="210" height="214" alt="">
          </div>
          <div id="navbarToggleExternalContent">
          <ul id="main-menu">
              <a href="#">Home</a>
              <a href="#">About</a>
              <a href="#">Writing</a>
              <a href="#">Events</a>
              <a href="#">Speaking</a>
              <a href="#">Music</a>
          </ul>
          <ul id="social-icons">
              <li class="facebook"><a href="#"><i class="fab fa-facebook fa-2x"></i></a></li>
              <li class="twitter"><a href="#"><i class="fab fa-twitter fa-2x"></i></a></li>
              <li class="instagram"><a href="#"><i class="fab fa-instagram fa-2x"></i></a></li>
          </ul>
        </div>
      </div>
  </nav>

Я спробував використовувати цей код JavaScript, але безрезультатно:

 $('.menu-close').on('click', function(){
    $('#menuToggle').toggleClass('active');
    $('body').toggleClass('body-push-toright');
    $('#theMenu').toggleClass('menu-open');
    alert("Test");
    });

Гей, я додав коментар до вашого питання з точним рішенням. Створено код для вас, щоб ви могли перевірити код і вихід. Будь ласка, подивіться
Приянка

У вас є інші CSS?
Codeply-er

Просте додавання classта стилізація під медіа-запитомwidth:600
Awais

Відповіді:



1

Ви можете використовувати мультимедійний запит CSS, щоб приховати / показати вміст у різних вікнах перегляду / пристрої.


0

Ось посилання, що вам потрібно точно. Я створив перо для вас. Будь ласка, перегляньте посилання нижче.

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<nav class="navbar navbar-expand-lg navbar-light bg-light" id="theMenu">
  <a class="navbar-brand" id="menu-logo">
            <img src="Final_Logo.png" width="210" height="214" alt="">
          </a>      
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarSupportedContent">
          <ul class="navbar-nav mr-auto" id="main-menu">
            <li class="nav-item"><a class="nav-link" href="#">Home</a></li>
            <li class="nav-item"><a class="nav-link" href="#">About</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Writing</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Events</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Speaking</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Music</a></li>
            <li class="facebook"><a href="#"><i class="fab fa-facebook fa-2x"></i></a></li>
              <li class="twitter"><a href="#"><i class="fab fa-twitter fa-2x"></i></a></li>
              <li class="instagram"><a href="#"><i class="fab fa-instagram fa-2x"></i></a></li>
          </ul>
  </div>
  </nav>

https://codepen.io/pgurav/pen/abbQZJL


0

Я створив для вас приклад на основі документації bs4 щодо зовнішнього вмісту.

<div class="pos-f-t">
  <div class="collapse" id="navbarToggleExternalContent">
    <div class="bg-dark p-4">
      <h5 class="text-white h4">Collapsed content</h5>
      <span class="text-muted">Toggleable via the navbar brand.</span>
    </div>
  </div>
  <nav class="navbar navbar-dark bg-dark navbar-expand-lg">
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
  </nav>
</div>

У цьому прикладі код згортається зверху - замість правого. Насправді я у відпустці і спробую доповнити приклад, щоб відповідати вашим потребам.

Додатковий JavaScript:

var externalContent = $('#navbarToggleExternalContent'),
    execOnResize = function(){
// also the next line was only for use in jsfiddle
// in the real world you need to use window.outerWidth
// 992 pixel is the width of breakpoint corresponding to the class "navbar-expand-lg". Feel free to adapt it to fit your needs.
    if(window.innerWidth >= 992){
        externalContent.addClass('show');
    }else{
        externalContent.removeClass('show');
    }
};
// the next line was only addded for jsfiddle       
execOnResize();

window.onresize = function(event) {
    execOnResize();
};

window.addEventListener('load', function() {
    execOnResize();
})

Я також створив скрипку скрипку , щоб побачити його в дії, будь ласка , розмір внутрішнього вікна в jsfiddle


0

Ваш поточний код Javascript завжди працюватиме, незалежно від пристрою. Вам потрібен спосіб перевірити, чи пристрій - це комп'ютер чи мобільний телефон.

Одним із способів було б використання браузера UserAgent:

$('.menu-close').on('click', function(){
    if(navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) {
        //mobile
        $('#menuToggle').toggleClass('active');
        $('body').toggleClass('body-push-toright');
        $('#theMenu').toggleClass('menu-open');
        alert("Test");
    }
});

Або ви можете просто покластися на ширину вікна (але невеликі вікна на робочому столі будуть розглядатися як мобільна версія):

if(window.innerWidth <= 767) { // a certain threshold value, in pixels
    //mobile
    //do something
}

Знюхання рядка User Agent призводить до коду, який важко підтримувати. Запити медіа набагато краще.
kmoser

Що таке "важко підтримувати" щодо однієї струни? У будь-якому випадку ви можете зафіксувати цю перевірку у функції, так що коли вам потрібно буде оновити рядок, у вас є лише один рядок коду для редагування.
Аніс Р.

Крім того, ви не можете використовувати медіа-запити CSS для перемикання імен класів, як це хоче ОП
Аніс Р.

Рядки "Агент користувача" пристроїв змінюються з часом, коли виробляються нові пристрої. Це призводить до коду, який порушується щоразу, коли вводиться новий пристрій. Звичайно, ви можете зафіксувати це у функції, але це все одно вимагає від вас змінювати щоразу, коли буде введено новий пристрій. Краще орієнтувати пристрої на їх розмір (використовуючи запити мультимедійних CSS), а не на рядок користувача-агента. Під час введення нового пристрою оновлення не потрібно. OP не обов'язково хотів перемикати назви класів; це була їх найкраща спроба вирішення, і те, що, на мою думку, поступається медіа-запитам.
kmoser

0

Спочатку лише кілька балів:

  1. Ви сказали бічну панель, але ваша розмітка насправді не схожа на бічну панель, вона схожа на чуйний топнав. Я спробую зрозуміти це якнайкраще, і також продемонструю працюючу бічну панель, якщо ви цього дійсно хочете.

  2. Пункти меню знаходяться в <ul>(не упорядкованому списку) без будь-якого <li>(елементи списку). Для <li>правильного функціонування, мабуть, необхідний s для завантаження js / css . Технічно a <ul>без будь-якого <li>є дійсним html, але єдиний вміст, дозволений у a <ul>, <li>так що якорі (або що-небудь інше) всередині a, <ul>повинні міститися в <li>s, щоб бути дійсним.

  3. Я не впевнений, що саме ви намагаєтеся зробити з соціальними іконками, тому я просто трохи відкоригував їх таким чином, що здається розумним.

  4. Я додав overflow-y: scroll;на <html>елемент так, що коли ви відкриєте меню на маленькому екрані, воно не спричинить зсув, якщо буде додано смугу прокрутки. Може не знадобитися залежно від дизайну вашого сайту та макета контенту.


Тож давайте почнемо з дуже базового чуйного меню.

Основне меню, що реагує на завантаження


Гаразд, це виглядає нормально, але у вас було зображення в меню. Тому я покладу зображення в меню і дам йому трохи css для його стилізації. Потім із зображенням нам знадобиться трохи додаткового CSS, щоб красиво розмістити елементи меню:

  1. Розмістіть кнопку омбре так, щоб вона сиділа в нижній частині вікна. Я використовую зображення в 200 пікселів і підкреслю декілька зауважень. Ви можете змінити top: calc(100px - 1rem);на, top: 1rem;щоб покласти гамбургер зверху, або bottom: 1rem;якщо хочете, щоб гамбургер прилипав до нижньої частини нави, навіть коли він був відкритий. Або просто видаліть це правило, щоб скористатися типовим завантажувальним інструментом, який ставить гамбургер у вертикальну середину.

  2. Розташуйте пункти меню, щоб вони також лежали в нижній частині панелі меню, коли вони не згортаються.

  3. розташуйте соціальні значки також на нижній частині, але натисніть їх на праву сторону.

  4. Цифри 2 та 3 вище повинні застосовуватися вище середньої точки розриву, коли меню не згортається, тому я поставитиму їх у медіа-запит, щоб націлити більше 768px (середня точка перерви завантажувача). Це також можна зробити з bootstraps sass mixpoint mixins, але ми просто використовувати тут звичайний css. Ви можете бачити позиціонування цих елементів у правилах @media query в css, де ви можете змінити його, щоб перемістити їх у верхню частину панелі. Або просто видаліть ці правила, щоб повернутися до стандартних параметрів завантажувальної програми, які вертикально центрирують елементи меню, і розміщують соціальні іконки під ними. Ви також можете розмістити соціальні значки в <li>елементи в меню, <ul>якщо ви просто хотіли, щоб іконки потрапляли прямо в меню, як і інші пункти меню.

із зображенням у меню


Гаразд, але ви сказали, що це бічна панель. Я не такий знайомий з завантажувальним закладом, але я вважаю, що ні v3, ні v4 за замовчуванням не забезпечують навігацію бічної панелі. Кілька самозагрузок бічній панелі підручників можна знайти тут . Я просто використав найосновнішу версію з підручників, зв'язаних вище, щоб створити приклад тут.

Бічна панель, що розбирається

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.