Создание Sticky Navbar с выпадающим меню HTML

Я создаю веб-страницу HTML, которая содержит липкую панель навигации с раскрывающимся меню. Однако, когда я его создал, выпадающее меню не работает на липкой панели навигации, и наоборот. ниже приведен скриншот обоих результатов двух кодов.

*изображение с выпадающим меню, но без липкой панели навигации

*изображение с липкой панелью навигации, но без выпадающего меню

ниже приведен код для «изображения с выпадающим меню, но без липкой панели навигации»

    <!DOCTYPE html>
    <html>
    <head>
   <meta name = "viewport" content = "width=device-width, initial-scale=1">
   <link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/font-    awesome/4.7.0/css/font-awesome.min.css">
    <style>
    body {margin:0;font-family:Arial}

   .topnav {
    overflow: hidden;
    background-color: #333;
  }

  .topnav a {
    list-style-type: none;
    float: left;
    display: block;
    color: #f2f2f2;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
    font-size: 17px;
    position: sticky;
  }



  .active {
    background-color: #04AA6D;
    color: white;
  }

  .topnav .icon {
    display: none;
  }

  .dropdown {
    float: left;
    overflow: hidden;
  }

  .dropdown .dropbtn {
    font-size: 17px;    
    border: none;
    outline: none;
    color: white;
    padding: 14px 16px;
    background-color: inherit;
    font-family: inherit;
    margin: 0;
  }

  .dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
    z-index: 1;
  }

  .dropdown-content a {
    float: none;
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
    text-align: left;
  }

  .topnav a:hover, .dropdown:hover .dropbtn {
    background-color: #555;
    color: white;
  }

  .dropdown-content a:hover {
    background-color: #ddd;
    color: black;
  }

  .dropdown:hover .dropdown-content {
    display: block;
  }

  @media screen and (max-width: 600px) {
    .topnav a:not(:first-child), .dropdown .dropbtn {
    display: none;
  }
    .topnav a.icon {
      float: right;
      display: block;
    }
  }

  @media screen and (max-width: 600px) {
    .topnav.responsive {position: relative;}
    .topnav.responsive .icon {
      position: absolute;
      right: 0;
      top: 0;
    }
    .topnav.responsive a {
      float: none;
      display: block;
      text-align: left;
    }
    .topnav.responsive .dropdown {float: none;}
    .topnav.responsive .dropdown-content {position: relative;}
    .topnav.responsive .dropdown .dropbtn {
      display: block;
      width: 100%;
      text-align: left;
    }
  }
  </style>
  </head>
  <body>
        <div class = "header">
        <h2>Scroll Down</h2>
    <p>Scroll down to see the sticky effect.</p>
  </div>

  <div class = "topnav" id = "myTopnav">
    <a href = "#home" class = "active">Home</a>
    <a href = "#news">News</a>
    <a href = "#contact">Contact</a>
    <div class = "dropdown">
      <button class = "dropbtn">Dropdown 
        <i class = "fa fa-caret-down"></i>
      </button>
      <div class = "dropdown-content">
        <a href = "#">Link 1</a>
        <a href = "#">Link 2</a>
        <a href = "#">Link 3</a>
      </div>
    </div> 
    <a href = "#about">About</a>
    <a href = "javascript:void(0);" style = "font-size:15px;" class = "icon"     onclick = "myFunction()">&#9776;</a>
  </div>

  <div style = "padding-left:16px">
    <h2>Responsive Topnav with Dropdown</h2>
    <p>Resize the browser window to see how it works.</p>
    <p>Hover over the dropdown button to open the dropdown menu.</p>
  </div>

  <h3>Sticky Navigation Bar Example</h3>
  <p>The navbar will <strong>stick</strong> to the top when you reach its scroll position.</p>
  <p><strong>Note:</strong> Internet Explorer do not support sticky positioning and Safari         requires a -webkit- prefix.</p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>
  <p>Some text to enable scrolling. </p>


  <script>
  function myFunction() {
    var x = document.getElementById("myTopnav");
    if (x.className === "topnav") {
      x.className += " responsive";
    } else {
      x.className = "topnav";
    }
  }
  </script>

  </body>
  </html>

ниже приведен код для «изображения с липкой панелью навигации, но без выпадающего меню»

<!DOCTYPE html>
<html>
<head>
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/font-    awesome/4.7.0/css/font-awesome.min.css">
<style>


body {
  font-size: 20px;
}
body {margin:0;}

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333;
  position: -webkit-sticky; /* Safari */
  position: sticky;
  top: 0;
}

