- 發布於
Day24: Sticky Nav
- Authors

- Name
- irisjustdoit
- @irisjustdoit
簡介: 如何使用 JavaScript 和 CSS 來實現固定導航欄效果。
作品頁面:https://iris1114.github.io/javascript30/24_Sticky-Nav/
HTML
- 包含一個
header元素,用於顯示標題。 - 包含一個
nav元素,內部有多個a連結。 - 包含一個
div容器,內部有多個段落。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<link rel="stylesheet" href="style-FINISHED.css" />
</head>
<body>
<header>
<h1>A story about getting lost.</h1>
</header>
<nav id="main">
<ul>
<li class="logo"><a href="#">LOST.</a></li>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Images</a></li>
<li><a href="#">Locations</a></li>
<li><a href="#">Maps</a></li>
</ul>
</nav>
<div class="site-wrap">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore
tempora rerum, est autem cupiditate, corporis a qui libero ipsum
delectus quidem dolor at nulla, adipisci veniam in reiciendis aut
asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in
aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut,
dignissimos.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore
tempora rerum, est autem cupiditate, corporis a qui libero ipsum
delectus quidem dolor at nulla, adipisci veniam in reiciendis aut
asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in
aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut,
dignissimos.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore
tempora rerum, est autem cupiditate, corporis a qui libero ipsum
delectus quidem dolor at nulla, adipisci veniam in reiciendis aut
asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in
aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut,
dignissimos.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore
tempora rerum, est autem cupiditate, corporis a qui libero ipsum
delectus quidem dolor at nulla, adipisci veniam in reiciendis aut
asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in
aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut,
dignissimos.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore
tempora rerum, est autem cupiditate, corporis a qui libero ipsum
delectus quidem dolor at nulla, adipisci veniam in reiciendis aut
asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in
aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut,
dignissimos.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore
tempora rerum, est autem cupiditate, corporis a qui libero ipsum
delectus quidem dolor at nulla, adipisci veniam in reiciendis aut
asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in
aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut,
dignissimos.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore
tempora rerum, est autem cupiditate, corporis a qui libero ipsum
delectus quidem dolor at nulla, adipisci veniam in reiciendis aut
asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in
aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut,
dignissimos.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore
tempora rerum, est autem cupiditate, corporis a qui libero ipsum
delectus quidem dolor at nulla, adipisci veniam in reiciendis aut
asperiores omnis blanditiis quod quas laborum nam! Fuga ad tempora in
aspernatur pariatur fugit quibusdam dolores sunt esse magni, ut,
dignissimos.
</p>
</div>
<script src="scripts.js"></script>
</body>
</html>
CSS
- 設定了基本的頁面樣式,包括字體、顏色和佈局。
- 設置了固定導航欄的樣式。
body {
font-family: 'Arial', sans-serif;
line-height: 1.6;
margin: 0;
padding: 0;
}
header {
background: #333;
color: #fff;
padding: 1rem;
text-align: center;
}
nav {
background: #f4f4f4;
padding: 1rem;
position: sticky;
top: 0;
z-index: 1000;
}
nav ul {
list-style: none;
display: flex;
justify-content: space-around;
margin: 0;
padding: 0;
}
nav ul li {
margin: 0;
}
nav ul li a {
color: #333;
text-decoration: none;
font-size: 1.2rem;
}
.site-wrap {
padding: 2rem;
}
JavaScript
- 使用 JavaScript 來實現固定導航欄效果。
const nav = document.querySelector('#main')
const topOfNav = nav.offsetTop
function fixNav() {
if (window.scrollY >= topOfNav) {
document.body.style.paddingTop = nav.offsetHeight + 'px'
document.body.classList.add('fixed-nav')
} else {
document.body.style.paddingTop = 0
document.body.classList.remove('fixed-nav')
}
}
window.addEventListener('scroll', fixNav)
Note
- 使用
position: sticky來實現固定導航欄效果。 - 使用
window.scrollY來獲取頁面滾動的距離。 - 使用
offsetTop來獲取導航欄距離頁面頂部的距離。
