高二下自主學習成果
初探網頁設計
二年六班 侯竣奇
Contents
- 計劃
- 教材 & 工具
- 基礎中的基礎
- Flexbox 排版
- RWD 設計
- JavaScript
- 共用 Header
- 上架靜態伺服器
- Github
- 網域與 Nameserver
- 每次更新內容都需要這樣嗎?
- 認識 Markdown 語法
- 初識 Hugo 靜態網頁生成
- 在 Netlify 上架
- CMS:靜態網站也能有後台
計劃
教材選用
彭彭的教學頻道
| 1 | 基礎 HTML | 8 | CSS3 Flexbox – RWD |
| 2 | 基礎 CSS | 9 | JavaScript (JS) 入門 |
| 3 | CSS 選擇器 | 10 | JS 變數與運算子 |
| 4 | CSS 表格樣式 | 11 | JS 判斷式 |
| 5 | 基礎網頁排版 | 12 | JS 迴圈 |
| 6 | 回應式排版設計 | 13 | 編寫網頁並上架 |
| 7 | CSS3 Flexbox |
工具
基礎中的基礎
HTML 語法
先認識最基本的網頁架構,在這個階段做出來的網頁只有最基礎的內容。
基本上就是跟著影片中的教學在 repl.it 上面把程式碼敲一遍,最後看瀏覽器渲染出來的結果。
<!DOCTYPE html><html> <head> <meta charset="utf-8"></meta> <title>我的首頁</title> </head> <body> <h3>我的照片</h3> <img width="200" src="head.jpg"/> <hr/> <h3>我的最愛</h3> <ul> <li><a href="https://www.google.com">Google</a></li> <li>Facebook</li> <li>PTT.cc</li> </ul> <h3>MLB baseball</h3> <table border=1 width="400" cellpadding="5"> <tr> <td>Name</td> <td>Win</td> <td>Lose</td> </tr> <tr> <td><b>New York Yankees</b></td> <td>10</td> <td>8</td> </tr> <tr> <td>Boston Red Sox</td> <td>9</td> <td>9</td> </tr> </table> </body></html>CSS 語法
除了教學用途之外,基本上很少會看到「純的」html 網頁。CSS 可以幫助我們將網頁修飾得更為美觀,而且可以讓多個區塊套用相同的屬性,不僅避免多次的重複編寫還能讓格式更統一。
基礎 CSS
- class 選擇器
- 在
style區塊或者獨立的 CSS 文件中使用.xxx代表指定特定的 class 名詞要使用的 css 效果 - 在
div、p中可以使用class="xxx"來使整個區塊套用已經寫好的 css 語法
- 在
- id 選擇器
-
#btn{border:1px solid #888888;background-color:#ffffff;padding: 5px;}/* 套用在物件上 */<button id="btn">我是要套用的按鈕</button>
-
- 虛擬選擇器:以
:focus為例-
input:focus{border:2px solid #ff0000;}
- 當目標取得焦點(鍵盤或滑鼠)時套用此設定
-
- 階層式選擇
- CSS 可以指定「在 A 區塊中的 B」套用某組設定
-
.favorite h1{color:#0000ff;}
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>CSS 基礎語法</title> <style type="text/css"> .title{font-weight:bold;font-size:24px} .content{width:400px;padding:10px;border:1px dashed blue;margin-top:10px;margin-bottom:10px} .keyword{color:red} .box{ position:relative;left:200px;top:50px; width:100px;height:100px;background-color:green } </style> </head> <body> <div class="title">今天天氣不錯</div> <div class="content"> 我去公園散步,餵<span class="keyword">鴿子</span>。<br/> 覺得鴿子好可愛喔。 </div>
<div class="title">公園裡有很多小朋友</div> <div class="content"> 小朋友在玩溜滑梯,盪鞦韆,還有幾隻<span class="keyword">狗狗</span>和貓貓。 </div> <div class="content"> 還有幾位老公公<span style="position:relative;top:-8px">2</span>在聊天。 </div> </body> </html>CSS 表格
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>CSS 表格樣式 - 詳細介紹</title><style type="text/css">table{ width:400px; border-collapse:collapse;}td{ border-bottom:1px solid#888888;padding:10px;}/* 表格中的第一對 <tr> */tr:nth-child(1){ background-color:#7788aa;color:#ffffff;}/*表格中的偶數對 <tr> */tr:nth-child(even){ background-color:#e8e8e8;}</style></head><body> <table> <tr> <td>球隊</td> <td>勝</td> <td>敗</td> </tr> <tr> <td>紐約洋基隊</td> <td>10</td> <td>8</td> </tr> <tr> <td>波士頓紅襪隊</td> <td>9</td> <td>9</td> </tr> <tr> <td>多倫多藍鳥隊</td> <td>8</td> <td>9</td> </tr> </table></body></html>Flexbox 排版
傳統 CSS 排版
- 讓
<div>不換行display:inline-block;
- 讓
<div>置中margin-left:auto; margin-right:auto;
- 讓
<div>對母塊置中vertical-align:top;
- 調整行高
line-height: 30px;
- 讓
<body>與邊界沒有距離(網頁貼齊螢幕)margin:0px;
<!DOCTYPE html><html><head> <meta charset="utf-8" /> <title>竣奇的自我介紹</title> <style type="text/css"> .head{ background-color:#003344;color:white; font-weight:bold;font-size:30px; text-align:center;padding:10px } .content{ width:1000px; margin-left:auto;margin-right:auto; } .box{ width:280px;padding:10px;margin:10px; background-color:white; display:inline-block;vertical-align:top; text-align:center;height:150px;line-height:30px; } .title{ font-weight:bold; } </style></head><body style="margin:0px;background-color:#eeeeee;"> <div class="head">竣奇的自我介紹</div> <div class="content"> <div class="box"> <div class="title">我的基本資料</div> <div>姓名:侯竣奇</div> <div>2004 年生</div> </div> <div class="box"> <div class="title">我的個人興趣</div> <div>寫程式</div> <div>金融交易</div> <div>研究生產力工具</div> </div> <div class="box"> <div class="title">學經歷</div> <div>嘉義高中</div> <div>南興國中</div> <div>興安國小</div> </div> </div></body></html>Flexbox 排版
什麼是 Flexbox?
Flex 是 CSS3 開始出現的 box model。它就像一個一個靈活的盒子,可以藉由設定盒子的內容物如何排列來控制網頁中的內容
- justify-content
- 內容與整個 Flexbox 的「水平對齊」
- flex-start
- flex-end
- center
- space-between
- space-around
- align-items
- 內容與整個 Flexbox 的「垂直對齊」
- flex-start
- flex-end
- center
- stretch:預設值,將內容元素全部撐得和 Flexbox 一樣高
- baseline 以所有內容的基線作為對齊標準

<!DOCTYPE html><html><head> <meta charset="utf-8" /> <title>CSS3 Flexbox</title> <link href="style.css" rel="stylesheet" type="text/css" media="all" /></head><body> <nav> <div class="logo">Logo</div> <div class="menu">Menu</div> <div class="user">User</div> </nav> <!-- Flex 如何解決:並排(切欄)、水平對齊、垂直對齊的問題 --> <main> <div class="item">News 1<br/>Today is a good day.</div> <div class="item">News 2</div> <div class="item">News 3</div> </main></body></html>RWD
RWD:Responsive Web Design
自適應排版
✩ 依照使用者的螢幕大小(1200px/500px/…)規畫不同的 CSS 設定
HTML:
<!DOCTYPE html><html><head> <meta charset="utf-8" /> <title>CSS3 Flexbox RWD 排版</title> <link href="style.css" rel="stylesheet" type="text/css" media="all" /></head><body> <nav> <div class="logo">Logo</div> <div class="menu">Menu</div> <div class="user">User</div> </nav> <!-- RWD 回應式設計的關鍵動作:欄位變化 Flex 如何控制欄位的變化? 例如:4欄 > 2欄 > 1欄
規劃: 1200px 以上的規劃:4 欄,固定尺寸 500px~1200px 的規劃:2 欄,彈性尺寸 500px 以下的規劃:1 欄,彈性尺寸 --> <main> <div class="item">News 1<br/>Today is a good day.</div> <div class="item">News 2</div> <div class="item">News 3</div> <div class="item">News 4</div> </main></body></html>body{margin:0px;}/* nav 樣式設定 */nav{ display:flex;}nav>.logo{ /* 沒有彈性,固定尺寸 */ flex:none;width:100px; background-color:#ffcccc;}nav>.menu{ /* 盡量把容器的空間張滿 */ flex:auto; background-color:#ccccff;}nav>.user{ flex:none;width:100px; background-color:#ccffcc;}/* main 樣式設定 */main{ /* 容器 */ display:flex;flex-wrap:wrap; justify-content:center; align-items:flex-start; background-color:#cccccc;}main>.item{ /* 項目 */ flex:none; width:270px;margin:10px; background-color:#ffcccc;}@media (max-width:1200px){ main>.item{ width:45%; }}@media (max-width:500px){ main>.item{ width:90%; }}- Desktop:

- Phone:

JavaScript
基礎語法
與 C++ 相似處:
- 都須以 ; 結尾
- 都區分大小寫
- 變數觀念似乎相似
//在 head 裡面可以寫 JS<script type="text/javascript"> alert("大家好"); alert("大家午安");</script>事件處理
- 讓按扭在按下時顯示
Clicked
<!DOCTYPE html><html> <head> <meta charset="utf-8"/> <title>Event 事件處裡</title> <script type="text/javascript"> function over(element){ element.style.color="red"; } function out(element){ element.style.color="black"; } </script> </head> <body> <button onclick="alert('Clicked')">Click</button> <span onmouseover="over(this);" onmouseout="out(this);">Test</span> <div onmouseover="over(this);" onmouseout="out(this);">Line2</div> </body></html>神奇的語法問題
- 計時器
//第一種寫法:執行後倒數計時器馬上就歸零了window.setTimeout(countdown(),1000);
//後來試著跟著影片裡寫,這樣子居然就可以了window.setTimeout(countdown,1000);有誰知道為什麼嗎?
共用 Header
資料:
查詢到的方法
- 手寫 JavaScript
- 利用 JQuery
其中第一種方法我嘗試失敗,後來改用第二種。
其實我第二種一開始也失敗,因為竟然不知道 JQuery 裡面的語法不是內建的,要先下載下來引用…
<!DOCTYPE html><html> <head> <meta charset="utf-8"/> <title>樹(いつき)的金融學堂</title> <link rel="icon" href="/favicon.svg" type="image/x-icon" /> <link rel="stylesheet" href="main.css" /> <script src="jquery-3.6.0.min.js"></script> </head> <body> <script type="text/javascript" src="/main.js"></script>
<div class="header"></div> <script>$(".header").load("header.html");</script>
<main> <H1>HOMEPAGE</H1> </main> </body></html> 然後在目錄放一個叫 header.html 的檔案,裡面只需要寫 Menu 的區塊就好了(不用寫完整的 html 檔)
上架靜態伺服器
做到此時網頁的樣子:
- 花了很多時間才完成的 RWD Menu
-
沒錯,我花了好久才弄好 Menu,而且其實比例好像有哪裡怪怪的。
Github
別管那麼多,先上架就對了!
資料:


網域與 Nameserver
源由
- Github 可以自訂網域
.com、.net等大部分頂級網域需要花錢- 不想用次級網域 eg.
junqi.github.io
資料:
Freenom
- 提供
.tk、.ml、.ga等免費頂級網域 - 把 DNS 指向 Github 伺服器
小結
每次更新內容都需要這樣嗎?
根據原訂的計畫,到了這一步以後應該就是開始寫一些網頁的內容豐富我的網站。但是突然想到幾個問題點:
- 每次一需要修訂內容就需要動到網頁原始碼。
- 對於寫文章來說,每一行都動到 HTML 原碼並不是一個很順暢的書寫體驗。
於是乎想到我現在正在用來記錄學習過程的 Notion 似乎也支援分享為網頁的功能,後來深入找尋資料發現 Markdown 語法似乎天生就可以轉成 HTML…
Markdown 語法
最初接觸
從這個學期初開始,我為了方便記錄我的學習內容,一直都是使用 Notion 作為記錄的工具。
在 Notion 中許多常用的語法,其實都是 Markdown 語法:
#標題##次標題###次次標題
…以此類推,最高支援六層
[文字](URL)超連結`code`程式碼引用- 使用三個
`在頭尾:可以輸入多行程式碼
- 使用三個
Markdown 特性
由於 Markdown(下稱 MD)在最終顯示時會被轉換成 HTML,當 MD 語法無法滿足你需求的時候,其實可以直接在檔案中寫上 HTML 碼,最終顯示出來是不會有問題的。
認識 Hugo
前言
資料:
最後我選用 Hugo 當靜態網頁生成器。
Why Hugo?
What’s Hugo?
Hexo 與 Hugo 都是靜態網頁生成器,只要給它們 Markdwon 文件就可以自動依據你給的模版產生出網頁。
我選用 Hugo 主要有以下原因:
- 開源免費。
- 極快的網頁生成速度,既使文章數量多起來也不必擔心。
- 支援 Markdown 語法,方便更新文章。
Code Notes:
hugo new site xxx //建立一個網站hugo new posts/xx.md //建立一個新文章hugo server -D //在本機架預覽伺服器選擇模版
- LoveIt
- KaTeX 語法
- 例:等差級數和公式
$\sum_{i=1}^{n}{a_i}=\frac{(a_1+a_n)*n}{2}$
- 黑色模式
- 程式碼高亮
- RWD
- 簡潔美觀
- KaTeX 語法
設定 config.toml
設定 Menu 的項目、網站的 icon、等等

在 Netlify 上架
部屬
Netlify 提供免費的靜態伺服器,並且支援 Automatic Deploy,可以在你把更新的文章 push 到 Github 上面以後自動更新文章到網頁上。
- Github 作為源碼儲存庫
- Netlify 發現有變動後自動
Deploy
Netlify CMS:靜態網站的後台系統
建立
CMS:Content Management System(內容管理系統)
設定後台可以管理的項目(標題、內文、日期、分類等…)

(對應的設定介面)

最終成果
本站網址:junqi.ml
2023/07/11 更:現為 blog.junqi.tw 2025/11/23 更:現為 blog.pytreedao.com
文章管理流程:
- 在 CMS 上面新增文章
- 會自動開一個 Github 的分支儲存
- 從 HackMD 上面
Pull下來修改內文 - 從 HackMD 寫好後
Push回 Github - 在 CMS 上「發文」,合併分支及
Deploy的部分會全自動處理


心得
與上學期的差異
我上學期的自主學習的主題是「自學 MT5 程式交易」,起初我也有個宏大的目標:希望能夠寫出一些市場上流傳常見的策略,利用歷史資料一一驗證它們在這些年的績效表現並做數據分析。
但到了後來頻繁出現的編譯錯誤,又加上不是常見的程式語言以至無從問起,經過好幾週的重寫與測試後我還是放棄了…又或者說是放到以後待完成的願望清單。
這學期我將目標放得更鬆,為了讓我學習過程中即使遇到障礙也較容易尋找協助,我把主題定在較常見的網頁設計。我最低的目標是:學習基礎的語法、了解網頁的構成。
雖然最終我沒有硬生生把整個網頁手刻出來,但在把預計的教材學習完並且初步寫出 Menu 後,我透過修改模版、結合架站時學到的網域概念,最終生出了本站。
未來展望
今後在學習的過程中會順手把歷程在這裡,除了作為自己的學習記錄,也希望今後若有人遇到與我相同問題時,我能幫上忙。
部分內容可能已過時
彭彭的教學頻道