li {
  float: left;
}

li a {
  display: block;
  color: white;
  text-align: center;
  padding: 16px 20px;
  text-decoration: none;
}

li a:hover {
  background-color: #111;
}
    
/*======================================================================*/

body {
  background-color:white;
}
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #38444d;
}

li {
  float: left;
}

li a, .dropbtn {
  display: inline-block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

li a:hover, .dropdown:hover .dropbtn {
  background-color: red;
}

li.dropdown {
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}
    
.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {background-color: #f1f1f1;}

.dropdown:hover .dropdown-content {
  display: block;
}


footer {
  text-align: center;
  padding: 3px;
  background-color: DarkSalmon;
  color: white;
}

</style>
</head>
<body>

<div class = "header">
  <h2>Scroll Down</h2>
  <p>Scroll down to see the sticky effect.</p>
</div>

<ul>
  <li><a href = "#home">Home</a></li>
    <li><a href = "#news">News</a></li>
    <li class = "dropdown">
      <a href = "javascript:void(1)" class = "dropbtn">Dropdown</a>
      <div class = "dropdown-content">
        <a href = "#">Link 1</a>
        <a href = "#">Link 2</a>
        <a href = "#">Link 3</a>
      </div>
    </li>
</ul>

<h3>Sticky Navigation Bar Example</h3>
<p>The navbar will <strong>stick</strong> to the top when you reach its scroll position.</p>
<p><strong>Note:</strong> Internet Explorer do not support sticky positioning and Safari requires a -webkit- prefix.</p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>
<p>Some text to enable scrolling. </p>


<footer>
  <p>Author: Hege Refsnes<br>
  <a href = "mailto:[email protected]">[email protected]</a></p>
</footer>


</body>
</html>

Пожалуйста, мне нужна помощь с этим, так как я новичок в html и css.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В первом коде удалите свойство переполнения из панели навигации и добавьте к нему минимальную высоту следующим образом:

.topnav {
      /* overflow: hidden; */
      background-color: #333;
      position: sticky;
      top: 0;
      min-height: 45px;
    }

Поскольку вы используете свойство float в элементах навигации, это может вызвать проблемы.

Рабочий код Код

привет, большое спасибо за помощь. навигационная панель теперь работает хорошо. Могу ли я узнать, как свойство float заставляет эту панель навигации не работать?

thanabalan tharmalingam 07.05.2022 08:24

и, для второго кода, липкая панель навигации работает, но только выпадающее меню не работает. у вас есть какое-нибудь решение для этого?

thanabalan tharmalingam 07.05.2022 08:27

@thanabalantharmalingam, то же самое, удалите свойство overflow: hidden и добавьте свойство min-height в селектор ul. Второй код связь

Madhan1021 07.05.2022 08:35

второй код тоже работает благодаря вашей помощи. но как работает свойство min-height в этой конкретной части?

thanabalan tharmalingam 07.05.2022 08:40

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

Ваше первое кодовое решение

 .topnav {
            background-color: #333;
            position: sticky;
            top: 0;
        }
        @media screen and (min-width:768px){
            .topnav {
            display: flex;
        }  
        }
@media screen and (max-width: 767.98px){
    .topnav {
            overflow: hidden;
        }  
}

Ваше второе кодовое решение

ul {
    display: flex;
  list-style-type: none;
  margin: 0;
  padding: 0;
  /* overflow: hidden; */
  background-color: #333;
  position: -webkit-sticky; /* Safari */
  position: sticky;
  top: 0;
}
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  /* overflow: hidden; */
  background-color: #38444d;
}

привет, большое спасибо за помощь. для первого кода, который вы указали, панель навигации немного отличается от стандартной, а стиль имени (например, «О программе», «Домой») изменен на ярлык ссылки. для второго кода, которым вы поделились, в моем коде нет изменений. Мне очень жаль, что в моем коде нет изменений. на твоем работает?

thanabalan tharmalingam 07.05.2022 08:34

Да, это работает на моей стороне. Вы добавили display: flex; и нужно удалить overflow: hidden;

Sahil Palad 07.05.2022 08:44

О боже!!! Я ужасно сожалею об этом. я мог бы заметить только эту линию. кажется, ваши коды тоже работают в коде. Большое спасибо за вашу помощь, очень ценю это.

thanabalan tharmalingam 07.05.2022 08:51

могу ли я узнать, почему вам нужно удалить «переполнение: скрыто»; свойство? похоже, что мистер Мадхан сделал то же самое.

thanabalan tharmalingam 07.05.2022 08:52

Другие вопросы по теме