ChatGPT解决这个技术问题 Extra ChatGPT

顶部导航栏阻止页面的顶部内容

我有这个 Twitter 引导代码

  <div class='navbar navbar-fixed-top'>
    <div class='navbar-inner'>
      <div class='container'>
        <a class='btn btn-navbar' data-target='.nav-collapse' data-toggle='collapse'>
          <span class='icon-bar'></span>
          <span class='icon-bar'></span>
          <span class='icon-bar'></span>
        </a>
        <div class='nav-collapse'>
          <ul class='nav'>
            <li class='active'>
              <a href='some_url'>My Home</a>
            </li>
            <li>
              <a href='some_url'>Option 1 </a>
            </li>
            <li>
              <a href='some_url'>Another option</a>
            </li>
            <li>
              <a href='some_url'>Another option</a>
            </li>
          </ul>
        </div>
      </div>
    </div>
  </div>

但是当我查看页面的开头时,导航栏挡住了页面顶部附近的一些内容。关于如何在查看页面顶部时将其余内容向下推以使内容不被导航栏阻挡的任何想法?

@user2428107 该问题稍后发布。

K
KyleMit

如果您使用的是响应式引导程序,那么添加这样的填充是不够的。在这种情况下,当您调整窗口大小时,页面顶部和导航栏之间会出现间隙。一个合适的解决方案如下所示:

body {
  padding-top: 60px;
}
@media (max-width: 979px) {
  body {
    padding-top: 0px;
  }
}

完美的。这应该以某种方式真正集成到引导程序中。您应该分叉并提交拉取请求。
很好的解决方案,但仍有一些问题没有解决。看看我刚刚提出的这个问题,看看是否有人可以帮忙。 stackoverflow.com/questions/12763707/…
更简洁:@media (min-width: 981px) { body { padding-top: 60px; } }
@Ted 对我来说它必须是 min-width: 980px ;-)
@white_gecko 哈哈。是的。那个 980 想要变得更加特别独特 ;-)
Z
Zim

添加到您的 CSS:

body { 
    padding-top: 65px; 
}

Bootstrap docs

固定导航栏将覆盖您的其他内容,除非您在正文顶部添加填充。


请参阅@Spajus 下面的其他答案,了解如何为响应式 Bootstrap 编写代码
@media (min-width: 980px) { body { padding-top: 60px; } }
虽然其他答案确实更雄辩地解决了这个问题,但这是固定导航栏的引导文档中所述的官方答案 link
如果用户有一个更窄的屏幕或只是调整窗口大小,这将如何工作?扩展的导航栏部分将再次阻止最顶部的内容。
j
jojo

对于引导程序 3,类 navbar-static-top 而不是 navbar-fixed-top 可以防止此问题,除非您需要导航栏始终可见。


但是,这可能会在导航栏上方留下一些空间。您可能需要修改 site.css 并从正文中删除 padding-top 80px。
我尝试了一切,这是唯一有效的答案。因为这是最通用的解决方案并且不依赖于屏幕大小,所以这应该是正确的答案。
这解决了问题。为什么这个工作而不是导航栏固定顶部?
它不适用于引导程序 3.3.4。我在引导站点 getbootstrap.com/examples/navbar-fixed-top 上看到了固定导航示例,它使用 padding-top
虽然这有效,但它使导航栏成为静态而不是固定的。这意味着当您向下滚动时,导航栏会消失......至少对我来说这并不好。
c
catsky

一个更方便的解决方案供您参考,它在我的所有项目中都很完美:

将您的第一个“div”从

<div class='navbar navbar-fixed-top'>

<div class="navbar navbar-default navbar-static-top">

滚动时静态导航栏消失。
回复:@DanielC.Sobral 响应 - 如果它从顶部滚动,您可以将其切换为 js 中的固定项
A
Aram Paronikyan

我正在使用 jQuery 来解决这个问题。这是 BS 3.0.0 的片段:

$(window).resize(function () { 
    $('body').css('padding-top', parseInt($('#main-navbar').css("height"))+10);
});

$(window).load(function () { 
    $('body').css('padding-top', parseInt($('#main-navbar').css("height"))+10);        
});

