- Published on
Day24: Sticky Nav
- Authors
- Name
- chick_playground
- @chick_playground
簡介: 如何使用 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
來獲取導航欄距離頁面頂部的距離。