[JS-3] HTML、CSS、JavaScript 是怎麼合作的?打造一台 MacBook 一次搞懂!

Tom-avatar-img
發佈於JS教學
更新於 發佈於 閱讀時間約 20 分鐘

上一篇我們使用了Copilot做出了第一個網頁,雖然只是單純的Html,但也是網頁。但我們是介紹 JavaScript的,你心裡大概有疑惑,為什麼我來學JavaScript還要學 html呢?

讀完此篇你會了解
1. 為什麼要學 Html 和 Css
2. 了解 HTML、CSS、JavaScript三者關係。

今天這篇使用做一台筆電的方式來說明一下學寫網頁一定不可不認識的網頁三劍客-HTML、CSS、JavaScript。

HTML 就像組裝 MacBook 的外殼和零件擺放位置

HTML(HyperText Markup Language,超文本標記語言)是 Web 最基本的架構。使用標籤來定義網頁內容的意義和結構。負責告訴瀏覽器:「這個頁面裡有哪些元素?這些元素的階層與位置是什麼?」

你可以想像我們在用 HTML 做什麼?

就像是在「組裝一台 MacBook」,並且標記出各個組件的位置:

<div class="macbook"> ← 整台筆電的外殼
<div class="screen"> ← 螢幕區域
<div class="camera"></div> ← 螢幕上的小黑點(攝影機)
<div class="display-content"> ← 顯示器
</div>

<div class="body"> ← 下面的機蓋
<div class="keyboard"> ← 鍵盤
<div class="key"></div> ... ← 每一顆按鍵
</div>
<div class="touchpad"></div> ← 觸控板
</div>

</div>

這邊用 <div> 標記出電腦的組件應該在哪個位置,也就是結構的部分。

  • 筆電外殼在哪裡(.macbook
  • 螢幕區( .screen)、鍵盤區(.keyboard)、觸控板(.touchpad)在什麼位置
  • ​按鍵(.key)在鍵盤(.keyboard)裡面的排列

HTML 的本質其實就像在做「內容的架構圖」,將每一塊畫面拆出來並標記清楚,哪個區域是什麼畫面、哪個地方是功能元件、元件還有什麼樣的元件。

CSS 就像 MacBook 的顏色、造型、樣式。

CSS(Cascading Style Sheets,階層式樣式表)就是這台筆電的「外觀設計師」

想像你正在看一場 Apple 發表會。

舞台燈光打下來,Tim Cook 微笑登場,說出:「This… is the best MacBook we’ve ever made.」

接著畫面一轉,拿著產品展示:銀色金屬外殼、極窄邊框、背光鍵盤,薄到可以從牛皮紙袋抽出來,每個角度都讓人驚嘆。

那種讓人「哇~好棒!」的設計,就是 CSS 負責的工作。

 <style>
.macbook { ← 描述電腦的外觀
position: relative;
transform-style: preserve-3d;
transform: rotateX(15deg) rotateY(-15deg);
width: 400px;
}
.screen { ← 螢幕的大小顏色
width: 100%;
height: 250px;
background: #000;
border-radius: 12px 12px 0 0;
box-shadow: 0 10px 30px rgba(0,0,0,0.4);
position: relative;
z-index: 2;
}
.camera { ← 攝影機的樣子
position: absolute;
top: 6px;
left: 50%;
transform: translateX(-50%);
width: 6px;
height: 6px;
background: #222;
border-radius: 50%;
z-index: 3;
}
.display-content { ← 顯示器內容
position: absolute;
top: 50px;
left: 50%;
transform: translateX(-50%);
width: 240px;
border-radius: 8px;
background: #1e1e1e;
box-shadow: 0 5px 10px rgba(0,0,0,0.3);
font-family: monospace;
}
.keyboard { ← 鍵盤
width: 90%;
margin: 20px auto 0 auto;
display: grid;
grid-template-columns: repeat(10, 1fr);
gap: 5px;
padding-top: 16px;
}
.key { ← 按鍵
background: #333;
border: 1px solid #555;
height: 20px;
border-radius: 3px;
box-shadow: 0 5px 4px rgba(0, 0, 0, 0.5);
}
.touchpad { ← 觸控板
width: 90px;
height: 56px;
background: #999;
border-radius: 4px;
margin: 24px auto 0;
}
</style>

CSS 的寫法如上,在 html 中使用 <style> 標籤裡面使用 css 的語法。對應 HTML .macbook 用來描述 Mackbook的機殼外觀,.screen 是來描述螢幕大小,.keyboard.touchpad 分別對應鍵盤和觸控板。

JavaScrpit 就像讓 MacBook「動起來」的智慧功能

我們現在電腦組裝(HTML)好了,外觀設計(CSS)也都做好了,現在只剩下操作軟體和系統這樣電腦才會動起了。這個部分就是 JavaScript的工作了,JavaScript 就像是筆電裡的「作業系統或軟體」

 <script>
const output = document.getElementById("output");
output.textContent = "$ echo \"Hello Tom\"";
</script>

Javascript 的寫法如上,在 html 中使用 <script> 標籤裡面寫 JS的語法就可以動作了。上面的意思寄售,在螢幕中間的終端機output的地方印出 “Hello Tom”。就像我們前面的範例一樣。

總結

我們透過「打造一台虛擬 MacBook」的例子,我們更清楚認識了 HTML、CSS 和 JavaScript 的分工與關係:


技術 比喻角色 功能說明

HTML 電腦的架構 負責建立「結構」,決定每個元件的擺放與階層

CSS 外觀設計 負責畫面「外觀」,調整顏色、邊框、陰影與細節風格

JavaScript 作業系統與互動 讓畫面能「動起來」,控制行為、邏輯、互動與功能


相信通過今天的範例說明,大家就更了解 HTML,CSS,JavaScript三者的關係了吧!下一篇我們會稍微介紹一下 CSS的寫法,讓大家識做一下。

關注Tom,每天十分鐘,你也學得會寫程式!

https://vocus.cc/article/6811992afd89780001f79f46

範例程式碼

程式碼範例如下,執行起來如下 codepen跑出來的樣子,可以看到就像一台 macbook。大家可以自己修改玩玩看。


<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CSS MacBook</title>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}

