skip to Main Content

I am currently working on a project to learn and am very new to this. I ran into this issue:

When I use to jump to a header of the page, the title of that header is blocked by the navbar. In this example, when I click ‘Texas’, the title is hidden. How can I fix this without greatly altering how my navbar is built?

.topnav {
background-color: #000000;
position: sticky;
top: 0;
min-height: 62px;
z-index: 999999;
padding-bottom: 40px;
}

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

}

.topnav .icon {
display: none;
}
  <div class="topnav" id="myTopnav">     
      <a href="#">THIS IS A NAVBAR</a>
  </div>

<h1>LOCATIONS</h1>
      <p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod 
      tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim venim, 
      quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
      equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
      dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
      ent, sunt in culpa qui officia deserunt mollit anim id est laborum."
      </p>
      <div class="container">
        <h3>Contents</h3>
          <ol type="1">
            <li><a href="#h2_texas">Texas</a></li>
            <li><a href="#h2_florida">Florida</a></li>
            <li><a href="#h2_california">California</a></li>
           </ol>
      </div>
      
      <h2 id="h2_texas">Texas</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
      empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
      quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
      equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
      dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
      ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
      </p>
      
      <h2 id="h2_florida">Florida</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
      empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
      quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
      equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
      dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
      ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
      </p>
      
      <h2 id="h2_california">California</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
      empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
      quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo con
      equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
      dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
      ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
      </p>

5

