【问题标题】:Put div below navigation bar and don't overlap content将 div 放在导航栏下方,不要重叠内容
【发布时间】:2014-12-11 16:30:03
【问题描述】:

我的问题是我在网页顶部修复了一个导航栏,它包括侧边距和顶部边距。在这个导航栏下面,我想设置一个可滚动的容器。

我说我正在使用 Bootstrap 3.2.0 来布置网站。

问题是由于我的导航栏的边距,我想放在下面的内容与导航栏重叠,并且显示在导航栏旁边。为了更好地解释这一点,我向您提供了我的代码和一个活生生的例子:

更新:从我的角度来看,我注意到一些事情会增加一点难度,那就是 body 有一个规则来隐藏滚动并且不允许向上/向下滚动:

我只想滚动内容“Hi World”,显然整个内容从第一个单词显示:“BEGIN”到“END”单词滚动。

body {
   overflow: hidden;
}

http://www.bootply.com/TZebvFEl3T(我用所需的限制更新了 bootply 代码)。

<nav class="navbar navbar-default navbar-fixed-top my-own-style">
   <ul class="nav navbar-nav">
    <li class="active"><a href="#">Home</a></li>
    <li><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
    <li class="divider-vertical"></li>
    <li><a href="#">More</a></li>
    <li><a href="#">Options</a></li>
   </ul>
</nav>

<div>
    <p>BEGIN</p>
    <p>Hi World</p>
       Hi World
    <p>Hi World</p>
    <p>Hi World</p>
       Hi World
    <p>Hi World</p>
    <p>Hi World</p>
       Hi World
    <p>Hi World</p>
    <p>Hi World</p>
       Hi World
    <p>Hi World</p>
    <p>Hi World</p>
    ...
    <p>END</p>
</div>

更新 2:

用你的答案和我自己的研究进行实验,我取得了一些对我来说很接近的东西,我有一个 div 滚动,其内容位于导航菜单下方,现在内容不会重叠。

问题是我在页面上也有一个固定的页脚,如果我调整窗口大小,滚动不是完全可见的,我无法到达列表的末尾,因为被页脚重叠,所以不让我看看卷轴的结尾,如果我删除页脚,这显然是可见的。

但是我必须调整我的滚动以从顶部导航菜单的底部开始,并在我的页脚顶部结束,如您在示例中看到的那样,当您调整浏览器大小时会出现问题。

我想我正在为我的容器寻找类似的东西,请查看下一个链接:

Content with 100% between header and footer

这是我的代码:

http://www.bootply.com/knJkGoEHWQ

HTML:

<nav class="navbar navbar-default navbar-fixed-top my-own-style">
    <ul class="nav navbar-nav">
        <li class="active"><a href="#">Home</a></li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
        <li class="divider-vertical"></li>
        <li><a href="#">More</a></li>
        <li><a href="#">Options</a></li>
    </ul>
</nav>

<div class="container-fluid scroll">
    <p>BEGIN</p>
    <p>Hi World</p>
    <p>Hi World</p>
    <p>Hi World</p>
    <p>Hi World</p>
    <p>Hi World</p>
    <p>Hi World</p>
    <p>Hi World</p>
    <p>Hi World</p>
    ... 
    <p>END</p>
</div>

<div class="navbar navbar-default navbar-fixed-bottom">
    <div class="navbar-header"><a class="navbar-brand" href="#">Brand</a></div>
    <ul class="nav navbar-nav">
     <li class="active"><a href="#">Home</a></li>
     <li><a href="#">Link</a></li>
     <li><a href="#">More</a></li>
     <li><a href="#">Options</a></li>
      </ul>
</div>

CSS:

/* CSS used here will be applied after bootstrap.css */

body, html {
    height: 100%;
    overflow: hidden;
    padding-top: 44px;
}

.my-own-style {
    margin-left: 37px;
    margin-top: 37px;
}

.scroll {
    overflow: auto;
    height: 80%;
    padding: 0;
    margin-left: 37px;
}

更新 3(解决方案):

