文章

響應式導航欄設計

響應式導航欄設計

響應式導航欄是現代網站設計中不可或缺的一部分,能夠根據不同設備的螢幕尺寸自動調整布局,為用戶提供良好的體驗。常見的響應式導航欄設計包括桌面端的橫向導航以及移動端的下拉或漢堡菜單。

1. 基本 HTML 結構

在設計響應式導航欄之前,首先需要設置一個基本的 HTML 結構,通常包含一個容器元素(如 navheader),以及一組導航連結。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<nav class="navbar">
  <div class="navbar-brand">
    <a href="#" class="brand-logo">MyWebsite</a>
    <button class="navbar-toggle" id="navbar-toggle"></button>
  </div>
  <ul class="navbar-menu" id="navbar-menu">
    <li><a href="#home">首頁</a></li>
    <li><a href="#about">關於我們</a></li>
    <li><a href="#services">服務</a></li>
    <li><a href="#contact">聯絡我們</a></li>
  </ul>
</nav>

2. 基本 CSS 樣式

接下來,使用 CSS 為導航欄設置基本樣式。首先設置桌面端的樣式,讓導航欄呈現為橫向布局。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/* 基本重置 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

/* 導航欄容器樣式 */
.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: #333;
  padding: 10px 20px;
}

/* 品牌標誌樣式 */
.navbar-brand {
  display: flex;
  align-items: center;
}

.brand-logo {
  color: #fff;
  text-decoration: none;
  font-size: 24px;
  margin-right: 20px;
}

/* 菜單樣式 */
.navbar-menu {
  display: flex;
  list-style: none;
}

/* 菜單項目樣式 */
.navbar-menu li {
  margin-left: 20px;
}

.navbar-menu a {
  color: #fff;
  text-decoration: none;
  padding: 8px 12px;
  transition: background-color 0.3s;
}

.navbar-menu a:hover {
  background-color: #575757;
  border-radius: 4px;
}

/* 漢堡按鈕樣式 */
.navbar-toggle {
  display: none; /* 默認隱藏 */
  background-color: #333;
  color: #fff;
  border: none;
  font-size: 24px;
  cursor: pointer;
}

3. 響應式樣式

通過使用媒體查詢,設置響應式樣式,使導航欄在小螢幕(如移動設備)上呈現下拉或漢堡菜單樣式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* 響應式設計:小於768px寬度時 */
@media (max-width: 768px) {
  .navbar-menu {
    display: none; /* 默認隱藏 */
    flex-direction: column; /* 縱向排列 */
    width: 100%;
    position: absolute;
    top: 60px; /* 根據導航欄的高度調整 */
    left: 0;
    background-color: #333;
    padding: 10px 0;
  }

  .navbar-menu li {
    margin: 0;
  }

  .navbar-menu a {
    padding: 10px 20px;
    display: block;
    width: 100%;
  }

  /* 顯示漢堡按鈕 */
  .navbar-toggle {
    display: block;
  }
}

4. JavaScript 控制導航欄顯示

在移動端,導航欄需要能夠顯示和隱藏。這可以通過簡單的 JavaScript 來實現。

1
2
3
4
5
6
<script>
  document.getElementById('navbar-toggle').addEventListener('click', function () {
    const menu = document.getElementById('navbar-menu');
    menu.style.display = menu.style.display === 'flex' ? 'none' : 'flex';
  });
</script>

5. 完整代碼

以下是完整的代碼結構,包括 HTML、CSS 和 JavaScript。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>響應式導航欄範例</title>
  <style>
    /* 基本重置 */
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    /* 導航欄容器樣式 */
    .navbar {
      display: flex;
      justify-content: space-between;
      align-items: center;
      background-color: #333;
      padding: 10px 20px;
    }

    /* 品牌標誌樣式 */
    .navbar-brand {
      display: flex;
      align-items: center;
    }

    .brand-logo {
      color: #fff;
      text-decoration: none;
      font-size: 24px;
      margin-right: 20px;
    }

    /* 菜單樣式 */
    .navbar-menu {
      display: flex;
      list-style: none;
    }

    /* 菜單項目樣式 */
    .navbar-menu li {
      margin-left: 20px;
    }

    .navbar-menu a {
      color: #fff;
      text-decoration: none;
      padding: 8px 12px;
      transition: background-color 0.3s;
    }

    .navbar-menu a:hover {
      background-color: #575757;
      border-radius: 4px;
    }

    /* 漢堡按鈕樣式 */
    .navbar-toggle {
      display: none;
      background-color: #333;
      color: #fff;
      border: none;
      font-size: 24px;
      cursor: pointer;
    }

    /* 響應式設計:小於768px寬度時 */
    @media (max-width: 768px) {
      .navbar-menu {
        display: none; /* 默認隱藏 */
        flex-direction: column; /* 縱向排列 */
        width: 100%;
        position: absolute;
        top: 60px; /* 根據導航欄的高度調整 */
        left: 0;
        background-color: #333;
        padding: 10px 0;
      }

      .navbar-menu li {
        margin: 0;
      }

      .navbar-menu a {
        padding: 10px 20px;
        display: block;
        width: 100%;
      }

      /* 顯示漢堡按鈕 */
      .navbar-toggle {
        display: block;
      }
    }
  </style>
</head>
<body>
  <nav class="navbar">
    <div class="navbar-brand">
      <a href="#" class="brand-logo">MyWebsite</a>
      <button class="navbar-toggle" id="navbar-toggle"></button>
    </div>
    <ul class="navbar-menu" id="navbar-menu">
      <li><a href="#home">首頁</a></li>
      <li><a href="#about">關於我們</a></li>
      <li><a href="#services">服務</a></li>
      <li><a href="#contact">聯絡我們</a></li>
    </ul>
  </nav>

  <script>
    document.getElementById('navbar-toggle').addEventListener('click', function () {
      const menu = document.getElementById('navbar-menu');
      menu.style.display = menu.style.display === 'flex' ? 'none' : 'flex';
    });
  </script>
</body>
</html>

6. 小結

響應式導航欄的設計需要考慮不同設備和屏幕尺寸的用戶體驗。使用 CSS 和 JavaScript 可以輕鬆地實現自適應的導航欄樣式,確保在各種設備上都能有良好的使用體驗。上述範例提供了基本的實現方法,可以根據需要進一步擴展和定制。

本文章以 CC BY 4.0 授權