iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0

https://i.imgur.com/Ch72Qqe.jpg

組件實作 : Demo

一、前言

Navbar 導覽列是每個網站幾乎都會有的組件之一,就是網頁最上面的那一條橫幅,Navbar 的實作上,我們專注在兩個重點:一個是 RWD 響應時,選單內容的排列順序呈現方式;另一個則是選單的下拉功能的實作。有了目標之後,接著我們就開始來實作吧【1】【2】~


二、直接實作 Navbar 組件

首先,我們在 HTML 中加入 Navbar 的主體,使用 a 標籤元素來當作選單內容,使用 a 標籤的原因是方便帶入超連結,當然你也可以使用 Button 標籤來代替。以下為 HTML 的主要架構:

HTML:

<div class="topnav">
	<a href="#" class="active">Home</a>
	<a href="#">News</a>
	<a href="#">Document</a>
	<a href="#">Contact</a>
	<div class="dropdown">
		<a href="#">About</a>
		<div class="dropdown__content">
			<a href="#">服務據點</a>
			<a href="#">服務客戶</a>
			<a href="#">服務地區</a>
			<a href="#">徵才資訊</a>
		</div>
	</div>
</div>

顯示結果:

https://i.imgur.com/69uR1Xt.png

我們要在一個 class 名為topnav的 div 內加入 a 元素,下拉選單則是使用 class 名為dropdown的 div,裡面放一個dropdown__content當成下拉選單的內容。

接著,我們在 topnav 裡面加入一個由 input 和 button 元素所組成的搜尋輸入框:

HTML:

<form action="傳送網址">
		<input type="text" placeholder="Search.." name="search" />
		<button type="submit"><i class="fa fa-search"></i></button>
</form>

顯示結果:

https://i.imgur.com/ZjQKYPt.png

input 標籤的 placeholder 指的是提示輸入文字,當點擊輸入框時,輸入文字就會消失。雖然我們的 input 輸入框能夠正常顯示,但是 button 並沒有正常顯示圖示,這時候只要在<head>裡面補上下面的 CDN 即可:

HTML:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

顯示結果:

https://i.imgur.com/6rMqbGE.png

我們加入一個搜尋框,它是由一個 input 元素外加上一個 button 元素所組成,最外圈則是用一個 form 表單將元素包起來,當搜尋按鈕被按下時,表單元素則會被送出,注意 button 標籤的 type 屬性值設定為submit ,這樣 input 輸入的值才能被正常的傳送。

架構有了之後,就是排版和外觀了,這部分依照各位的喜好去做調整,在開始美化之前,我習慣先把所有的元素都先排列好,再去調整外觀樣式、顏色,實作程式碼如下。

簡單起手式,去除多餘的 margin 和 padding。

CSS:

* {
	margin: 0;
	padding: 0;
}

顯示結果:

https://i.imgur.com/znBzZ49.png

去除乾淨後,再來就是調整外觀:

CSS:

.topnav {
	height: 64px;
	background-image: linear-gradient(135deg, #00569e, #995db5);
	font-family: sans-serif;
	align-items: center;
}

a {
	height: 100%;
	padding: 0 15px;
	color: #333;
	text-decoration: none;
	font-weight: 600;
	font-size: 20px;
	display: flex;
	align-items: center;
}

顯示結果:

https://i.imgur.com/0i13HqO.png

這裡的排版要以手機版面為優先,如果你先做的是符合桌機的版面,之後想要改成手機版,可能會出現一些排版上的麻煩,這裡需稍加留意。基本的樣式完成後,我們想要加入一些游標經過的效果程式碼如下。

CSS:

.topnav a:hover {
	background: #272727;
	color: whitesmoke;
}

顯示結果:

https://i.imgur.com/t9UNXWK.png

在開始的 Home 因為背景顏色關係,會讓文字不明顯,於是用 first-child 去選取第一個 a 標籤元素 。

CSS:

a:first-child {
	color: whitesmoke;
}

顯示結果:

https://i.imgur.com/nK9DKWP.png

顏色稍微舒服一些,Home 這個部分可以替換成 Logo。解決完主要選單,接著要處理次要選單的樣式修改,也就是下拉選單dropdown和它的內容dropdown__content

CSS:

.dropdown {
	height: 100%;
	display: block;
}

.dropdown a {
	color: black;
	align-items: center;
}

.dropdown__content {
	min-width: 160px;
	padding: 12px 16px;
	display: block;
	background-color: #e0e0e0;
}

顯示結果:

https://i.imgur.com/ikBmYPm.png

加完上面的程式碼後,排版有了明顯變化,但這時候發現搜尋框跑版了,會發生這種情況,就是當初我在設計這個 Navbar 時,沒有考慮到 mobile first【3】的後果,導致花了很多時間在處理版面,最後的搜尋框折衷解決方案如下。

CSS:

form {
	margin-top: 150px;
	display: block;
}

form input,
button {
	width: 100%;
	padding-left: 20px;
	border: none;
	font-size: 1.5rem;
	text-align: left;
	box-sizing: border-box;
	display: block;
}

顯示結果:

https://i.imgur.com/Hu7VJ8P.png


三、桌機版面設計

我們在上個章節完成了手機排版,接著要加入桌機的排版,這裡使用 Media queries 來撰寫 RWD,RWD 之後會另外寫一篇來探討,這邊直接使用@media (min-width: 767.98px),只要加入下列 CSS 即可完成桌機排版。

CSS:

@media (min-width: 767.98px) {
	.topnav {
		display: flex;
		align-items: center;
		position: relative;
	}

	a {
		color: whitesmoke;
	}

	form {
		display: flex;
		position: absolute;
		bottom: 12px;
		right: 10px;
	}

	form input,
	button {
		width: auto;
		padding: 5px;
		font-size: 1.5rem;
	}

	.topnav a:hover {
		background: rgba(255, 255, 255, 0.3);
		color: whitesmoke;
	}

	.dropdown__content {
		min-width: 160px;
		padding: 12px 16px;
		display: none;
	}

	.dropdown:hover .dropdown__content {
		border-radius: 0 0 5px 5px;
		background-image: linear-gradient(135deg, #00569e, #995db5);
		display: block;
	}
	.dropdown {
		height: 100%;
		position: relative;
	}

	.dropdown a {
		color: white;
		align-items: center;
		display: flex;
	}
}

顯示結果:

https://i.imgur.com/8dgYTVM.png


四、推薦資源

  1. 純CSS的下拉式選單
  2. Navbar · Bootstrap v5.0
  3. 102 CSS Menu
  4. materializecss
  5. Pens tagged 'navbar' on CodePen

五、結論

Navbar 的製作格的花費心力,若每次遇到一個專案都要重新從頭開始製作,會花費很多的時間,建議可以先刻一個屬於自己的萬用樣板,再隨專案去調整,或是可以直接使用 **N**avbar · Bootstrap v5.0 也是不錯的選擇,比較可惜是沒有做漢堡 icon 的側邊欄滑動效果,不過之後的組件學習應該會碰到,學完後再加回 Navbar 組件就好。


六、參考資料

  1. How TO - Search Bar
  2. How TO - Subnav
  3. 什麼是行動優先設計 (Mobile First Design)?- 響應式網頁設計(RWD) 並不是 Mobile First Design!

上一篇
Day 02:Button 組件實作
下一篇
Day 04:多媒體資源匯入
系列文
從零開始手刻網站,30 天打造我的前端武器庫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言