我在导航栏上使用图像并且在隐藏内容时遇到了真正的问题。这非常有效!谢谢!
非常感谢您的解决方案。这个答案对我来说就像一个魅力:) 我想补充一件事。当您加载页面时,主体在它自动调整之前设置为顶部,因为 jquery 不会立即运行。为了使它更平滑,我在 CSS body{ padding-top: //我的导航栏的初始高度中添加了这个;这有助于顺利过渡!再次感谢你!
感谢您启发编程解决方案!我现在在 GWT 中有一个很好的工作实现,带有很好的封装结构良好的代码......由于缺乏 Javascript ;-)
P
PiersB

在我从 MVC 5 tutorial 派生的项目中,我发现更改主体填充没有效果。以下对我有用:

@media screen and (min-width:768px) and (max-width:991px) {
    body {
        margin-top:100px;
    }
}
@media screen and (min-width:992px) and (max-width:1199px) {
    body {
        margin-top:50px;
    }
}

它解决了导航栏折叠成 2 或 3 行的情况。这可以插入到 bootstrap.css 行 body { margin: 0; 之后的任何位置。 }


在研究了所有答案之后,这似乎是最好的解决方案。 (navbar-static-top 使其在滚动时消失,并且虚拟导航栏没有考虑真正的导航栏菜单可能会如何包装。)我发现引导程序有四种硬编码宽度情况:<768 像素、768-991、992 -1199 和 >1199。查看您的菜单在这 4 种情况下的表现。对于我网站的非管理员用户,我只需要 768-991 机箱的 100 像素就足够了。被放入site.css。或者,我注意到我们的菜单对于管理员用户来说更宽,并且更容易包装。所以我们把条件样式代码放在_Layout.cshtml
使用 margin-top 而不是 padding-top 向下移动导航栏下方的内容。确实,应用于 body 的 padding-top 在 MVC 中不起作用,但它似乎在应用于 body 容器时起作用。
J
Jason Butler

在我真正的固定导航栏之前创建一个虚拟的非固定导航栏,我取得了很好的成功。

<nav class="navbar navbar-default"></nav> <!-- Dummy nav bar -->
<nav class="navbar navbar-default navbar-fixed-top"> <!-- Real nav bar -->
    <!-- Nav bar details -->
</nav>

间距适用于所有屏幕尺寸。


起初我认为这是答案,并且准备投赞成票。但后来我意识到当尺寸变得足够窄以使其堆叠菜单按钮时它不起作用。 :-(
你是对的,如果没有额外的代码,它就不能用于菜单堆叠。我通常只是将菜单栏保持在一行高度,并在尺寸变窄时将菜单选项变成汉堡按钮。
我不知道为什么,但这有效。你能详细说明它为什么有效吗?
很好的主意!因为当某些页面有导航栏而有些没有导航栏时它很有用,因为无法与 css 文件区分开来。
这绝对是要走的路。它适用于所有设备,即使导航栏分成两行也是如此。 +1
Y
Yihui Xie

引导 v4 starter template css 使用:

body {
  padding-top: 5rem;
}

N
Nabil Kadimi

正如 Twitter 的 this example 中所见,在包含响应式样式声明的行之前添加以下内容:

<style> 
    body {
        padding-top: 60px;
    }
</style>

像这样:

<link href="Z/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<style type="text/css">
    body {
        padding-top: 60px;
    }
</style>
<link href="Z/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" />

A
Abhilash

使用 percentage 是比 pixels 更好的解决方案。

body {
  padding-top: 10%; //This works regardless of display size.
}

如果需要,您仍然可以通过添加不同的 breakpoints 来明确,如 @spajus 的另一个答案中所述


E
Eldiyar Talantbek

使用 navbar navbar-default 一切正常,但如果您使用的是 navbar-fixed-top,则必须包含自定义样式 body { padding-top: 60px;} 否则它会阻止下面的内容。


这不会添加其他答案中尚未添加的任何信息。
M
Michael Cole

这里会出现两个问题:

页面加载(内容隐藏) 像这样的内部链接将滚动到顶部,并被导航栏隐藏:

hello

世界

带有内部页面链接的 Bootstrap 4

要修复 1),正如 Martijn Burger 上面所说,bootstrap v4 starter 模板 css 使用:

body {
  padding-top: 5rem;
}

要修复 2) 签出 this issue。这段代码大部分都有效(但不是在第二次点击相同的哈希时):

window.addEventListener("hashchange", function() { scrollBy(0, -70) })

