【问题标题】:When I click an anchor on a navbar it takes me there, but part of the content is hidden by the navbar itself当我单击导航栏上的锚点时,它会将我带到那里,但导航栏本身隐藏了部分内容
【发布时间】:2021-07-09 21:19:17
【问题描述】:

所以我在网上看到一些模板,当您单击导航栏上的锚点时,页面会将您带到该部分,并且分区完全对齐,这意味着您在页面顶部看到的内容(显然忽略了navbar), 是分区的顶部。

我尝试这样做,但是当我尝试时,一些内容放在导航栏后面,有人知道如何解决这个问题吗?

我为“解决”这个问题所做的就是在部分块中添加填充,但如果它完全对齐会更好看。

这是模板:https://startbootstrap.com/theme/freelancer

模板的 HTML 和 JavaScript 如下所示(由于字符限制,我无法上传 CSS),有人可以告诉我代码的哪一部分是这样做的吗?

这是 HTML 的一部分:

**<!-- Navigation-->
        <nav class="navbar navbar-expand-lg bg-secondary text-uppercase fixed-top" id="mainNav">
            <div class="container">
                <a class="navbar-brand" href="#page-top">Start Bootstrap</a>
                <button class="navbar-toggler text-uppercase font-weight-bold bg-primary text-white rounded" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                    Menu
                    <i class="fas fa-bars"></i>
                </button>
                <div class="collapse navbar-collapse" id="navbarResponsive">
                    <ul class="navbar-nav ms-auto">
                        <li class="nav-item mx-0 mx-lg-1"><a class="nav-link py-3 px-0 px-lg-3 rounded" href="#portfolio">Portfolio</a></li>
                        <li class="nav-item mx-0 mx-lg-1"><a class="nav-link py-3 px-0 px-lg-3 rounded" href="#about">About</a></li>
                        <li class="nav-item mx-0 mx-lg-1"><a class="nav-link py-3 px-0 px-lg-3 rounded" href="#contact">Contact</a></li>
                    </ul>
                </div>
            </div>
        </nav>
        <!-- Masthead-->
        <header class="masthead bg-primary text-white text-center">
            <div class="container d-flex align-items-center flex-column">
                <!-- Masthead Avatar Image-->
                <img class="masthead-avatar mb-5" src="assets/img/avataaars.svg" alt="..." />
                <!-- Masthead Heading-->
                <h1 class="masthead-heading text-uppercase mb-0">Start Bootstrap</h1>
                <!-- Icon Divider-->
                <div class="divider-custom divider-light">
                    <div class="divider-custom-line"></div>
                    <div class="divider-custom-icon"><i class="fas fa-star"></i></div>
                    <div class="divider-custom-line"></div>
                </div>
                <!-- Masthead Subheading-->
                <p class="masthead-subheading font-weight-light mb-0">Graphic Artist - Web Designer - Illustrator</p>
            </div>
        </header>
<!-- About Section-->
        <section class="page-section bg-primary text-white mb-0" id="about">
            <div class="container">
                <!-- About Section Heading-->
                <h2 class="page-section-heading text-center text-uppercase text-white">About</h2>
                <!-- Icon Divider-->
                <div class="divider-custom divider-light">
                    <div class="divider-custom-line"></div>
                    <div class="divider-custom-icon"><i class="fas fa-star"></i></div>
                    <div class="divider-custom-line"></div>
                </div>
                <!-- About Section Content-->
                <div class="row">
                    <div class="col-lg-4 ms-auto"><p class="lead">Freelancer is a free bootstrap theme created by Start Bootstrap. The download includes the complete source files including HTML, CSS, and JavaScript as well as optional SASS stylesheets for easy customization.</p></div>
                    <div class="col-lg-4 me-auto"><p class="lead">You can create your own custom avatar for the masthead, change the icon in the dividers, and add your email address to the contact form to make it fully functional!</p></div>
                </div>
                <!-- About Section Button-->
                <div class="text-center mt-4">
                    <a class="btn btn-xl btn-outline-light" href="https://startbootstrap.com/theme/freelancer/">
                        <i class="fas fa-download me-2"></i>
                        Free Download!
                    </a>
                </div>
            </div>
        </section>**

这就是 JavaScript

    /*!
* Start Bootstrap - Freelancer v7.0.3 (https://startbootstrap.com/theme/freelancer)
* Copyright 2013-2021 Start Bootstrap
* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-freelancer/blob/master/LICENSE)
*/
//
// Scripts
// 

