Search code examples
cssscrollnavsticky

My scrolling fixed navbar drop-down isn't displaying properly


I created a nav bar and when you scroll it sticks to the top of the page but my dropdown isn't functioning properly. The drop down does display but the main content then shifts down and the dropdowns content spans the width of the display. I had to edit it again because some of my code was missing....Any help would be appreciated. Thanks

        body {
            font-size: 28px;
              }

           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, .dropbtn  {
                  display:  inline-block;
                  color: white;
                  text-align: center;
                    padding: 14px 16px;
                text-decoration: none;
                    }

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

                .active {
                   background-color: #4CAF50;
                        }
            li.dropdown {
                display: inline-block;
                      }

                  .dropdown-content {
                 display: none;
                 position: sticky;
                 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;
                        }
            <!DOCTYPE html>
            <html>
            <head>

             </head>
             <body>

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

             <ul>
              <li><a class="active" href="#home">Home</a></li>
              <li><a href="#news">News</a></li>
              <li><a href="#contact">Contact</a></li>
              <li class="dropdown">
               <a href="javascript:void(0)" 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>Added text for scrolling</h3>
           <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
           maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
           omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum 
           no molestiae voluptatibus.</p>
           <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
           maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
           omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum 
          no molestiae voluptatibus.</p>
         <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
         maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
         omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no 
         molestiae voluptatibus.</p>
         <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
         maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
         omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no 
         molestiae voluptatibus.</p>
         <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
         maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
         omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no 
         molestiae voluptatibus.</p>
         <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
         maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
         omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no 
         molestiae voluptatibus.</p>
         <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
         maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
         omnis evertitur eum. 
         Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae 
         voluptatibus. 
         </p>
 
         </body>
         </html>


Solution

  • You have some issues in your code.

    What is happening is that your dropdown is pushing all the content down, so you should change its position to absolute.

    You should avoid using float, it's a bad habit and it's outdated. Instead use flex, it's supported enough nowadays.

     body {
                font-size: 28px;
                  }
    
               ul {
                   list-style-type: none;
                   margin: 0;
                   padding: 0;
       
                   background-color: #333;
                   position: -webkit-sticky; /* Safari */
                   position: sticky;
                   top: 0;
                   
                   display: flex;
                   align-items: center;
                      }
    
                    li {
                      position: relative
                        }
    
                    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: #111;
                      }
    
                    .active {
                       background-color: #4CAF50;
                            }
        
    
                      .dropdown-content {
                     display: none;
                     position: absolute;
                     left: 0;
                     top: 60px;
                     right: 0;
                     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;
                            }
      <!DOCTYPE html>
                <html>
                <head>
    
                 </head>
                 <body>
    
                 <div class="header">
                 <h2>Scroll Down</h2>
                   <p>Scroll down to see the sticky effect.</p>
                 </div>
    
                 <ul>
                  <li><a class="active" href="#home">Home</a></li>
                  <li><a href="#news">News</a></li>
                  <li><a href="#contact">Contact</a></li>
                  <li class="dropdown">
                   <a href="javascript:void(0)" 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>Added text for scrolling</h3>
               <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
               maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
               omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum 
               no molestiae voluptatibus.</p>
               <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
               maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
               omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum 
              no molestiae voluptatibus.</p>
             <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
             maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
             omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no 
             molestiae voluptatibus.</p>
             <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
             maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
             omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no 
             molestiae voluptatibus.</p>
             <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
             maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
             omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no 
             molestiae voluptatibus.</p>
             <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
             maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
             omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no 
             molestiae voluptatibus.</p>
             <p>Some text to enable scrolling. Lorem ipsum dolor sit amet, illum definitiones no quo, 
             maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam 
             omnis evertitur eum. 
             Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae 
             voluptatibus. 
             </p>
     
             </body>
             </html>