網頁開發中非常重要的 RWD(Responsive Web Design,響應式網頁設計)。要讓導覽列在手機上「變身」,我們需要用到 CSS 的 媒體查詢(Media Queries)。
這是一個初學者也能理解的「漢堡選單」實作方式。
1. 核心觀念:媒體查詢 (Media Queries)
媒體查詢就像是給瀏覽器的指令:「如果螢幕寬度小於 768px(通常是手機/平板),就執行這套特殊的 CSS」。
2. 實作步驟
第一步:HTML 增加「漢堡圖示」
我們需要在原本的導覽列中加入一個按鈕,但在電腦版時先把它隱藏起來。
HTML
<nav class="navbar">
<div class="logo">我的網站</div>
<div class="menu-toggle" id="mobile-menu">
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
</div>
<ul class="nav-links">
<li><a href="#">首頁</a></li>
<li><a href="#">產品</a></li>
<li><a href="#">關於</a></li>
</ul>
</nav>
第二步:CSS 響應式佈局
我們利用 position: absolute 讓選單在手機版時「浮」在畫面上。
CSS
/* --- 電腦版樣式 (延用之前的) --- */
/* ... 省略部分基礎樣式 ... */
.menu-toggle { display: none; cursor: pointer; } /* 電腦版隱藏按鈕 */
.bar {
display: block;
width: 25px;
height: 3px;
margin: 5px auto;
background-color: white;
}
/* --- 手機版樣式 (關鍵!) --- */
@media screen and (max-width: 768px) {
.nav-links {
display: none; /* 預設先隱藏選單 */
flex-direction: column; /* 改為垂直排列 */
width: 100%;
position: absolute;
top: 70px; /* 在導覽列下方 */
left: 0;
background-color: #2c3e50;
}
.nav-links.active {
display: flex; /* 當點擊按鈕時,加上 active 類別顯示選單 */
}
.menu-toggle {
display: block; /* 手機版顯示漢堡按鈕 */
}
}
第三步:JavaScript 點擊切換
HTML/CSS 只能做出樣子,要點了會「彈出來」,需要一點點簡單的 JavaScript。
JavaScript
const menu = document.querySelector('#mobile-menu');
const menuLinks = document.querySelector('.nav-links');
// 當點擊漢堡按鈕時,切換 'active' 類別
menu.addEventListener('click', function() {
menuLinks.classList.toggle('active');
});
3. 完整練習範例
將下方的代碼存成一個 HTML 檔案,然後試著縮小瀏覽器視窗,你會看到它自動從橫向導覽列變成漢堡選單!
HTML
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: sans-serif; }
.navbar {
background-color: #333;
height: 70px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 30px;
color: white;
}
.nav-links { list-style: none; display: flex; }
.nav-links li { margin-left: 20px; }
.nav-links a { color: white; text-decoration: none; }
.menu-toggle { display: none; flex-direction: column; cursor: pointer; }
.bar { width: 25px; height: 3px; background: white; margin: 4px 0; }
/* 手機版適配 */
@media (max-width: 768px) {
.menu-toggle { display: flex; }
.nav-links {
display: none;
flex-direction: column;
width: 100%;
position: absolute;
top: 70px;
left: 0;
background-color: #444;
text-align: center;
}
.nav-links.active { display: flex; }
.nav-links li { margin: 20px 0; }
}
</style>
</head>
<body>
<nav class="navbar">
<div class="logo">LOGO</div>
<div class="menu-toggle" id="mobile-menu">
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
</div>
<ul class="nav-links" id="nav-list">
<li><a href="#">首頁</a></li>
<li><a href="#">產品</a></li>
<li><a href="#">聯絡</a></li>
</ul>
</nav>
<script>
const menu = document.getElementById('mobile-menu');
const navList = document.getElementById('nav-list');
menu.onclick = () => navList.classList.toggle('active');
</script>
</body>
</html>
學到這裡,你已經跨入了「網頁設計師」的門檻!
你已經學會了:
HTML 結構(骨架)
CSS 樣式與顏色(皮膚)
CSS 表格與導覽列(組件)
CSS 動畫與 RWD(靈魂)
沒有留言:
張貼留言