window.addEventListener('DOMContentLoaded', event => {

    // Navbar shrink function
    var navbarShrink = function () {
        const navbarCollapsible = document.body.querySelector('#mainNav');
        if (!navbarCollapsible) {
            return;
        }
        if (window.scrollY === 0) {
            navbarCollapsible.classList.remove('navbar-shrink')
        } else {
            navbarCollapsible.classList.add('navbar-shrink')
        }

    };

    // Shrink the navbar 
    navbarShrink();

    // Shrink the navbar when page is scrolled
    document.addEventListener('scroll', navbarShrink);

    // Activate Bootstrap scrollspy on the main nav element
    const mainNav = document.body.querySelector('#mainNav');
    if (mainNav) {
        new bootstrap.ScrollSpy(document.body, {
            target: '#mainNav',
            offset: 72,
        });
    };

    // Collapse responsive navbar when toggler is visible
    const navbarToggler = document.body.querySelector('.navbar-toggler');
    const responsiveNavItems = [].slice.call(
        document.querySelectorAll('#navbarResponsive .nav-link')
    );
    responsiveNavItems.map(function (responsiveNavItem) {
        responsiveNavItem.addEventListener('click', () => {
            if (window.getComputedStyle(navbarToggler).display !== 'none') {
                navbarToggler.click();
            }
        });
    });

});

这是模板的图片,我们可以看到,由于背景颜色,分区非常清晰:

当我点击导航栏上的投资组合时,它会将其向下移动,位于所选部门的顶部:

当我对我的 HTML 文件执行此操作时,它会将我带到选定的部分,但该部分的顶部被导航栏本身隐藏。这是该部分的图片:

这是我单击导航栏中的锚点后的图片,正如我们所见,它确实将我带到了该部分,但标题被导航栏本身隐藏,这在模板中不会发生。

为了解决这个问题,我只是在该部分中添加了填充,但它看起来仍然不如模板好

【问题讨论】:

  • 你能添加一个有同样问题的sn-p吗?
  • 我的文件很乱,因为我一直在从网上找到的不同模板中复制和粘贴,所以我不确定它是否会很有帮助。另外,我不知道问题出在 JavaScript、HTML 还是 CSS 中,您希望我向您展示哪个部分?
  • 能否截取问题的截图或短视频?
  • 好的,等一下
  • 好的,我上传了一些截图,希望对他们有所帮助

标签: javascript html css navbar


【解决方案1】:

你想要的是为固定标题的大小创建一个偏移量。

这里有一些解决方案:

https://css-tricks.com/hash-tag-links-padding/

https://fellowtuts.com/html-css/offsetting-anchor-hash-tag-links-to-adjust-for-fixed-header/

【讨论】:

  • 谢谢,如果我能正常工作,我会检查并更新
  • 我只是无法让它工作,可能是因为图像或某些东西覆盖了解决方案,你知道模板上的代码的哪个部分吗?
  • @DeviceGucci 你能创建一个reproducible snippet吗?我了解您的问题,但无法使用部分代码进行调试。在 codepen 或类似的东西上创建一个代码 sn-p。
  • 这个链接有效吗?我从来没有用过codepen所以我不确定你是否能看到这个这是模板,我想知道哪个部分负责偏移codepen.io/DeviceGucci/pen/JjNXWbg
  • @DeviceGucci 您共享的 codepen sn-p 似乎按您的预期工作。
【解决方案2】:

发生这种情况是因为下一页没有顶部的填充,因此默认设置为 0,您可以从内容顶部添加填充,也可以将底部添加到中殿。

你可以试试

.toppd{
   padding-top : 30px;
 }

将此类添加到您页面的第一个 &lt;section&gt;&lt;div&gt;

【讨论】:

  • 我确实有填充物,但它与被带到确切的地方不一样,我可能会暂时留下填充物,但它看起来不如模板
【解决方案3】:

在这种情况下,您应该使用 css z-index。

navbar {
  position: absolute;
  left: 0px;
  top: 0px;
  z-index: -1;
}

负值意味着它会被抛在后面。您可以根据需要使用正数索引许多 div 和其他元素。这段 CSS 可以把导航栏发回去。

【讨论】:

  • 这个什么都没做,看起来一样,不过谢谢回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多