Answers


  1. I found this problem very interesting , I took a local copy and checked , I have added below snippet into the css and it is working perfectly fine.

    h2 {
        scroll-margin-top: 102px; // header min height 62px + padding bottom 40px
    }
    Login or Signup to reply.
  2. You have a fixed navbar that is too wide.

    You can add another anchor to an element with no text(or hidden) in it before the actual header you want to jump to – but this is crappy solution. – or by having the bar shrink once you’ve scrolled past its initial appearance.

    Login or Signup to reply.
  3. The script listens for click events on all anchor links (a[href^="#"]) and prevents the default behavior. It then calculates the position of the target element and scrolls to it, considering an offset (-100 pixels) to account for the navbar height. Adjust the -100 value according to your navbar height.

    ‘smooth’ property ensures a smooth scrolling animation to the target element.

    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
                anchor.addEventListener('click', function (e) {
                    e.preventDefault();
    
                    const targetId = this.getAttribute('href').substring(1);
                    const targetElement = document.getElementById(targetId);
    
                    // Scroll to the target element with offset for the sticky navbar
                    window.scrollTo({
                        top: targetElement.offsetTop - 100, // Adjust based on navbar height
                        behavior: 'smooth'
                    });
                });
            });
    .topnav {
    background-color: #000000;
    position: sticky;
    top: 0;
    min-height: 62px;
    z-index: 999999;
    padding-bottom: 40px;
    }
    
    .topnav a {
    list-style-type: none;
    float: left;
    display: block;
    color: #f2f2f2;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
    font-size: 15px;
    
    }
    
    .topnav .icon {
    display: none;
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Page with Navbar</title>
    </head>
    <body>
        <div class="topnav" id="myTopnav">     
          <a href="#">THIS IS A NAVBAR</a>
      </div>
    
    <h1>LOCATIONS</h1>
          <p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod 
          tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim venim, 
          quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
          equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
          dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
          ent, sunt in culpa qui officia deserunt mollit anim id est laborum."
          </p>
          <div class="container">
            <h3>Contents</h3>
              <ol type="1">
                <li><a href="#h2_texas">Texas</a></li>
                <li><a href="#h2_florida">Florida</a></li>
                <li><a href="#h2_california">California</a></li>
               </ol>
          </div>
          
          <h2 id="h2_texas">Texas</h2>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
          empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
          quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
          equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
          dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
          ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
          </p>
          
          <h2 id="h2_florida">Florida</h2>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
          empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
          quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
          equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
          dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
          ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
          </p>
          
          <h2 id="h2_california">California</h2>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
          empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
          quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo con
          equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
          dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
          ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
          </p>
    </body>
    </html>
    Login or Signup to reply.
  4. You should put the .container class top of the .topnav class. After that navbar is sticky and anchor tag is working fine. Additionally if you want to see the navbar top of the page after clicking the anchor text you can use:

     html {
            scroll-padding-top:7rem;
          }
        
    
    .topnav {
        background-color: #000000;
        position: sticky;
        display:block;
        top: 0;
        min-height: 62px;
        z-index: 999999;
        padding-bottom: 40px;
        }
        
        .topnav a {
        list-style-type: none;
        float: left;
        display: block;
        color: #f2f2f2;
        text-align: center;
        padding: 14px 16px;
        text-decoration: none;
        font-size: 15px;
        
        }
        
        .topnav .icon {
        display: none;
        }
    <body>
       <div class="container">
      <div class="topnav" id="myTopnav">     
         <span style="color:white">THIS IS A NAVBAR</span>
    </div>
    
    <h1>LOCATIONS</h1>
        <p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod 
        tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim venim, 
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
        equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
        dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
        ent, sunt in culpa qui officia deserunt mollit anim id est laborum."
        </p>
     
          <h3>Contents</h3>
            <ol type="1">
              <li><a href="#h2_texas">Texas</a></li>
              <li><a href="#h2_florida">Florida</a></li>
              <li><a href="#h2_california">California</a></li>
             </ol>
        </div>
        
        <h2 id="h2_texas">Texas</h2>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
        empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
        equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
        dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
        ent, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Cupiditate cumque dolorum fugit cum est? Ullam aperiam dolor inventore reiciendis voluptatem quasi veritatis est consequatur dolorem quo, mollitia perspiciatis numquam dicta.
        Nobis expedita inventore nisi tempora reiciendis minima laboriosam delectus, voluptate voluptatem. Fugiat quis adipisci eius dolores cupiditate laudantium nulla consequuntur repudiandae nemo perferendis totam alias a aut, ratione amet eveniet.
        Voluptatum velit quasi blanditiis, ea totam obcaecati sapiente. Vitae culpa eius aut tempora pariatur, laborum accusantium voluptas error nulla officiis sint nam possimus qui quam repellendus excepturi, nostrum, dignissimos harum.
        Eveniet nobis, cumque aut vero est corporis, illo quia et blanditiis, totam non fugit illum repellendus assumenda maxime. Veniam molestiae deleniti obcaecati libero nulla, nihil maiores esse necessitatibus odio minima.
        Iste beatae quod incidunt cupiditate molestias, esse eos nisi? Cumque eum amet assumenda animi, facere tenetur doloremque saepe voluptate esse natus dicta! Blanditiis ratione saepe cumque quod, itaque libero repellat!
        </p>
        
        <h2 id="h2_florida">Florida</h2>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
        empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos
        equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
        dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
        ent, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatem, iure quo? Reprehenderit dolorem officiis, rerum, nisi error asperiores dicta suscipit libero voluptatem eaque cum provident laboriosam doloremque porro? Consequatur, sunt.
        Iure ratione quisquam dicta beatae nesciunt optio, provident similique error corporis porro odio. Exercitationem soluta iste iusto, reprehenderit error tempora accusantium itaque quis enim, quos doloremque eum dolor, quae aut!
        Placeat ducimus illo saepe totam eum fugit autem debitis delectus perferendis expedita cupiditate rerum animi sint, mollitia maiores vel natus dignissimos nisi voluptates at rem! Fugit possimus ut enim et.
        Cupiditate ad quod cum error facere ipsam neque dignissimos molestiae, atque quasi, quas, ipsa modi veritatis minima. Suscipit quasi fugit aliquam optio, quis commodi, maiores alias consequuntur, ipsum temporibus porro.
        Eveniet magnam vel maxime praesentium numquam omnis libero similique soluta, dolore necessitatibus voluptate porro odio fuga quod beatae cum repellendus? Amet blanditiis eius doloremque ratione quam deserunt dolorem, quaerat odit!
        </p>
        
        <h2 id="h2_california">California</h2>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt
        empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo con
        equat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillm 
        dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod
        ent, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor, sit amet consectetur adipisicing elit. Nam corrupti sequi fugit adipisci asperiores veritatis eaque placeat nulla! Vel numquam beatae a molestias officiis quidem? Consectetur nobis itaque harum molestiae.
        Repellat doloribus dolorum enim, quis ipsa inventore commodi eum unde, maiores fugiat hic accusantium ullam dolor praesentium libero omnis laudantium quisquam placeat! A, omnis. Ipsa soluta unde vel possimus veritatis.
        Fugit error ea eum, consectetur itaque officiis magni quod veritatis similique nulla incidunt vitae qui, mollitia libero in aliquid quibusdam natus maiores ipsum alias perspiciatis. Sapiente temporibus fuga atque tempora!
        Officiis animi reprehenderit rerum hic quod perferendis eum ipsa? Nobis ut natus obcaecati asperiores distinctio voluptatibus alias et accusantium quam, harum sapiente! Voluptatibus aperiam iusto autem incidunt voluptates odit doloribus?
        Eaque dignissimos a, excepturi eligendi enim quaerat recusandae, adipisci quo dolore est voluptate nihil? Adipisci omnis amet molestiae ut odit dolor quas laborum, quis fugit, ab, sit provident sed assumenda. Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi voluptatibus quisquam ad rem eius consectetur quae est officiis, sit quasi sint maxime nulla reiciendis aperiam maiores nemo sunt expedita odit.
        Iure error, dolores velit molestias eius totam vel provident itaque, nisi ratione qui deleniti hic! Repellat doloremque excepturi, asperiores voluptates voluptatem sint? Illum aliquid, aspernatur dicta ducimus blanditiis nulla fuga?
        Quis quidem voluptatum veniam esse dolor voluptatem ipsa in alias doloribus. Expedita laboriosam necessitatibus earum, quidem hic eos nemo porro fuga ea rem modi, omnis quasi consequatur, sunt quisquam facilis?
        Eum sunt ad aspernatur, vel impedit ipsum error tempore dolores a ipsam similique natus libero eos exercitationem. Quaerat, quas itaque, laudantium ullam nulla pariatur consequatur molestiae culpa fuga saepe maiores.
        Quam et quos odio, odit itaque at reprehenderit voluptatum recusandae facere tenetur necessitatibus, quod voluptates, animi doloribus minus temporibus tempore harum sapiente? Perferendis similique commodi reiciendis harum, et delectus rerum?
        </p>
     </body>
    Login or Signup to reply.
  5. You can use the :target selector to select the targeted element and add padding-top to the height of the navbar. However, this will only work if you know the height of the navbar before and the navbar is calculated as border-box. If you do not know that before, you have to use JS to set the variable for the offset dynamically:

    :root {
      --navbar-height: 62px;
    }
    
    .topnav {
      box-sizing: border-box;
      background-color: #000000;
      position: sticky;
      top: 0;
      height: var(--navbar-height);
      z-index: 999999;
      padding-bottom: 40px;
    }
    
    .topnav a {
      list-style-type: none;
      float: left;
      display: block;
      color: #f2f2f2;
      text-align: center;
      padding: 14px 16px;
      text-decoration: none;
      font-size: 15px;
    }
    
    .topnav .icon {
      display: none;
    }
    
    :target {
      padding-top: calc(var(--navbar-height) + 0.5em);
    }
    <div class="topnav" id="myTopnav">
      <a href="#">THIS IS A NAVBAR</a>
    </div>
    
    <h1>LOCATIONS</h1>
    <p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim venim, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos equat. Duis aute irure dolor
      in reprehenderit in voluptate velit esse cillm dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod ent, sunt in culpa qui officia deserunt mollit anim id est laborum."
    </p>
    <div class="container">
      <h3>Contents</h3>
      <ol type="1">
        <li><a href="#h2_texas">Texas</a></li>
        <li><a href="#h2_florida">Florida</a></li>
        <li><a href="#h2_california">California</a></li>
      </ol>
    </div>
    
    <h2 id="h2_texas">Texas</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos equat. Duis aute irure dolor
      in reprehenderit in voluptate velit esse cillm dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </p>
    
    <h2 id="h2_florida">Florida</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo cos equat. Duis aute irure dolor
      in reprehenderit in voluptate velit esse cillm dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </p>
    
    <h2 id="h2_california">California</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmodt empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo con equat. Duis aute irure dolor
      in reprehenderit in voluptate velit esse cillm dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non prod ent, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </p>
    
    
    <h3 style="height: 200vh">just an element to simualte more content</h3>
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search