jquery - Bootstrap 4 - 透明粘性导航栏

标签 jquery html css twitter-bootstrap bootstrap-4

我目前正在开发一个带有粘性导航的页面,但我的主要问题是我使用了多个以图像作为背景的部分,而且导航当然是透明的。真正重要的是 Logo 在导航上方,所以我真的必须使用 display: sticky;(或 .sticky-top)。如何让它在每个部分都可见?

html,
body {
  width: 100% !important;
}

body {
  background: grey !important;
}


/*Header*/

.logo {
  display: inline-block;
  padding: 1rem 0 .5rem 0 !important;
}


/* NavBar */

nav {
  font-size: 13pt;
  font-family: 'Cinzel', sans-serif;
  padding: .3rem 0 .3rem 0 !important;
  text-transform: capitalize;
}

.nav-link {
  color: #fff !important;
  margin: 0 25% 0 25%;
}

.nav-link:hover {
  font-style: underline;
}

section {
  height: 100vh;
  min-height: 900px;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

.Text {
  margin-top: 20%;
}
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <link rel="stylesheet" href="stylesheet/stylesheet.css">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">
  <script defer src="https://use.fontawesome.com/releases/v5.0.4/js/all.js"></script>
  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
</head>

<body>
  <main class="container-fluid p-0">
    <section class="pr-5 pl-5" style="background-image: url('https://picsum.photos/1920/1080/?random');">
      <header>
        <img class="logo d-block img-fluid mx-auto" width="200px" src="http://brandmark.io/logo-rank/random/pepsi.png" alt="Logo" />
      </header>
      <nav class="navbar navbar-expand-lg sticky-top">
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#Toogle" aria-controls="Toogle" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"><i class="fa fa-bars mx-auto" aria-hidden="true"></i></span>
                        </button>
        <div class="collapse navbar-collapse" id="Toogle">
          <ul class="navbar-nav mt-2 mt-lg-0 mx-auto">
            <li class="nav-item">
              <a class="nav-link" href="#">Home</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">Repliky</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">Unikáty</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">Instalace</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">Kontakt</a>
            </li>
          </ul>
        </div>
      </nav>
      <div class="row Text no-gutters ">
        <div class="col-xs-12 col-md-4 offset-md-1">
          <h2>I need this block of text to be responsive</h2>
          <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Libero ex inventore vel error quibusdam animi fugiat, doloribus dolores consectetur nulla deleniti sint blanditiis quod debitis quis vitae officiis tempora numquam.</p>
          <a href="#" class="button white">Watch video</a>
        </div>
      </div>
    </section>
    <section class="test" style="background-image: url('https://picsum.photos/1920/1080/?random');">
      <p>nofun</p>
    </section>
    <section class="test" style="background-image: url('https://picsum.photos/1920/1080/?random');">
      <p>nofun</p>
    </section>
  </main>
</body>

</html>

最佳答案

解决方法:

取出导航栏和 Logo 并将它们放在所有部分的上方。 Logo 和导航栏一起高 256 像素。

所以,应用 margin-top: -256px; padding-top: 256px; 到第一部分,你就完成了!

margin-top: -256px; 将第一部分向上移动 256px 并且 padding-top: 256px; 为其提供 265px 顶部填充。这让整个事情看起来和以前一样,但现在你的导航栏和标志标题是独立于这些部分的。这就是它起作用的原因。

这是完整的工作代码片段(点击下面的“运行代码片段”并展开到整页):

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

<main class="container-fluid p-0">
    <header>
        <img class="logo d-block img-fluid mx-auto" width="200px" src="http://brandmark.io/logo-rank/random/pepsi.png" alt="Logo" />
    </header>
    <nav class="navbar navbar-expand-lg sticky-top">
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#Toogle" aria-controls="Toogle" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"><i class="fa fa-bars mx-auto" aria-hidden="true"></i></span>
        </button>
        <div class="collapse navbar-collapse" id="Toogle">
            <ul class="navbar-nav mt-2 mt-lg-0 mx-auto">
                <li class="nav-item">
                    <a class="nav-link" href="#">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Repliky</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Unikáty</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Instalace</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Kontakt</a>
                </li>
            </ul>
        </div>
    </nav>

    <section class="pr-5 pl-5" style="background-image: url('https://picsum.photos/1920/1080/?random'); margin-top: -256px; padding-top: 256px;">
        <div class="row Text no-gutters">
            <div class="col-xs-12 col-md-4 offset-md-1">
                <h2>I need this block of text to be responsive</h2>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Libero ex inventore vel error quibusdam animi fugiat, doloribus dolores consectetur nulla deleniti sint blanditiis quod debitis quis vitae officiis tempora numquam.</p>
                <a href="#" class="button white">Watch video</a>
            </div>
        </div>
    </section>
    <section class="test" style="background-image: url('https://picsum.photos/1920/1080/?random'); height: 999px;">
        <p>section 2</p>
    </section>
    <section class="test" style="background-image: url('https://picsum.photos/1920/1080/?random'); height: 999px;">
        <p>section 3</p>
    </section>
</main>

关于jquery - Bootstrap 4 - 透明粘性导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48600366/

相关文章:

javascript - “循环”JavaScript 函数

html - 仅使用 auto 或 % 在中间对齐 div 内容

jquery - 如何为检查 json 数据的 div 设置不同的类

javascript - 将数据元素添加到元素

Jquery背景位置动画问题

html - 我的布局的空白部分是什么?

javascript - 禁用 Kendo 编辑器或将其设置为只读

javascript - 将鼠标悬停在图像上时在 div/文本中叠加/淡入淡出

html - Bootstrap 调整列

javascript - 在 jquery 中通过 .post() 传递参数是否有限制