好吧,关于更新 2,问题很简单解决,可能我没看到。 基本上与我在主体顶部添加一个填充以将我的主容器设置在顶部导航菜单下方的方式相同,我必须执行完全相同的操作,但使用主体的底部填充将我的主容器设置在底部导航上方菜单。

此外,我将我的主容器的高度设置为 100%,这样它就会沿着包含它的整个 div 展开。

解决办法如下:

http://www.bootply.com/sazMMHNCGy

HTML:

<nav class="navbar navbar-default navbar-fixed-top my-own-style">
    <ul class="nav navbar-nav">
        <li class="active"><a href="#">Home</a></li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
        <li class="divider-vertical"></li>
        <li><a href="#">More</a></li>
        <li><a href="#">Options</a></li>
    </ul>
</nav>

<div class="scroll">
    <p>BEGIN</p>
    <p>Hi World</p>
    Hi World
    <p>Hi World</p>
    <p>Hi World</p>
    Hi World
    <p>Hi World</p>
    <p>Hi World</p>
    <p>Hi World</p>
    <p>Hi World</p>
    ...
    <p>END</p>
</div>

<div class="navbar navbar-default navbar-fixed-bottom">
    <div class="navbar-header"><a class="navbar-brand" href="#">Brand</a></div>
    <ul class="nav navbar-nav">
     <li class="active"><a href="#">Home</a></li>
     <li><a href="#">Link</a></li>
     <li><a href="#">More</a></li>
     <li><a href="#">Options</a></li>
      </ul>
</div>

CSS:

/* CSS used here will be applied after bootstrap.css */

body, html {
    height: 100%;
    overflow: hidden;
    padding-top: 44px;
    padding-bottom: 25px;
}

.my-own-style {
    margin-left: 37px;
    margin-top: 37px;
}

.scroll {
    overflow: auto;
    height: 100%;
    padding: 0;
    margin-left: 37px;
}

对我来说,这是我一直在寻找的解决方案。

