[筆記] 從零學習 Materialize 打造個人頁面

Mike Huang
Aug 8, 2019 · 16 min read

使用 Bootstrap 到接觸 Materialize

從接觸 Bootstrap 到現在至少半年的時間,大大小小的專案不時都會透過這個前端框架來完成網路應用程式的前端切版。的確很多開發者會使用 Bootstrap 就是因為能快速打造一個前端樣板,但這也可能導致一個現象 — 不少網站看起來都很相似。這現象沒有所謂的好壞,但在製作自己的作品時,總是期許自己能以「好的切版」為目標,而不是求快 — 有了這種想法後,在套用 Bootstrap 時,就更偏向是「借助」他的優勢,完成自己理想的切版,而非一塵不變地直接套用現成的版型和功能。

最近在逛 GitHub 時,不小心看到 Materialize 這個前端框架,發現在整體的設計風格、使用者體驗、功能等都蠻吸引我想去多了解一番的,因此決定來自學一下,順便借助這個框架來做個「個人頁面」好了 😃

由於功能太多,官方文件大部分也都撰寫的蠻清楚的,因此本篇就簡單介紹 Materiallize、說明設定到使用的流程、展示這次專案各部分的成果與紀錄使用上的重點!

Materialize & Material Design

Material Design 是 Google 在 2014 年所提出的設計語言,結合了成功的設計原則、創新和科技,志在藉由一個設計系統,讓所有用戶在使用 Google 所有的產品和平台時能有一致的用戶體驗 — Materialize 是一個前端 CSS 框架,它的開發基本上就是根據這套設計語言。因此在使用時,就會發現許多熟悉的面孔,例如:用過手機版的 Google Map App 或 Gmail App 的朋友應該就會覺得下圖的 FAB 按鈕特別熟悉啊!( App 右下角很常出現,也是個方便的按鈕設計)

Materialize 優點

的確說到最多開發者使用的 CSS 框架非 Bootstrap 莫屬,但從 GitHub 觀察Materialize 也是前三名熱門的 CSS 框架,使用起來的優點:

  1. 讓專案能實踐 Material Design 設計風格
  2. 響應式的網頁設計
  3. 搭配互動性的 CSS 元件和 JavaScript 創造出好的使用者體驗和設計 — 包含動畫和轉場效果
  4. 提供開發者很大的客製化空間
  5. 輕量型的框架:29kb

個人頁面

在簡單認識 Materialize 的背景後,開始來介紹和製作個人頁面。個人頁面包含以下幾個區塊:

  • 首頁 Home:上方和側方導覽列及封面照片輪播
  • 關於我 About Me:簡短自我介紹並附上學習歷程
  • 技能 Skills:展示目前在網頁開發所培養的技能
  • 近期專案 Recent Project:展示近期幾個實作專案與專案資訊
  • 了解更多 Discover More:提供外部連結到其他作品與文章
  • 聯繫 Contact:提供留言的表單(送出後將寄送至我的信箱)
  • 頁腳 Footer:我的相關連結與版權資訊
  • 置底連結按鈕 Floating Action Button:我的相關連結

設定到使用 Materialize

要在專案中設定並使用 Materialize 大致需要經過五個步驟

在 HTML 檔案中載入 Materialize

  1. 下載 Materialize CSS & Javascript 檔案 / 使用 CDN
  2. 載入 Materialize 字型和圖形樣式
  3. 載入 jQuery (Optional)

認識文件架構

Materialize 提供的樣式、元件、功能等非常多元,初次學習和使用可能需要花一些時間翻找和適應文件。以下大致簡述四個部分的內容並舉幾個功能:

CSS

  • 找尋有關 CSS 樣式:Color 顏色、Shadow 陰影、Grid 排版、Table 表格
  • 找尋有關 CSS 動畫:Pulse 按鈕心跳效果、Transition 元素縮放效果

Components

找尋實用的元件:Buttons 按鈕、Icons 圖形、Navbar 導覽列

JavaScript

找尋透過 JavaScript 產生互動性的元件或效果:Waves 按鈕波浪效果

Forms

尋找表單相關的元件、功能、效果、樣式

選定及使用元件

在文件中找到需要的元件、樣式、功能後,就是依照文件撰寫符合規格的 HTML 或 CSS。例如:要製作按鈕時,先參考完該元件的說明,再參照下方 language-markup 中的程式碼範例,製作出自己理想樣式的按鈕。

初始化及相關設定

  1. 初始化

