By Tony Yang
▲ MDN
HTML (HyperText Markup Language,超文本標記語言),一種標記式語言(markup language),以標籤的形式編寫,告訴瀏覽器該如何編排網頁的元素,以呈現整個網頁。
記住,不是程式語言!!!
CSS(階層樣式表,Cascading Style Sheets),用於設計並美化整個網頁,比如說字體、顏色、大小等。
除此之外,CSS也可用於製作動畫,也可透過CSS將元素順序整個改變。
JavaScript,一種高階程式語言,透過直譯器來執行的物件導向、動態型別的語言。
廣泛用於各種網頁之中,許多與使用者互動或是與伺服器進行資料傳輸都是JS來負責。
也可用於伺服器端軟體開發,如 Node.js。
雖然名字都有Java,但是兩者天差地遠!
透過各種標籤(tag)組合成元素(element),並透過各個元素的組合進而構成一個網頁。
由起始標籤(Opening tag)、內容(Content)及結束標籤(Closing tag)所組成。
沒有結束標籤的元素,也沒有內容。
常見的空元素: <br>、<img>、<link>、<meta>
你可以在一個元素裡面放入其他元素,這稱為"巢狀"。
其中最晚建立的元素,要最早被關閉。
<p>My cat is <strong>grumpy.</strong></p>
Ex:
<p>My cat is <strong>grumpy.</p></strong>
以下是錯誤的示範:
寫在標籤之中,用於對元素增加一些額外資訊。
整個屬性由數個項目組成:
屬性值需用雙引號 " 包起來,並透過等號 = 來分隔名稱與值。
id在整個網頁中應該是獨一無二的!
用空格區分各個class名稱
<p class="text">My class is "text"!</p>
<p class="blue text">My classes are "blue" and "text"!</p>
最基本的網頁由下列幾個元素組成:
<head>通常在網頁的最前頭,網頁的 metadata 會寫在這裡,並不會直接顯示在使用者畫面上。
<head>
<meta charset="utf-8">
<title>Page Title</title>
<link rel="stylesheet" href="./style.css">
<style>
p {
color:red;
}
</style>
</head>
使用者會看到的東西都在這裡面。
<h1>我最大</h1>
<h2>我次等</h2>
<h3>我更小</h3>
<h4>又更小</h4>
<h5>再小些</h5>
<h6>我最小</h6>
Code:
效果:
段落元素,用於放文字等。
連結,其中有幾個屬性:
用於換行,因為在HTML中,空白和 enter 鍵不會被顯示
是空元素,不用結束標籤!
沒有排序的清單,會有一個小圓點在項目前方。
有排序的清單,會是 1. 2. 3. .... 這樣的東西在項目前方,而不是小圓點。
<ul>
<li>ITEM</li>
<li>ITEM</li>
<li>ITEM</li>
<li>ITEM</li>
<li>ITEM</li>
</ul>
<ol>
<li>ITEM</li>
<li>ITEM</li>
<li>ITEM</li>
<li>ITEM</li>
<li>ITEM</li>
</ol>
*每個項目都要在<li>裡!
是空元素,不用結束標籤!
註釋只是用來提醒開發者的,並不會對網頁造成任何影響。
<!-- 我只是段註釋 -->
CSS可以為網頁增添許多色彩,還能夠讓各個元素加上動畫!
底下是一組CSS規則,由幾個部分所組成:
每個宣告最後都要加上分號 ;
才不會造成錯誤!
<head>
<link rel="stylesheet" href="./style.css">
</head>
<head>
<style>
p {
color: red;
}
</style>
</head>
<p style="color:red;">我是紅色的</p>
透過元素名稱來選擇。
透過元素的Class來選擇。
透過元素的ID來選擇。
p {
color: red;
}
a {
color: orange;
}
img {
width: 200px;
}
/* 這會選到class中有text的元素 */
.text {
border: 1px solid black;
}
.logo {
width: 500px;
}
/* 這會選到class中有blue和text的元素 */
.blue.text {
color: blue;
}
#menu {
color: white;
}
#my-avatar {
height: 200px;
width: 200px;
}
#enemy {
color: red;
border: 1px solid black;
}
background 就是背景的意思,用 background 來替換元素的背景(一般是透明)
這裡只教用 background-color 來改變背景的顏色
p {
background-color: yellow;
}
結果:
這會做出一個寬度 2px、樣式 solid、顏色紅色的邊框。
就像這樣:
p {
border: 2px solid red;
}
其他的樣式可以參考這邊 >
CSS 除了親自玩,沒有更快的學法了
<body>
<!-- some HTML here -->
<script src="./script.js"></script>
<body>
</body>
<script>
alert("hi");
</script>
</body>
通常我們會把script放在body的最後面
JavaScript 的基礎語法基本上和C++差不多,只有些許差異而已。
同樣的 在每行程式的後方也要加上分號 ; 。
不過由於 JavaScript 是一門動態型別的語言,因此在指定變數時並不需要同時指定型別!
var a = 1; // typeof(a) == "number"
var b = 1.0; // typeof(b) == "number"
var c = "1"; // typeof(c) == "string"
var d = true; // typeof(d) == "boolean"
var e; // 僅創造變數,而不先賦值
var arr = [1,2,3,4,5,6,7,8,9];
arr[0] // 1
arr[1] // 2
arr[2] // 3
....
arr[8] // 9
不需要先指定陣列的大小。
if (condition) {
// do something
} else if (condition) {
// do something
} else {
// do something
}
// just like C++
for (index = 0; index < value; index++) {
// do something
}
// Just like C++
while (condition) {
// do something
}
do {
// do something
} while (condition);
// Just like C++
switch (key) {
case value:
break;
default:
break;
}
// Just like C++
function name() {
// do something
}
function name(text) { // 傳入參數
// do something
return text; // 回傳
}
不像C++,這裡不用指定回傳的型別。
DOM 提供了開發者一個介面對網頁元素進行存取。
將整個網頁解析成一棵樹,其中document為根節點(root),而每個元素則是一個節點(node)。
而透過每個節點提供的屬性和方法,
你就能對網頁元素進行操作。
querySelector() 要傳入的是 CSS Selector 的敘述,因此你不需要像剛剛那樣因為選擇方式的不同,而使用不同函式。
querySelectorAll() 會回傳一個 NodeList,包含所有符合的元素。
<body>
<p>我是原來的我</p>
<script>
document.querySelector('p').innerHTML = "我被JavaScript變更了!";
</script>
</body>
現在,你選到元素了。 透過innerHTML 這個屬性來改變內容!
如果你用了querySelectorAll(),會回傳NodeList。
<body>
<p>我是一個p元素</p>
<p>我是一個p元素</p>
<p>我是一個p元素</p>
<p>我是一個p元素</p>
<p>我是一個p元素</p>
<p>我是一個p元素</p>
<p>我是一個p元素</p>
<p>我是一個p元素</p>
<p>我是一個p元素</p>
<script>
pElements = document.querySelectorAll('p');
console.log(pElements);
</script>
</body>
NodeList 是類似 array 的物件,可用存取陣列的方式來選取元素。
也可以透過 array 的 forEach() 方法來對所有元素進行處理。
elements = document.querySelectorAll('p');
elements.forEach(function(ele) { // 匿名函式
ele.innerHTML = "我們都被變更了!";
});
// for ... of
for (let ele of elements) {
ele.innerHTML = "我們都被變更了!";
}
所謂事件(Event),在使用者做了一些行為時會被觸發(例如click、keydown 等)。
透過 Event Listener,在使用者觸發事件時,就能夠執行函式以進行處理,而不需要自己透過 while 監聽。
而這個函式我們稱作 handler。
<body>
<p>按我</p>
<script>
p = document.querySelector('p');
p.addEventListner('click',function(){
alert("hi");
});
</script>
</body>
這樣在按下<p>時就會執行 alert()。
https://slides.com/t510599/wd/