Skip to main content

Command Palette

Search for a command to run...

用 VuePress 製作說明文件頁面 — 5:改樣式、加元件

Published
2 min readView as Markdown
用 VuePress 製作說明文件頁面 — 5:改樣式、加元件
L

前端工程師 Augustus 的學習筆記 — solving problems, in simple ways.

本篇大綱


本篇要解決的問題

在上一篇〈用 VuePress 製作說明文件頁面 — 4:佈景主題、外掛〉我們改變了整個 VuePress 的佈景主題,也加了一些外掛,可以丟給同事看說「這我 10 分鐘內做出來的」嚇嚇他們。

不過,雖然背景主題好用,但有時我們不想要改整個主題,只是想要修一些頁面上的樣式,比方改個文字的顏色、加個按鈕……什麼的。

如果是加按鈕,那可以包成一個元件(Component),這樣當未來按鈕想要修改時,只需要改 Component 的檔案就可以統一改好整個站的按鈕,而不用一頁一頁打開的去改。

本篇主要會示範怎麼樣修改 VuePress 的 CSS,以及怎麼樣加上 components。


修改樣式 Styling

修改樣式的說明文件:英文 | 簡中

VuePress 用的是 Stylus,雖然 Augustus 也沒用過,但似乎跟 Sass 沒差很多,因此用起來還算順手。

文件上說明,樣式的檔案 VuePress 會自動抓 2 個,分別是管理變數的 palette.styl,跟寫自訂樣式的 index.styl。

在 .vuepress 的資料夾底下先新增一個名為「styles」的資料夾,接著在 styles 裡面建 2 個檔案:palette.styl、index.styl。

palette.styl

.vuepress/styles/palette.styl 這個檔案主要是拿來修改變數的,預設可以改的變數有以下:

// colors  
$accentColor = #3eaf7c  
$textColor = #2c3e50  
$borderColor = #eaecef  
$codeBgColor = #282c34  
$arrowBgColor = #ccc  
$badgeTipColor = #42b983  
$badgeWarningColor = darken(#ffe564, 35%)  
$badgeErrorColor = #DA5961  

// layout  
$navbarHeight = 3.6rem  
$sidebarWidth = 20rem  
$contentWidth = 740px  
$homePageWidth = 960px  

// responsive breakpoints  
$MQNarrow = 959px  
$MQMobile = 719px  
$MQMobileNarrow = 419px

比如我們想要改變所有連結的顏色,預設是 $accentColor = #3eaf7c 這個,是 Vue 的綠色,我們想改成藍色的話就在 palette.styl 上寫:

$accentColor = #42A6F7

鏘鏘~我們的超連結顏色就換成藍色啦:

連結顏色改為藍色

連結顏色改為藍色

在改變數這邊要注意一個點,就是如果我們有額外安裝佈景主題的話,注意看文件上有沒有設定其他變數?

比如我們前一篇安裝的深色佈景,裡面就寫說改變顏色的變數是 $accentDarkColor,如果只改了 $accentColor 會發現頁面沒反應。

index.styl

除了設定變數以外,想加其它的 CSS 就寫在 index.styl 裡。

比方我們想要設定 .btn 這個 class,那就在 .vuepress/styles/index.styl 這個檔案中加上:

.btn  
  display inline-block  
  padding: .5rem 1rem  
  line-height 1.5  
  background-color: $accentColor  
  border-radius: .25rem  
  color: #FFF  
  &:hover  
    background-color: #167FFF  
    text-decoration: none !important

之後就可以在各個頁面使用囉。

Markdown 的檔案可以寫 HTML,我們寫上:

<a class="btn" href="https://www.letswrite.tw/">Let's Write 官網</a>

開啟頁面後就看得到按鈕啦:

加入客製樣式的按鈕

加入客製樣式的按鈕


使用元件 Using Components

在 VuePress 上 Component 的檔案內容跟我們在 Vue CLI 上很像,不一樣的是當我們建好一個 *.vue 的檔案後,不必另外寫 import 就可以在所有頁面上使用。

所有 components 的檔案被規定要放在 .vuepress/components/ 的資料夾中,以下就來建立一個按鈕的 component。

安裝預處理器

在開始寫 component 之前,因為 Augustus 習慣寫 Pug,因此要先來安裝讓 VuePress 可以讀取 Pug 的 loader。

文件:英文 | 簡中

文件上有說明,VuePress 已經對 sass、scss、less、stylus、pug,這幾個寫好了在 webpack 上的配置,因此我們只需要安裝好就行。

stylus 不必安裝什麼就可以直接使用,下面的 component 上會直接用 stylus。

要能使用 Pug 的話,打開終端機進到資料夾後,輸入:

yarn add -D pug pug-plain-loader

安裝完畢就可以直接使用了。

建立按鈕元件

.vuepress 中新增名為「components」的資料夾,接著新增一個檔案,取名為「Btn.vue」。

檔名很重要,當我們取為 Btn 時,之後在各頁面要使用這個 component 就是寫:

<Btn/>

就會引用好這個 component。

我們在 Btn.vue 的檔案中寫入以下:

lang="pug" 是指 template 是用 pug 來寫,如果沒有事先安裝好上面那段的預處理器就會報錯,要使用 Pug 的話記得先安裝。

因為每個按鈕的文字、連結有所不同,因此用了 2 個 props:titleuri

lang="stylus" 是指 style 會用 stylus 來寫,我們這邊就簡單寫個樣式上去。

要使用這個按鈕的 component,就在要放按鈕的 *.md 檔上寫像這樣:

<Btn uri="https://t.me/letswritetw" title="加入 Telegram" />

就會成功看到按鈕出現囉~

加入按鈕 component

加入按鈕 component

像這樣把按鈕用成 component 的好處是,假如有一天我們要改按鈕,比方要把 target="_blank" 給刪掉,那我們只需要修改 .vuepress/components/Btn.vue 裡的程式碼就好,所有引用到按鈕的頁面就會同步一起更新,省去了我們一頁一頁打開頁面去檢查的時間。


原始碼、Demo

本篇開始,原始碼跟 Demo 都會放在 GitHub 上,歡迎取用。

Demo 會隨著系列文更新,所以看到的程式碼會逐漸豐富。

取用之前可以先對本篇點個讚或分享~

原始碼:https://github.com/letswritetw/letswrite-vuepress-document

Demo:https://letswritetw.github.io/letswrite-vuepress-document/


用 VuePress 製作說明文件頁面系列

  1. 安裝
  2. config.js 基本設定
  3. 導覽列
  4. 佈景主題、外掛
  5. 改樣式、加元件
  6. 部署

More from this blog

圖片壓縮:用 Compressor.js 自動調整品質壓縮至指定大小

本篇要解決的問題 很多網站功能會需要處理使用者上傳的圖片,比方讓使用者上傳會員照片。 但隨著手機相機愈做愈好,拍出來的照片隨便都是幾 MB,直接上傳的話,耗時也佔空間。 雖然網路上搜尋有許多圖片壓縮工具,但大多只能設定固定的壓縮的品質,無法保證壓縮後的檔案大小符合需求。 本筆記文將使用 Compressor.js 套件,實作一個圖片壓縮功能,符合以下需求: 自動嘗試不同的壓縮品質,直到檔案小於指定大小(ex: 600KB)為止。 將圖片轉換為 WebP 格式。 長、寬限制最大尺寸。 這...

Oct 4, 20254 min read
圖片壓縮:用 Compressor.js 自動調整品質壓縮至指定大小

使用 pm2.web 建立免費 PM2 監控系統

本篇要解決的問題 PM2 是 Node.js 裡常用的 process manager,一般如果是透過網頁監控、重啟,大概會使用官方的 Keymetrics。 但,But!就是這個 But!免費版最多只能監控 4 個 Process,再多就要掏出魔法小卡了。 問了 ChatGPT 後,發現有一個開源的替代方案:pm2.web,可以自己架設,不管幾個 process 都完全免費。 以下筆記如何使用 Vercel + MongoDB Atlas 部署 pm2.web,免費監控我們的 PM2。 架構...

Sep 26, 20252 min read
使用 pm2.web 建立免費 PM2 監控系統

GitHub Copilot + Figma MCP Server 實戰:用 AI 快速切版教學

本篇要解決的問題 最近在研究 MCP,剛好在 Threads 上看到有人實測 Figma MCP,想試看看是否真的能透過 AI 進行切版。 實作了一下後,還真的可以,不過目前僅針對簡單設計稿進行測試,結果略有跑版現象,整體效果尚可接受。 但目前就有這成果覺得厲害,再給它一段時間,也許前端工程師可以省掉切版的時間,把心力放到別的地方。 前提是,客戶要很明確的知道自己要什麼 XD,不然靠 AI 微調,還不如人工直接改程式還比較快。 用到的資源 以下是要實作用 Figma MCP 來切版,需要的資源:...

Apr 12, 20252 min read
GitHub Copilot + Figma MCP Server 實戰:用 AI 快速切版教學

使用 Google Apps Script 串接 Google Analytics API,整合多站數據

本篇要解決的問題 一間公司裡可能旗下會有多個網站,想同時查看所有網站的 GA 數據,通常需要開啟多個瀏覽器視窗並排顯示,操作較為繁瑣。 如果可以改由 API 來取得 GA 的數據,工程師就可以把各站的資料顯示在一個頁面上,而不用同時開多個 GA 來看。 開通 GA API 取得 GCP 專案編號 要先有 Google Cloud Platform(GCP)的專案,沒有的話登入自己的 Google 帳號,就可以先增一個。 專案編號就在 資訊主頁 上: 開通 GA API 功能 在使用 API ...

Mar 29, 20254 min read
使用 Google Apps Script 串接 Google Analytics API,整合多站數據

監聽 localStorage 事件:如何在同一頁面內偵測變更

本篇要解決的問題 我們有時會把資訊存在瀏覽器的空間裡,像是 Cookies、Local Storage、IndexedDB。 Local Storage 原生的 storage 事件主要用於跨分頁同步,如下: window.addEventListener("storage", () => {}); 但如果想要在同一個頁面內監聽變更,就需要手動覆寫 localStorage 方法。 localStorage event listener 我們可以透過 Storage.prototype 覆寫...

Mar 3, 20251 min read
監聽 localStorage 事件:如何在同一頁面內偵測變更
L

Let's Write

63 posts

前端工程師 August 的學習筆記 — solving problems, in simple ways.