在使用 Materialize 的許多效果和功能時,背後是需要借助 JavaScript 來達成的,因此需要根據官方文件的說明,透過 jQuery 或 JavaScript 進行初始化。

以下範例中是讓用戶在點擊圖片時,滑順的放大並置中該圖片(位置:JavaScript -> Media -> Material Box)要產生此效果,需要在專案中,根據下方 Initialization 區塊的程式碼初始化

📍 在程式碼中實際初始化 Material Box — 以 jQuery 為例

2. 元件設定

選定要使用的元件並初始化後,元件其實就已經可以正常呈現,基本的效果也都能順利運作。然而,Materiallize 在這方面還提供開發者客製化的選項 Options,讓元件的運用和效果的設定可以有更多的彈性。

延續上面 Material Box 的範例,我們可以發現在文件中該元件頁面下方的 Options 區塊,提供了不少選項(如下圖)。例如可以透過 inDurationoutDuration 更改照片縮放的轉場時間;透過 onOpenEnd 甚至可以設定在 Material Box 開啟完成後,要執行的函式,相當便利。

📍 將所有要客製化的設定放在 options 物件上帶入初始化的函式中

使用屬性

完成元件的設定和初始化後,元件上將帶有特定的屬性可以拿來運用,以下範例延續上面 Material Box ,並使用onOpenEnd選項,在 Material Box 開啟完成後,印出該元件讓我們來觀察它帶有的屬性有哪些:

許多的屬性其實在文件中該元件頁面的 Properties 區塊都能找得到(如下圖)。例如:originalWidth 能找到該圖片原始寬度;options 能找到初始化時設定了哪些選項。

製作個人頁面

以下將依照頁面上不同的區塊做展示與重點說明

首頁 Home

Part 1 上方導覽列(Navbar)

首先來製作上方導覽列, 導覽列大部分包含 logo 和連結。Materialize 提供非常多樣式和變化,詳細可以參考這篇 👉官方文件

📍 在專案中使用的上方導覽列中,為了讓畫面看起來更簡單和乾淨,只放了一個 logo 和右方漢堡按鈕(用來觸發側邊導覽列):

  • 透過在 nav 的父元素加上 .navbar-fixed 讓導覽列可以固定置頂
  • .container 的預設寬度為 70% 的螢幕尺寸寬,因此用來包覆 logo 和漢堡按鈕時,可以讓左右兩邊保留一些空間,視覺上較舒適
  • 在 logo 加上 .brand-logo 讓 logo 在中小尺寸的螢幕置中,大尺寸以上螢幕則置左
  • 漢堡鈕的顯示,是需要在 <a> 元素上放入 .sidenav-trigger,它的預設是在中小螢幕尺寸時才顯示。但透過 .show-on-medium-and-up 能讓漢堡按鈕得以在大尺寸以上的螢幕也顯示。
僅呈現上方導覽列程式碼

Part 2 側邊導覽列(Sidenav)

接著來製作點擊漢堡按鈕會開啟的側邊導覽列,大致上是透過一個 unordered list(無序列表)達成。當然還可以置入照片、分隔線、下拉式選單等樣式和功能,詳細可以參考這篇 👉官方文件

📍 專案中使用的側邊導覽列:

  • <ul> 加上 .sidenav 設定為側邊導覽列
  • <ul> 加上 #side-nav,這個 id 必須要和漢堡鈕上設定的 data-target 一致,才能對應到正確的漢堡按鈕
  • 在列表中使用 .divider 創造導覽按鈕和下方外部連結間的分隔線

📍 初始化和設定選項

  • edge 選項:設定側邊導覽列從右邊展開
  • preventScrolling 選項:設定側邊導覽列在開啟時,頁面仍可滑動

Part 3 全螢幕照片輪播(Fullscreen Slider)

Materialize 針對照片輪播(Slider/Carousel)提供不少客製化的地方,例如:可以選擇是否全螢幕、增加轉場效果的照片標題等。詳細可以參考這篇 👉官方文件

📍 在專案中製作的全螢幕照片輪播中,置放兩張含有轉場效果標題的照片:

  • <div> 加上 .slider 設定為照片輪播
  • <div>加上 .fullscreen 設定為全螢幕的照片輪播
  • 在每張照片 <img> 後放入 .caption 的 <div> 元素,其中可以寫入想要呈現在照片上的標題
  • 照片標題分別透過 .canter-align.left-align 置中及置左,並各自帶有轉場效果
僅呈現輪播區塊程式碼

