粘性/移动导航栏

时间:2021-03-22 12:05:23

标签: javascript html css

我一直在使用 this link 创建导航栏。我想要实现的目标有点不同,我正在努力让它发挥作用。

我正在尝试创建一个固定在页面底部的导航栏,在滚动内容时,它逐渐上升,到达顶部后固定在那里,当您继续滚动时,它保持固定顶部。

创建此类导航的最佳解决方案是什么?

感谢您的帮助。

window.onscroll = function() {myFunction()};



var navbar = document.getElementById("navbar");
var sticky = navbar.offsetTop;



function myFunction() {
  if (window.pageYOffset >= sticky) {
    navbar.classList.add("sticky")
  } else {
    navbar.classList.remove("sticky");
  }
}
html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}
body{line-height:1;font-family:arial}
h1{font-size:25px}
h2{font-size:21px}
h3{font-size:18px}
h4{font-size:16px}
article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}
nav ul{list-style:none}
blockquote,q{quotes:none}
blockquote:before,blockquote:after,q:before,q:after{content:none}
a{margin:0;padding:0;font-size:100%;vertical-align:baseline;background:transparent}
ins{background-color:#ff9;color:#000;text-decoration:none}
mark{background-color:#ff9;color:#000;font-style:italic;font-weight:bold}
del{text-decoration:line-through}
abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}
table{border-collapse:collapse;border-spacing:0}
hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}
input,select{vertical-align:middle}
body,html{background-color:#FFF}
nav{display:inline-block}
nav ul li a{background:#fff;padding:2px 6px;font-size:14px;text-decoration:none;font-weight:bold;color:#344;border-radius:5px}
nav ul li a:hover{color:#000}
nav ul li{display:inline-block;margin:10px}
nav ul{list-style:none}
article{border-bottom:2px dotted #998;padding-bottom:20px;margin-bottom:20px}
article h2{font-weight:normal;margin-bottom:12px}
footer{background:#344;max-width:1000px;margin:0 -20px;clear:both;text-align:right}
footer p{padding:20px;color:#FFF}
address{padding:10px 20px 30px 10px}
aside > div{margin:10px auto;background:#344;min-height:150px;padding:30px 10px;text-align:center;color:#FFF}
a#logo{font-size:40px;color:#344;font-weight:bold;display:block;text-decoration:none;text-align:center;line-height:40px;padding:60px 5px}
body > section{max-width:1000px;margin:auto;padding:30px 0px;border-bottom:1px solid #999;color:#333}
#navbar {position: fixed;bottom: 0;width: 100%;overflow: hidden;background-color: rgb(255, 255, 255);}
#navbar a {float: left;display: block;color: #000;text-align: center;padding: 14px 16px;text-decoration: none;font-size: 17px;background-color: #FFF;z-index: 1;}
#navbar a:hover {background-color: #ddd;color: black;}
#navbar a.active {background-color: #A9A9A9;color: white;}
.content {padding: 16px;}
.sticky {position: fixed;top: 0;width: 100%;}
.sticky + .content { padding-bottom: 60px;}
footer a{color:#FFF}
#main{margin-left:320px}
#wrapall{padding-top:60px}

#page{padding:20px}
#menuToggle,#mobileMenuToggle{background:#FFF;cursor:pointer;display:inline-block;font-size:40px;width:40px;font-weight:bold;text-align:center;height:40px;line-height:40px;color:#344;border-radius:10px}
#mobileMenuToggle,#mobileLogo{vertical-align:middle;display:none;font-size:30px}
#menuToggle:hover{color:#FFF;background:#344}



@media screen and (max-width:1100px){header{padding:10px}
#headerLeft{width:auto}
#headerRight{width:60%}}
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
</head>
<body>
    
<header>
    <div id="header">
        <div id="navbar" >
            <a href="index.html">Home</a>
            <a href="about.html">About</a>
    
            
          </div>
    </div>
</header>

    <div id="main">
        <section id="page">
            <main>
                

                <article>
                    <h2>Illud mollis moderatius</h2>
                    <p>Eum facete intellegat ei, ut mazim melius usu. Has elit simul primis ne, regione minimum id cum. Sea deleniti dissentiet ea. Illud mollis moderatius ut per, at qui ubique populo. Eum ad cibo legimus, vim ei quidam fastidii.</p>
                </article>
                <article>
                    <h2>Ex ignota epicurei quo</h2>
                    <p>Quo debet vivendo ex. Qui ut admodum senserit partiendo. Id adipiscing disputando eam, sea id magna pertinax concludaturque. Ex ignota epicurei quo, his ex doctus delenit fabellas, erat timeam cotidieque sit in. Vel eu soleat voluptatibus, cum cu exerci mediocritatem. Malis legere at per, has brute putant animal et, in consul utamur usu.</p>
                </article>
                <article>
                    <h2>His at autem inani volutpat</h2>
                    <p>Te has amet modo perfecto, te eum mucius conclusionemque, mel te erat deterruisset. Duo ceteros phaedrum id, ornatus postulant in sea. His at autem inani volutpat. Tollit possit in pri, platonem persecuti ad vix, vel nisl albucius gloriatur no.</p>
                </article>
                <article>
                    <h2>Stet facilis ius te</h2>
                    <p>Lorem ipsum dolor sit amet, nonumes voluptatum mel ea, cu case ceteros cum. Novum commodo malorum vix ut. Dolores consequuntur in ius, sale electram dissentiunt quo te. Cu duo omnes invidunt, eos eu mucius fabellas. Stet facilis ius te, quando voluptatibus eos in. Ad vix mundi alterum, integre urbanitas intellegam vix in.</p>
                </article>
                <article>
                    <h2>Illud mollis moderatius</h2>
                    <p>Eum facete intellegat ei, ut mazim melius usu. Has elit simul primis ne, regione minimum id cum. Sea deleniti dissentiet ea. Illud mollis moderatius ut per, at qui ubique populo. Eum ad cibo legimus, vim ei quidam fastidii.</p>
                </article>
                <article>
                    <h2>Illud mollis moderatius</h2>
                    <p>Eum facete intellegat ei, ut mazim melius usu. Has elit simul primis ne, regione minimum id cum. Sea deleniti dissentiet ea. Illud mollis moderatius ut per, at qui ubique populo. Eum ad cibo legimus, vim ei quidam fastidii.</p>
                </article>
                <article>
                    <h2>Ex ignota epicurei quo</h2>
                    <p>Quo debet vivendo ex. Qui ut admodum senserit partiendo. Id adipiscing disputando eam, sea id magna pertinax concludaturque. Ex ignota epicurei quo, his ex doctus delenit fabellas, erat timeam cotidieque sit in. Vel eu soleat voluptatibus, cum cu exerci mediocritatem. Malis legere at per, has brute putant animal et, in consul utamur usu.</p>
                </article>
                <article>
                    <h2>Illud mollis moderatius</h2>
                    <p>Eum facete intellegat ei, ut mazim melius usu. Has elit simul primis ne, regione minimum id cum. Sea deleniti dissentiet ea. Illud mollis moderatius ut per, at qui ubique populo. Eum ad cibo legimus, vim ei quidam fastidii.</p>
                </article>
                <article>
                    <h2>His at autem inani volutpat</h2>
                    <p>Te has amet modo perfecto, te eum mucius conclusionemque, mel te erat deterruisset. Duo ceteros phaedrum id, ornatus postulant in sea. His at autem inani volutpat. Tollit possit in pri, platonem persecuti ad vix, vel nisl albucius gloriatur no.</p>
                </article>
                <article>
                    <h2>Stet facilis ius te</h2>
                    <p>Lorem ipsum dolor sit amet, nonumes voluptatum mel ea, cu case ceteros cum. Novum commodo malorum vix ut. Dolores consequuntur in ius, sale electram dissentiunt quo te. Cu duo omnes invidunt, eos eu mucius fabellas. Stet facilis ius te, quando voluptatibus eos in. Ad vix mundi alterum, integre urbanitas intellegam vix in.</p>
                </article>
                <article>
                    <h2>Illud mollis moderatius</h2>
                    <p>Eum facete intellegat ei, ut mazim melius usu. Has elit simul primis ne, regione minimum id cum. Sea deleniti dissentiet ea. Illud mollis moderatius ut per, at qui ubique populo. Eum ad cibo legimus, vim ei quidam fastidii.</p>
                </article>
                <article>
                    <h2>Ex ignota epicurei quo</h2>
                    <p>Quo debet vivendo ex. Qui ut admodum senserit partiendo. Id adipiscing disputando eam, sea id magna pertinax concludaturque. Ex ignota epicurei quo, his ex doctus delenit fabellas, erat timeam cotidieque sit in. Vel eu soleat voluptatibus, cum cu exerci mediocritatem. Malis legere at per, has brute putant animal et, in consul utamur usu.</p>
                </article>
                <article>
                    <h2>His at autem inani volutpat</h2>
                    <p>Te has amet modo perfecto, te eum mucius conclusionemque, mel te erat deterruisset. Duo ceteros phaedrum id, ornatus postulant in sea. His at autem inani volutpat. Tollit possit in pri, platonem persecuti ad vix, vel nisl albucius gloriatur no.</p>
                </article>
                <article>
                    <h2>Stet facilis ius te</h2>
                    <p>Lorem ipsum dolor sit amet, nonumes voluptatum mel ea, cu case ceteros cum. Novum commodo malorum vix ut. Dolores consequuntur in ius, sale electram dissentiunt quo te. Cu duo omnes invidunt, eos eu mucius fabellas. Stet facilis ius te, quando voluptatibus eos in. Ad vix mundi alterum, integre urbanitas intellegam vix in.</p>
                </article>
                <article>
                    <h2>Illud mollis moderatius</h2>
                    <p>Eum facete intellegat ei, ut mazim melius usu. Has elit simul primis ne, regione minimum id cum. Sea deleniti dissentiet ea. Illud mollis moderatius ut per, at qui ubique populo. Eum ad cibo legimus, vim ei quidam fastidii.</p>
                </article>
                <article>
                    <h2>Ex ignota epicurei quo</h2>
                    <p>Quo debet vivendo ex. Qui ut admodum senserit partiendo. Id adipiscing disputando eam, sea id magna pertinax concludaturque. Ex ignota epicurei quo, his ex doctus delenit fabellas, erat timeam cotidieque sit in. Vel eu soleat voluptatibus, cum cu exerci mediocritatem. Malis legere at per, has brute putant animal et, in consul utamur usu.</p>
                </article>
                <article>
                    <h2>His at autem inani volutpat</h2>
                    <p>Te has amet modo perfecto, te eum mucius conclusionemque, mel te erat deterruisset. Duo ceteros phaedrum id, ornatus postulant in sea. His at autem inani volutpat. Tollit possit in pri, platonem persecuti ad vix, vel nisl albucius gloriatur no.</p>
                </article>

            

            </main>         
            <footer>
                
        </footer>
        </section>
    </div>
</div>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

只需在标题类中添加 .header 然后 #navbar 将采用全屏高度,而 height:calc(100vh - 100px); 将在底部...... 或者使用 window.onscroll = function() {myFunction()}; var navbar = document.getElementById("navbar"); var sticky = navbar.offsetTop; function myFunction() { if (window.pageYOffset >= sticky) { navbar.classList.add("sticky") } else { navbar.classList.remove("sticky"); } } 使标题占据几乎所有高度,将 100px 留给导航栏以在其中呈现

body {
  margin: 0;
  font-size: 28px;
  font-family: Arial, Helvetica, sans-serif;
}

.header {
  background-color: #f1f1f1;
  padding: 30px;
  text-align: center;
  height:100vh;
}

#navbar {
  overflow: hidden;
  background-color: #333;
}

#navbar a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
}

#navbar a:hover {
  background-color: #ddd;
  color: black;
}

#navbar a.active {
  background-color: #4CAF50;
  color: white;
}

.content {
  padding: 16px;
}

.sticky {
  position: fixed;
  top: 0;
  width: 100%;
}

.sticky + .content {
  padding-top: 60px;
}
<div class="header">
  <h2>Scroll Down</h2>
  <p>Scroll down to see the sticky effect.</p>
</div>

<div id="navbar">
  <a class="active" href="javascript:void(0)">Home</a>
  <a href="javascript:void(0)">News</a>
  <a href="javascript:void(0)">Contact</a>
</div>

<div class="content">
  <h3>Sticky Navigation Example</h3>
  <p>The navbar will stick to the top when you reach its scroll position.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
</div>
for (int i = 0; i <= 9; i++)
{
    if (temp > array[i])
    {
        temp = array[i];
        first = i + 1;
    }
}

答案 1 :(得分:0)

您可能不需要任何 javascript 来实现这一点,因为您在 css 中有 position:sticky。

以下是一个同时固定在底部和顶部的导航示例:

<div class="container">
  <nav>My nav</nav>
  <div class="contents">
    Contents<br>
    Contents<br>
    Contents<br>
    Contents<br>
    Contents<br>
    Contents
  </div>
</div>

CSS:

body {
  --nav-height: 20px;
  margin: 0;
  font-family: sans-serif;
}

.container {
  overflow-y: scroll;
  border: 1px solid green;
  height: 100vh;
}
.contents {
  position: relative; /* remove to make contents go below navbar */
  top: -100vh; /* remove to make contents go below navbar */
  border: 1px solid orangered;
  height: 200vh; /* only to make contents block scrollable */
  line-height: 100px; /* only to make contents block scrollable */
  color: black;
}
nav {
  position:sticky; /* here is were the magic happens */
  top: 0;
  z-index: 1;
  background: red;
  color: white;
  width: 100vw;
  height: var(--nav-height);
  margin-top: calc(100vh - var(--nav-height)); /* ...and here */
}

https://codepen.io/nicolashervy/pen/xxgKpOM

这是你追求的样子吗?