此代码使用 jQuery(不是苗条的 jQuery)为 A 链接设置动画:

  // inline theme global code here
  $(document).ready(function() {
    var body = $('html,body'), NAVBAR_HEIGHT = 70;
    function smoothScrollingTo(target) {
      if($(target)) body.animate({scrollTop:$(target).offset().top - NAVBAR_HEIGHT}, 500);
    }
    $('a[href*=\\#]').on('click', function(event){
      event.preventDefault();
      smoothScrollingTo(this.hash);
    });
    $(document).ready(function(){
      smoothScrollingTo(location.hash);
    });
  })

b
boatcoder

到目前为止,我发现的不涉及硬编码高度和断点的最佳解决方案是在标记中添加一个额外的 <nav... 标记。

<nav class="navbar navbar-expand-md" aria-hidden="true">
    <a class="navbar-brand" href="#">Navbar</a>
</nav>
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
    <a class="navbar-brand" href="#">Navbar</a>

通过这种方式,@media 断点相同,高度相同(假设您的 navbar-brandnavbar 中最高的对象,但您可以轻松替换非 fixed-top 导航栏中的另一个元素。

失败的地方是屏幕阅读器,它现在将显示 2 个 navbar-brand 元素。这表明需要一个 not-for-sr 类来防止该元素显示给屏幕阅读器。但是该类不存在https://getbootstrap.com/docs/4.0/utilities/screenreaders/

我已尝试使用 aria-hidden="true" 来弥补屏幕阅读器问题,但 https://www.accessibility-developer-guide.com/examples/sensible-aria-usage/hidden/ 似乎表明当屏幕阅读器处于焦点模式时这可能不起作用,这当然是您真正需要它工作的唯一时间.. .


U
Ultroman the Tacoman

编辑:此解决方案不适用于较新版本的 Bootstrap,其中 navbar-inverse 和 navbar-static-top 类不可用。

使用 MVC 5,我修复我的方式,是简单地添加我自己的 Site.css,在其他人之后加载,使用以下行:body{padding: 0}

我将_Layout.cshtml开头的代码更改为:

<body>
    <div class="navbar navbar-inverse navbar-static-top">
        <div class="container">
            @if (User.Identity.IsAuthenticated) {
                <div class="top-navbar">

navbar-static-top 未在 Bootstrap4 中定义。 navbar-inverse 也不是
我想这个答案已经过时了。我会在答案中添加注释。
a
adiga

你应该添加

#page {
  padding-top: 65px
}

不破坏粘性页脚或其他东西


N
Nathaniel Ford
<div class='navbar' data-spy="affix" data-offset-top="0">

如果您的导航栏最初位于页面顶部,请将值设置为 0。否则,请将 data-offset-top 的值设置为导航栏上方内容的值。

同时,您需要将 css 修改为:

.affix{
  width:100%;
  top:0;
  z-index: 10;
}

a
adiga

添加这个:

.navbar {
  position: relative;
}

A
Afsan Abdulali Gujarati

您可以使用 .stick-top,它可以在滚动时将导航栏固定到顶部,而无需添加任何 CSS 填充

<div class="container-fluid mt-3">
  <nav class="navbar navbar-expand-sm bg-white navbar-light sticky-top pt-0">
    <a class="navbar-brand" href="/">
      <img src="/images/logo-full.png" alt="logo" width="150">
    </a>
    <ul class="navbar-nav">
      <li class="nav-item">
        <a class="nav-link" href="/">Home</a>
      </li>
    </ul>
  </nav>
  <div class="row">
     .....
  </div>
</div>


c
cottonova

添加到您的 JS:

jQuery(document).ready(function($) {
  $("body").css({
    'padding-top': $(".navbar").outerHeight() + 'px'
  })
});

如果调整窗口大小,这将不起作用,因为您的 padding-top 仅在文档准备好时应用。
S
Shailesh Ladumor

您可以根据屏幕分辨率设置边距

@media screen and (min-width:768px) and (max-width:991px) {
body {
    margin-top:100px;
}

@media screen and (min-width:992px) and (max-width:1199px) {
  body {
    margin-top:50px;
  }
}

body{
  padding-top: 10%;
}

#nav{
   position: fixed;
   background-color: #8b0000;
   width: 100%;
   top:0;
}

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