3210 字
16 分鐘

高二下自主學習成果

2022-06-20
瀏覽量 載入中...

初探網頁設計#

二年六班 侯竣奇

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

工具#

  • Repl.it 線上多程式語言編譯 IDE

    Repl.it 截圖

  • Notion 學習過程記錄

    Notion 截圖

  • Brackets 網頁編輯軟體,有即時預覽功能

基礎中的基礎#

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>

純 html 的表格截圖

CSS 語法#

  除了教學用途之外,基本上很少會看到「純的」html 網頁。CSS 可以幫助我們將網頁修飾得更為美觀,而且可以讓多個區塊套用相同的屬性,不僅避免多次的重複編寫還能讓格式更統一。

基礎 CSS#

  • class 選擇器
    • style 區塊或者獨立的 CSS 文件中使用 .xxx 代表指定特定的 class 名詞要使用的 css 效果
    • divp 中可以使用 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 基礎語法


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>

CSS 表格截圖

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>

HTML 結合 CSS 做表格


Flexbox 排版#

什麼是 Flexbox?
Flex 是 CSS3 開始出現的 box model。它就像一個一個靈活的盒子,可以藉由設定盒子的內容物如何排列來控制網頁中的內容 flexbox 的概念圖

  • justify-content
    • 內容與整個 Flexbox 的「水平對齊」
    • flex-start
    • flex-end
    • center
    • space-between
    • space-around
  • align-items
    • 內容與整個 Flexbox 的「垂直對齊」
    • flex-start
    • flex-end
    • center
    • stretch:預設值,將內容元素全部撐得和 Flexbox 一樣高
    • baseline 以所有內容的基線作為對齊標準
    • flexbox 的概念圖2
<!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>

flexbox 練習截圖

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:
    RWD 桌機端截圖
  • Phone:
    RWD 手機端截圖

JavaScript#

基礎語法#

與 C++ 相似處:

  1. 都須以 ; 結尾
  2. 都區分大小寫
  3. 變數觀念似乎相似
//在 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#

資料:

查詢到的方法

  1. 手寫 JavaScript
  2. 利用 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,而且其實比例好像有哪裡怪怪的。

RWD Menu 電腦端
RWD Menu 手機端

Github#

別管那麼多,先上架就對了!

資料:

上傳到 Gtihub

開啟 Github Pages

網域與 Nameserver#

源由#

  • Github 可以自訂網域
  • .com.net 等大部分頂級網域需要花錢
  • 不想用次級網域 eg.junqi.github.io

資料:

Freenom#

Freenom 網域商

小結#

自訂網址

每次更新內容都需要這樣嗎?#

  根據原訂的計畫,到了這一步以後應該就是開始寫一些網頁的內容豐富我的網站。但是突然想到幾個問題點:

  1. 每次一需要修訂內容就需要動到網頁原始碼。
  2. 對於寫文章來說,每一行都動到 HTML 原碼並不是一個很順暢的書寫體驗。

於是乎想到我現在正在用來記錄學習過程的 Notion 似乎也支援分享為網頁的功能,後來深入找尋資料發現 Markdown 語法似乎天生就可以轉成 HTML…

Markdown 語法#

最初接觸#

Notion:支援 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
    1. KaTeX 語法
      • 例:等差級數和公式
      • $\sum_{i=1}^{n}{a_i}=\frac{(a_1+a_n)*n}{2}$
      • i=1nai=(a1+an)n2\sum_{i=1}^{n}{a_i}=\frac{(a_1+a_n)*n}{2}
    2. 黑色模式
    3. 程式碼高亮
    4. RWD
    5. 簡潔美觀

設定 config.toml#

設定 Menu 的項目、網站的 icon、等等
Hugo 的 config.toml

在 Netlify 上架#

部屬#

  Netlify 提供免費的靜態伺服器,並且支援 Automatic Deploy,可以在你把更新的文章 push 到 Github 上面以後自動更新文章到網頁上。

  • Github 作為源碼儲存庫
    • 在 Github 上的 Hugo 源碼 Repo
  • Netlify 發現有變動後自動 Deploy
    • Netlify 自動 Deploy
    • Netlify Deploy 的 Console 畫面

Netlify CMS:靜態網站的後台系統#

建立#

CMS:Content Management System(內容管理系統)

設定後台可以管理的項目(標題、內文、日期、分類等…)#

設定 Netlify CMS

(對應的設定介面)
Netlify CMS 畫面

最終成果#

本站網址:junqi.ml
2023/07/11 更:現為 blog.junqi.tw 2025/11/23 更:現為 blog.pytreedao.com

文章管理流程:

  1. 在 CMS 上面新增文章
    • 會自動開一個 Github 的分支儲存
  2. 從 HackMD 上面 Pull 下來修改內文
  3. 從 HackMD 寫好後 Push 回 Github
  4. 在 CMS 上「發文」,合併分支及 Deploy 的部分會全自動處理

Netlify CMS 畫面2

在 HackMD 編輯文章

心得#

與上學期的差異#

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

未來展望#

  今後在學習的過程中會順手把歷程在這裡,除了作為自己的學習記錄,也希望今後若有人遇到與我相同問題時,我能幫上忙。

高二下自主學習成果
https://blog.pytreedao.com/posts/schoollearninghtml/
作者
Pytree
發布於
2022-06-20
許可協議
CC BY-NC-SA 4.0
最後更新於 2022-06-20,距今已過 1308 天

部分內容可能已過時

評論區

目錄