【问题讨论】:

    标签: html css twitter-bootstrap twitter-bootstrap-3


    【解决方案1】:

    来自Bootstrap documentation

    需要正文填充 固定导航栏将覆盖您的其他内容,除非您在

    的顶部添加填充。试试你自己的价值观或使用我们下面的 sn-p。提示:默认情况下,导航栏的高度为 50px。

    所以只需添加你的身体填充:

    body
    {
        padding-top: 70px;
    }
    

    如果您不希望您的身体在导航栏后面滚动,请将您的 CSS 更改为使用填充而不是边距:

    .my-own-style {
        padding-left: 37px;
        padding-top: 37px;
    }
    

    【讨论】:

      【解决方案2】:

      我真的不喜欢为了推送内容而添加元素。这就是定位设计要处理的问题。正如@davidg 在他的回答中所说,最好的方法是首先在身体顶部添加填充物。此外,要将导航栏移动到位,请不要使用边距。而是使用顶部、左侧和右侧属性。 navbar-fixed-top 类已经将位置设置为固定,因此您不需要提供任何位置属性值。我还在你的 div 中添加了 container-fluid 类(这样你就可以在里面得到一些填充)和一个可滚动的自定义类来设置溢出属性。

      DEMO

      CSS:

      html, body {
        height: 100%; /*Fixes the height to 100% of the viewport*/
      }
      body {
        padding-top: 87px; /*50px for the height of the navbar + 37px for the offset*/
        padding-bottom: 50px; /*50px for the height of the bottom navbar*/
      }
      .navbar-offset {
          top: 37px; /*Offsets the top navbar 37px from the top of the viewport*/
      }
      .container-fluid.scrollable {
        height: 100%; /*Sets the scrollable area to 100% of the viewport*/
        overflow: auto; /*Allows the scrollable area to have a scrollbar based on the height of its content*/
        background: #ccc;
      }
      

      HTML:

      <nav class="navbar navbar-default navbar-fixed-top navbar-offset">
          <ul class="nav navbar-nav">
              <li class="active"><a href="#">Home</a></li>
              <li><a href="#">Link</a></li>
              <li><a href="#">Link</a></li>
              <li class="divider-vertical"></li>
              <li><a href="#">More</a></li>
              <li><a href="#">Options</a></li>
          </ul>
      </nav>
      
      <div class="container-fluid scrollable">
          <p>BEGIN</p>
          <p>Hi World</p>
      
          ...
      
          <p>END</p>
      </div>
      
      
      <nav class="navbar navbar-inverse navbar-fixed-bottom">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#"><span class="glyphicon glyphicon-home"></span></a></li>
              <li><a href="#"><span class="glyphicon glyphicon-user"></span></a></li>
              <li><a href="#"><span class="glyphicon glyphicon-calendar"></span></a></li>
              <li><a href="#"><span class="glyphicon glyphicon-comment"></span></a></li>
              <li><a href="#"><span class="glyphicon glyphicon-star"></span></a></li>
          </ul>
      </nav>
      

      【讨论】:

      • 如果您可以查看我的更新 2,我将不胜感激,因为调整您的解决方案和此线程中的其他参与者我几乎达到了我的目标,但我仍然在调整浏览器大小时遇到​​一些问题。
      • 更新了 Bootply...我想这就是你想要的。
      【解决方案3】:

      您可以通过将边距更新为填充来解决此问题.. 并像下面一样更新 div..

      HTML

      <div id="content">....</div>
      

      CSS

      #content{
        position:absolute;
        top:100px;
      }
      

      Demo

      【讨论】:

        【解决方案4】:

        你应该用一个固定的 div 替换滚动的 div:

        http://www.bootply.com/3UpMI5yTIA

        .scroll-pre {
          height: 100px;
          width: 100%;
          background-color: inherit;
          position: fixed;
        }
        

        还有html:

        <nav class="navbar navbar-default navbar-fixed-top my-own-style">
            <ul class="nav navbar-nav">
                <li class="active"><a href="#">Home</a></li>
                <li><a href="#">Link</a></li>
                <li><a href="#">Link</a></li>
                <li class="divider-vertical"></li>
                <li><a href="#">More</a></li>
                <li><a href="#">Options</a></li>
            </ul>
        </nav>
        <div class="scroll-pre"></div>
        <div class="scroll">
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
            <p>Hi World</p>
               Hi World
            <p>Hi World</p>
        </div>
        

        编辑

        http://www.bootply.com/CKD9nrQxG5

        如果您想在 div 上滚动(而不是在页面上),请将“scroll”类添加到您的滚动 div 并更新 css:

        body, html {
          overflow: hidden;
          height: 100%;
        }
        
        .scroll {
          margin-top: 100px; // Same as .scroll-pre height
          overflow: auto;
          height: 100%;
        }
        

        编辑 2(页脚)

        http://www.bootply.com/JwmaWgvWPI

        如果你想要页脚,策略是一样的,在bottom:0中放置一个固定的div。同样,它仅在您为预滚动和页脚 div 放置背景时才有效。

        我已经调整了卷轴的 paddigns 以让最后一个项目可见。

        .scroll {
          margin-top: 100px;
          overflow: auto;
          height: 100%;
          padding-bottom:130px;
          margin-bottom: 30px;
        }
        
        .footer {
          position:fixed;
          bottom:0;
          height:30px;
          background:inherit;
          width:100%;
        }
        

        【讨论】:

        • 问题是我刚刚注意到身体必须有一些东西来隐藏卷轴,并且已经完成了溢出:隐藏;规则,因此我们无法滚动浏览网站(我只想滚动“Hi world”内容,而不是整个页面。
        • 我已经更新了设置 div 滚动(不是页面)的答案
        • 它非常接近实现我想要的,唯一的是它没有到​​达最后一个元素滚动,而且如果我想减少滚动条的长度,因为我有一个页脚或东西,它不会工作。对此有何建议?
        • 用页脚更新了答案。
        • 修复了我的答案以停止滚动问题,这是原始 CSS 的问题,而不是我的答案。
        【解决方案5】:

        您可以尝试以下代码:

        HTML 代码:

        <nav class="navbar navbar-default">
        .......
        </nav>
        

        CSS 代码:

        .navbar{
        border-radius: 0;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-11
          相关资源
          最近更新 更多