
主題目標
利用 CSS 來讓製作網站的置頂選單
作品網址:
處理步驟
利用 CSS 的 position 固定後,再使用 transform 來強調凸顯內容,撰寫一部分 JS ,調整內容的位置。
步驟 1.
獲取導航欄相對於整個文檔的位置,將其記錄為切換點
// 設定選單
const nav = document.querySelector("#main");
// 取得選單 offsetTop距離頂部的長度PX
let topOfNav = nav.offsetTop;
//修正選單
function fixNav(){
}
//建立卷軸移動事件
window.addEventListener("scroll",fixNav);步驟 2.
建立固定標題列的 CSS
/* 固定標題 */
body.fixed-nav nav{
position: fixed;
box-shadow: 0 5px 0 rgba(0,0,0,0.1);
}在 fixNav 中,判斷卷軸移動位置,動態增加樣式
//修正選單
function fixNav(){
if(window.scrollY >= offsetTop){
//增加樣式 CLASS
document.body.classList.add('fixed-nav');
}else{
//移除樣式 CLASS
document.body.classList.remove('fixed-nav');
}
}步驟 3.
增加標題列的 logo 樣式,在置頂的時候顯示
/* 顯示標題 logo */
.fixed-nav li.logo {
max-width:500px;
}
/* 內容比例調整為原本文字大小 */
body.fixed-nav .site-wrap {
transform: scale(1);
}增加內文 padding ,主要避免內文因為凍結標題列而被遮蔽
//修正選單
function fixNav(){
if(window.scrollY >= topOfNav){
// 增加內文 padding 避免內文因為凍結標題列而被遮蔽
document.body.style.paddingTop = nav.offsetTop + 'px';
//增加樣式 CLASS
document.body.classList.add('fixed-nav');
}else{
//移除樣式 CLASS
document.body.classList.remove('fixed-nav');
// 移除內文 padding 避免內文因為凍結標題列而被遮蔽
document.body.style.paddingTop = 0;
}
}特別技術、函式
<HTML>
<CSS>
<JavaScript>
參考資料:
JS30紀錄 24-Sticky Nav:https://shunnien.github.io/2018/01/25/Javascript30days-24/
Js 30 day 中文指南:https://github.com/soyaine/JavaScript30