📍 初始化和設定選項

  • indicators 選項:設定照片下方不顯示操控的圓形按鈕
  • interval 選項:設定每張照片播放五秒

關於我 About Me

📍 在這個區塊透過標題簡短自我介紹,並使用 Card 展示學習網頁開發三個不同的階段:

  • <section> 上加入 .section 可以讓這個區塊的上方和下方增加一些 padding 。詳細可以參考 👉官方文件
  • <section> 上加入 .scrollspy 和一個 id 名稱可以讓使用者在側邊導覽列點擊 About Me 時,滑順的被導引到此區外。詳細可以參考 👉官方文件
  • <div> 上加入 .card 設定為 Card; Card 上的圖片和標題分別使用 .card-image.card-title 就能擁有基本的尺寸和樣式設定。詳細可以參考 👉官方文件
  • .col 是使用了 Materialize 的 Grid System:.s12 代表小尺寸螢幕佔 12 欄位、.m4 代表中尺寸以上螢幕佔 4 欄位。詳細可以參考 👉官方文件
僅呈現關於我區塊部分程式碼

📍 初始化和設定選項

技能 Skills

Part 1 技能展示

📍 在這個區塊將技能分成三個類型,以輪播(Carousel)分別展示:

  • Materialize 的輪播(Carousel)不僅可以置放圖片,也可單純置放文字內容,輪播效果和樣式也有非常多選擇。詳細可以參考 👉官方文件
  • <div> 上加入 .carousel 設定為輪播;加入.carousel-slider將圖片或文字內容寬度設定為 100%。
  • 透過一個包含 .carousel-item<div> 可以分別包裝不同的輪播內容

📍 初始化和設定選項

  • fullWidth 選項:設定輪播寬度為 100%
  • indicators 選項:顯示輪播下方的控制圓點

Part 2 背景滑動圖片(Parallax)

📍 在這個區塊的背景圖片是透過 Parallax 來創造出頁面滑動時「背景圖和頁面本身移動的速度好像不同」的效果。詳細可以參考 👉官方文件

  • 在 Skills 區塊 <section>上加入.parallax-container;在包覆背景圖片的<div> 上加入.parallax-container設定效果
僅呈現 Parallax 區塊的程式碼

📍 初始化和設定選項

近期專案 Recent Project

📍在這個區塊左側透過 Card 來展示近期幾個實作專案;透過 Card Reveal 讓使用者在點擊作品後,能看到作品的技術說明與作品相關連結:

  • 透過 .card 設定元素為 Card;.card-image 設定為 Card 圖片。
  • 在 Card 裡設定一個.card-reveal區塊,預設是隱藏起來的,一旦使用者觸發,將會顯示更多專案使用到的技術及連結。
  • 在 Card 上加入 .sticky-action 讓 Card Reveal 在開啟時,不會蓋住下方的標題。
  • .activator 放置在圖片、下方標題等元素上,讓使用者在點擊該元素時,能開啟 Card Reveal 看到「更多資訊」。詳細可以參考 👉官方文件
  • 在 Card 下方標題右側使用 Badge 來呈現該作品是什麼類型的應用程式:在 <span> 加入 .badge 設定、.new 能為 Badge 加上背景色、data-badge-caption能客製化 Badge 顯示的訊息。詳細可以參考 👉官方文件
僅呈現 Recent Project 區塊右側 Card 部分程式碼

了解更多 Discover More

