CSS 導航列 (Navigation Bar)
導航列是網站最重要的元素之一,本篇介紹如何製作水平導航列。
基本水平導航
Flexbox 實現
.navbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 24px;
background: white;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.nav-logo {
font-size: 20px;
font-weight: bold;
text-decoration: none;
color: #333;
}
.nav-links {
display: flex;
gap: 32px;
list-style: none;
margin: 0;
padding: 0;
}
.nav-links a {
text-decoration: none;
color: #666;
transition: color 0.2s;
}
.nav-links a:hover {
color: #007bff;
}
<nav class="navbar">
<a href="/" class="nav-logo">Logo</a>
<ul class="nav-links">
<li><a href="#">首頁</a></li>
<li><a href="#">關於</a></li>
<li><a href="#">服務</a></li>
<li><a href="#">聯絡</a></li>
</ul>
</nav>
置中導航
Logo 在左,連結置中,按鈕在右
.navbar {
display: flex;
align-items: center;
padding: 16px 24px;
}
.nav-logo {
flex: 1;
}
.nav-links {
display: flex;
gap: 32px;
list-style: none;
margin: 0;
padding: 0;
}
.nav-actions {
flex: 1;
display: flex;
justify-content: flex-end;
gap: 12px;
}
導航連結樣式
底線效果
.nav-links a {
position: relative;
text-decoration: none;
color: #333;
padding: 8px 0;
}
.nav-links a::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 2px;
background: #007bff;
transition: width 0.3s;
}
.nav-links a:hover::after,
.nav-links a.active::after {
width: 100%;
}
背景效果
.nav-links a {
text-decoration: none;
color: #333;
padding: 8px 16px;
border-radius: 4px;
transition: background-color 0.2s;
}
.nav-links a:hover,
.nav-links a.active {
background-color: #f0f0f0;
}
膠囊按鈕
.nav-links a {
text-decoration: none;
color: #666;
padding: 8px 20px;
border-radius: 20px;
transition: all 0.2s;
}
.nav-links a:hover {
background: #007bff;
color: white;
}
響應式導航
漢堡選單
.navbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 24px;
position: relative;
}
/* 漢堡按鈕 */
.nav-toggle {
display: none;
flex-direction: column;
gap: 5px;
background: none;
border: none;
cursor: pointer;
padding: 4px;
}
.nav-toggle span {
display: block;
width: 24px;
height: 2px;
background: #333;
transition: transform 0.3s;
}
/* 導航連結 */
.nav-links {
display: flex;
gap: 32px;
list-style: none;
margin: 0;
padding: 0;
}
/* 行動版 */
@media (max-width: 768px) {
.nav-toggle {
display: flex;
}
.nav-links {
position: absolute;
top: 100%;
left: 0;
right: 0;
flex-direction: column;
gap: 0;
background: white;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
display: none;
}
.nav-links.active {
display: flex;
}
.nav-links li {
border-bottom: 1px solid #eee;
}
.nav-links a {
display: block;
padding: 16px 24px;
}
}
<nav class="navbar">
<a href="/" class="nav-logo">Logo</a>
<button class="nav-toggle">
<span></span>
<span></span>
<span></span>
</button>
<ul class="nav-links">
<li><a href="#">首頁</a></li>
<li><a href="#">關於</a></li>
<li><a href="#">服務</a></li>
<li><a href="#">聯絡</a></li>
</ul>
</nav>
// 切換選單
document.querySelector('.nav-toggle').addEventListener('click', function() {
document.querySelector('.nav-links').classList.toggle('active');
});
下拉選單
.dropdown {
position: relative;
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
min-width: 200px;
background: white;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
opacity: 0;
visibility: hidden;
transform: translateY(10px);
transition: all 0.2s;
list-style: none;
margin: 0;
padding: 8px 0;
}
.dropdown:hover .dropdown-menu {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.dropdown-menu a {
display: block;
padding: 10px 20px;
color: #333;
text-decoration: none;
}
.dropdown-menu a:hover {
background: #f5f5f5;
}
完整範例
.navbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24px;
height: 64px;
background: white;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.nav-logo {
font-size: 22px;
font-weight: bold;
color: #007bff;
text-decoration: none;
}
.nav-links {
display: flex;
gap: 8px;
list-style: none;
margin: 0;
padding: 0;
}
.nav-links a {
display: block;
padding: 10px 16px;
color: #333;
text-decoration: none;
border-radius: 6px;
font-weight: 500;
transition: background-color 0.2s;
}
.nav-links a:hover {
background: #f0f7ff;
color: #007bff;
}
.nav-links a.active {
background: #007bff;
color: white;
}
.nav-actions {
display: flex;
gap: 12px;
}
.btn-login {
padding: 8px 16px;
color: #007bff;
background: transparent;
border: 1px solid #007bff;
border-radius: 6px;
cursor: pointer;
}
.btn-signup {
padding: 8px 16px;
color: white;
background: #007bff;
border: none;
border-radius: 6px;
cursor: pointer;
}