Меню гамбургера - почему мой код не работает? - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь сделать простое меню для гамбургеров, используя jQuery или JS (я в любом случае легко), но мой код просто не будет работать, и я не могу понять, почему .

Он структурирован как верхний левый гамбургер, посередине - go, затем профиль и верхняя правая корзина.

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

Вот код:

HTML:

       <section class="header-section">
  <div class="header-container">
   <div class="header-content">
     <div class="hamburger-container">
    <i id="burger" class="fas fa-bars fa-2x"></i>
     </div>
     <div class="header-logo-container">
       <h2>Logo goes here</h2>
     </div>
     <div class="header-profile-and-signin">
       <i class="fas fa-user-circle fa-2x"></i>
       <i class="fas fa-suitcase-rolling fa-2x"></i>
     </div>
       <ul id="nav">
          <li>
            <a href="search-page.html" style="text-decoration: none">Holidays</a>
          </li>
          <li>
            <a href="sign-in.html" style="text-decoration: none">Sign In / Register</a>
          </li>
        </ul>
    </div>
  </div>
</section>

CSS:

body {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

.header-section {
  height: 100px;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #999;
}

.header-container {
  height: 100%;
  width: 90%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: blue;
}

.header-content {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: yellow;
}

.hamburger-container {
  height: 100%;
  width: 33.33%;
  display: flex;
  align-items: center;
  background-color: red;
}

.hamburger-container i {
  margin-left: 20px;
}

.header-logo-container {
  height: 100%;
  width: 33.33%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: green;
}

.header-profile-and-signin {
  height: 100%;
  width: 33.33%;
  display: flex;
  align-items: center;
  justify-content: space-around;
}

#nav {
  list-style: none;
  display: none;
}

.hidden {
  display: block;
}

#burger {
  cursor: pointer;
}

jQuery:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

  <script>

$("burger").click(function() {
  $("nav").toggleClass("hidden");
});

  </script>

Любая помощь будет очень признательна. Спасибо.

1 Ответ

1 голос
/ 11 апреля 2020

В вашем коде есть как минимум три проблемы:

  • $('burger') должно быть $('#burger') для включения префикса селектора идентификаторов
  • Аналогично, $('nav') должно быть $('#nav')
  • .hidden в вашем CSS должно быть #nav.hidden, чтобы его было достаточно c для переопределения стиля по умолчанию. Я бы также предложил изменить его на .visible в соответствии с его назначением, но это чисто семантическая проблема.

Другая возможная проблема заключается в том, что вам может понадобиться добавить обработчик события document.ready к ваш JS лог c, в зависимости от того, где вы разместили его на странице. Это обеспечит выполнение кода jQuery после полной загрузки DOM.

jQuery(function($) {
  $("#burger").click(function() {
    $("#nav").toggleClass("hidden");
  });
});
body {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

.header-section {
  height: 100px;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #999;
}

.header-container {
  height: 100%;
  width: 90%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: blue;
}

.header-content {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: yellow;
}

.hamburger-container {
  height: 100%;
  width: 33.33%;
  display: flex;
  align-items: center;
  background-color: red;
}

.hamburger-container i {
  margin-left: 20px;
}

.header-logo-container {
  height: 100%;
  width: 33.33%;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: green;
}

.header-profile-and-signin {
  height: 100%;
  width: 33.33%;
  display: flex;
  align-items: center;
  justify-content: space-around;
}

#nav {
  list-style: none;
  display: none;
}

#nav.hidden {
  display: block;
}

#burger {
  cursor: pointer;
}
<section class="header-section">
  <div class="header-container">
    <div class="header-content">
      <div class="hamburger-container">
        <i id="burger" class="fas fa-bars fa-2x">Burger</i>
      </div>
      <div class="header-logo-container">
        <h2>Logo goes here</h2>
      </div>
      <div class="header-profile-and-signin">
        <i class="fas fa-user-circle fa-2x"></i>
        <i class="fas fa-suitcase-rolling fa-2x"></i>
      </div>
      <ul id="nav">
        <li>
          <a href="search-page.html" style="text-decoration: none">Holidays</a>
        </li>
        <li>
          <a href="sign-in.html" style="text-decoration: none">Sign In / Register</a>
        </li>
      </ul>
    </div>
  </div>
</section>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
...