body {
background: #eee;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
perspective: 1000px;
font-family: sans-serif;
}

.macbook {
position: relative;
transform-style: preserve-3d;
transform: rotateX(15deg) rotateY(-15deg);
width: 400px;
}

.screen {
width: 100%;
height: 250px;
background: #000;
border-radius: 12px 12px 0 0;
box-shadow: 0 10px 30px rgba(0,0,0,0.4);
position: relative;
z-index: 2;
}

.camera {
position: absolute;
top: 6px;
left: 50%;
transform: translateX(-50%);
width: 6px;
height: 6px;
background: #222;
border-radius: 50%;
z-index: 3;
}

.logo {
position: absolute;
top: 12px;
left: 50%;
transform: translateX(-50%);
color: white;
font-size: 24px;
font-weight: bold;
opacity: 0.5;
z-index: 4;
}

.display-content {
position: absolute;
top: 50px;
left: 50%;
transform: translateX(-50%);
width: 240px;
border-radius: 8px;
background: #1e1e1e;
box-shadow: 0 5px 10px rgba(0,0,0,0.3);
font-family: monospace;
}

.window-header {
height: 24px;
background: #2e2e2e;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
display: flex;
align-items: center;
padding: 0 8px;
gap: 6px;
}

.dot {
width: 10px;
height: 10px;
border-radius: 50%;
}