📍 此區塊透過兩個按鈕提供外部連結到其他作品與文章:

  • 背景圖片使用 Parallax 效果
  • 按鈕添加 .waves-effect 讓使用者在點擊時背景有波浪效果;添加 .waves-light 設定波浪為白色
  • Medium 的背景透過 .orange 設定為橘色(色碼:#ff9800)、.darken-4 設定橘色要深四個階級(如下圖)。詳細可以參考 👉官方文件
  • 標題和按鈕區塊加上 .white-text 將文字設定為白色
😃 Materialize 中顏色設定很彈性1. 背景顏色的調配通常是先有「一個基底色」,再透過 lighten / darkern 變化深淺 
2. 文字的基底色設定:基底色+「-text」,例如:.orange-text
3. 文字的深淺變化設定:「text-」+ lignten / darken,例如:.text-lighten-4

聯繫 Contact

📍 此區塊將設計一個表單,讓使用者在填寫送出後,將表單內容寄送到我的信箱。表單使用的詳細說明可以參考 👉官方文件

  • 表單的 <input><label> 需要透過帶有 .input-field<div> 元素包覆,提供欄位樣式和功能上的設定
  • <input> 上加入.validate會偵測該欄位是否通過驗證,並根據結果自動加上 .valid.invalid,同時會呈現綠色或紅色的樣式
  • 在欄位下方加上帶有 .helper-text<span> 為該欄位增加輔助訊息,並透過 data-error 設定該欄位未通過驗證時的訊息
  • 在欄位中前加上帶有 .prefix 的圖形,讓該欄位左側顯示特定的圖形
  • Materialize 提供了許多圖形,使用時,需在 <i> 元素加上 .material-icons 並寫入圖形的名稱,例如:<i class="material-icons">add</i>。詳細圖形列表可以參考 👉官方文件
  • <textarea> 必須加上 .materialize-textarea 才會擁有如 input 欄位的樣式和效果
聯繫區塊的部分程式碼

頁腳 Footer

📍 頁腳區塊將放上我的相關連結與版權資訊

  • <footer>上加入 .page-footer 增添頁腳樣式
  • 由於預設樣式中,背景色為粉紅色,因此透過 .grey.lighten-1 改為灰色系背景
  • 版權區塊可以透過 .footer-copyright 快速增添樣式,例如:背景色將自動加深
頁腳區塊部分程式碼

置底連結按鈕 Floating Action Button

📍 置底連結按鈕是使用 Floating Action Button,此按鈕將被固定放置在螢幕右下角的位置,當滑鼠點擊此按鈕時,將會顯示隱藏的按鈕。顯示隱藏按鈕的樣式和效果蠻多種的,詳細說明可以參考 👉官方文件

  • 透過一個帶有 .fixed-action-btn<div> 包覆所有按鈕
  • 在同一個 <div> 上加入 .toolbar 讓隱藏按鈕顯示的效果,是展開在螢幕最下方。詳細說明可以參考 👉官方文件
  • 置底顯示的單一按鈕需加上 .btn-floating
  • 置底顯示的單一按鈕透過 .hide-on-med-and-up 設定只在小尺寸螢幕顯示
  • 透過撰寫 JavaScript 讓置底按鈕在頁面向下滑行一段距離後才顯示,並透過使用 .scale-transition.scale-out 增加顯示按鈕時,縮放的轉場效果。詳細說明可以參考 👉官方文件

📍 初始化和設定選項

  • toolbarEnabled 選項:設定顯示隱藏按鈕的效果是在螢幕最下方展開

心得

自從使用 Bootstrap 以來,都還沒機會接觸這類型的其他前端框架,這次很開心認識了 Materialize,甚至在透過資料查找和 Udemy 上的課程自學後,直接實作了個人頁面,真的是蠻爽快的!

在接觸新的框架時,總是需要花點時間適應 — 尤其 Materialize 提供開發者很多能客製化的地方,因此,更需要花時間去了解其運作方式,才能依照自己的需求順利地套用在專案中,甚至發揮自己的魔法,做出許多客製化的效果。

使用過 Bootstrap 再來接觸 Materialize 的確能較快上手 — 大方向的使用和操作方式都蠻相似的,兩個框架也都非常注重 RWD 的網頁設計。然而,兩者的強項還是有些差異的,這次在使用完 Materialize 後,能特別感受到它在「使用者體驗和互動」上的設計,有更多的著墨和用心、在許多元件和功能上,也讓開發者有不少客製化的彈性(例如顏色的調配)、以 Google 提出和使用的 Material Design 作為核心也它是很大的優勢之一。

雖然 Materialize 很年輕,社群相對 Bootstrap 來說還沒有這麼廣,但其本身帶有非常多的優點,在近期也有越來越多的討論度,很期待它接下來的發展,也期待自己未來能透過 Materialize 有更多發揮!

在接觸新的框架時,都需要花點時間適應 — 尤其 Materialize 提供開發者很多能客製化的地方,更需要花時間了解運作方式,才能依照自己的需求順利地套用在專案中,甚至發揮自己的魔法,做出許多客製化的效果!

麥克的半路出家筆記

持續培養實力與技能以成為一位更好的軟體工程師 — 紀錄學習心得與心路歷程

麥克的半路出家筆記

持續培養實力與技能以成為一位更好的軟體工程師 — 紀錄學習心得與心路歷程

Mike Huang

Written by

現任全端工程師,熱愛接觸和學習前後端技術與知識、喜歡分享、旅遊和咖啡

麥克的半路出家筆記

持續培養實力與技能以成為一位更好的軟體工程師 — 紀錄學習心得與心路歷程