.red { background: #ff5f56; }
.yellow { background: #ffbd2e; }
.green { background: #27c93f; }

.window-body {
color: #00ff00;
padding: 10px;
font-size: 14px;
}

.body {
width: 100%;
height: 210px;
background: linear-gradient(to bottom, #888, #666);
position: absolute;
top: 100%;
left: 0;
transform: rotateX(65deg);
transform-origin: top;
border-radius: 0 0 12px 12px;
box-shadow: 0 20px 50px rgba(0,0,0,0.35);
z-index: 1;
}

.keyboard {
width: 90%;
margin: 20px auto 0 auto;
display: grid;
grid-template-columns: repeat(10, 1fr);
gap: 5px;
padding-top: 16px;
}

.key {
background: #333;
border: 1px solid #555;
height: 20px;
border-radius: 3px;
box-shadow: 0 5px 4px rgba(0, 0, 0, 0.5);
}

.touchpad {
width: 90px;
height: 56px;
background: #999;
border-radius: 4px;
margin: 24px auto 0;
}
</style>
</head>
<body>
<div class="macbook">
<div class="screen">
<div class="camera"></div>
<div class="display-content">
<div class="window-header">
<div class="dot red"></div>
<div class="dot yellow"></div>
<div class="dot green"></div>
</div>
<div class="window-body" id="output">
<!-- JS will write here -->
</div>
</div>
</div>
<div class="body">
<div class="keyboard">
<div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div>
<div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div>
<div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div>
<div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div>
<div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div><div class="key"></div>
</div>
<div class="touchpad"></div>
</div>
</div>

<script>
const output = document.getElementById("output");
output.textContent = "$ echo \"Hello Tom\"";
</script>
</body>
</html>


留言
avatar-img
留言分享你的想法!
avatar-img
Tom的沙龍
5會員
21內容數
我是一個從科技業轉職的軟體工程師
Tom的沙龍的其他內容
2025/05/09
學習程式設計不再困難!本文提供一份循序漸進的 JavaScript 教學,每天只需 10 分鐘,就能從基礎語法到專案實作,逐步學習網頁開發,包含 HTML、CSS、JavaScript、DOM 操作、Canvas 等,並以 Road Map 呈現學習進度。即使零基礎也能輕鬆入門,開啟程式設計之路。
Thumbnail
2025/05/09
學習程式設計不再困難!本文提供一份循序漸進的 JavaScript 教學,每天只需 10 分鐘,就能從基礎語法到專案實作,逐步學習網頁開發,包含 HTML、CSS、JavaScript、DOM 操作、Canvas 等,並以 Road Map 呈現學習進度。即使零基礎也能輕鬆入門,開啟程式設計之路。
Thumbnail
2025/05/07
這篇文章將指導讀者使用Copilot建立他們的第一個網頁。文章涵蓋了網頁的基本組成元素(HTML、CSS、JavaScript),並逐步說明如何使用Copilot產生HTML檔案、安裝Live Server插件執行程式碼,以及修改網頁內容。
Thumbnail
2025/05/07
這篇文章將指導讀者使用Copilot建立他們的第一個網頁。文章涵蓋了網頁的基本組成元素(HTML、CSS、JavaScript),並逐步說明如何使用Copilot產生HTML檔案、安裝Live Server插件執行程式碼,以及修改網頁內容。
Thumbnail
2025/04/29
這篇文章提供新手一個零摩擦的學習寫程式的入門方法,使用GitHub Codespaces線上編輯器,無需設定複雜的本地開發環境,即可快速編寫和執行第一個程式碼。文章詳細介紹了Codespaces的使用方法、介面功能,以及如何編寫和執行一個簡單的 "Hello World!" 程式。
Thumbnail
2025/04/29
這篇文章提供新手一個零摩擦的學習寫程式的入門方法,使用GitHub Codespaces線上編輯器,無需設定複雜的本地開發環境,即可快速編寫和執行第一個程式碼。文章詳細介紹了Codespaces的使用方法、介面功能,以及如何編寫和執行一個簡單的 "Hello World!" 程式。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
JavaScript (簡稱 JS) 是具有一級函數的輕量級、直譯式或即時編譯的程式語言。它因為用作網頁的腳本語言而大為知名,但也用於許多非瀏覽器的環境,像是 Node.js 等。由於 JavaScript 語法上的一些缺點,軟體工程師們又設計出了 CoffeeScript、TypeScript 和
Thumbnail
JavaScript (簡稱 JS) 是具有一級函數的輕量級、直譯式或即時編譯的程式語言。它因為用作網頁的腳本語言而大為知名,但也用於許多非瀏覽器的環境,像是 Node.js 等。由於 JavaScript 語法上的一些缺點,軟體工程師們又設計出了 CoffeeScript、TypeScript 和
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
學習JavaScript的理由有很多,包括容易學習的程式語言、互動式體驗、多功能性、跨平臺、社群和資源豐富、高市場需求。此外,文章提供了設計和前端教學的相關資源連結。文章中還提到了一些與學習JavaScript相關的教學文章和影音教學資源。
Thumbnail
學習JavaScript的理由有很多,包括容易學習的程式語言、互動式體驗、多功能性、跨平臺、社群和資源豐富、高市場需求。此外,文章提供了設計和前端教學的相關資源連結。文章中還提到了一些與學習JavaScript相關的教學文章和影音教學資源。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News