# Html Pug - Basic
###### tags: `HTML-CSS`
## 一 . 功用與基本語法
### (一) . 介紹
### (二) . 基本語法
- $pug\ cli$ : cli介面,將pug檔轉為html。
1. 安裝 : ```npm install -g pug-cli```。
2. 使用 : 常用三個參數,```-w -o -P```。
- ```-w``` : 表示wacth,為監聽某個folder下的pug檔。
- ```-o``` : 表示output,為監聽某個pug檔改變時,同時新生成html並存放於folder下。
- ```-P``` : 表示生成的html檔必須分隔明確。
```
$ pug -w './pug檔的folder' -o '輸出html檔的folder' -P
```
- 基本語法 :
1. 用tab分割巢狀結構 : 似python。
2. 不用end tag。
3. tag和tagContent用空白分割。
4. 註解使用```//```即可。
```pug=
doctype html
html
head
body
p test content
```
```htmlembedded=
<!DOCTYPE html>
<html>
<head></head>
<body>
<p>test content</p>
</body>
</html>
```
- 多重textContent :
1. 直接在tag下加入換行內容會直接變成一個新的tag。
3. 語法 :在tag尾巴加上『.』符號。
```pug=
html
head
body
p.
Test
Content
p Other Content
```
```htmlembedded=
<!DOCTYPE html>
<html>
<head></head>
<body>
<p>
Test
Content
</p>
<p>Other Content</p>
</body>
</html>
```
- ```id class```屬性 : 用selector宣告
1. ```id``` : 可以直接使用『#idName』在tag後面。
2. ```class``` : 可以直接使用『.className』在tag後面。
3. 使用多重內容時,注意必須在最後一個位置加入『.』。
```pug=
doctype html
html
head
body
p.Test-Class.
Test
Content
p#Test-id.Test-Class Other Content
```
### (三) . CSS Attribute 寫法
- ```CSS```屬性 :
1. 語法 : 加入```()```緊接在tag後面,```()```內的CSS寫法同原生。
2. 多行屬性時,直接分行即可,但要在同一個()內。
```pug=
input(
type= 'checkbox'
name= 'agreement'
)
```
- 使用JS :
1. 可以在()中加入{}包住的JS expression。
2. 可以用```-```後加入加入JS的expression,僅限單行。
3. 也可以併用,達到條件判斷。
```pug=
input(
type='text'
name='user'
class={5>2 ? 'Test-01' : 'Test-02'}
)
-- const Test=['Test-01', 'Test-02']
input(
type='password'
class={7>3 ? Test[0] : Test[1]}
)
```
- JS物件綁定 :
1. 單一屬性 : 可以用JS物件組成的key-value pair指定固定的屬性。
2. 全部屬性 : key-value變成Html-attribute to value,再用```&attribute=value```設定。
```pug=
- const Test={color:'red', background-color: 'black' }
- const Test01={href:'http://localhost3030', alt="test"}
p(
style=Test
)
a&attribute=Test01
```
### (四) . 使用CSS style
- inline的CSS : 同上,用```()```包住一切的東東。
- head的style : 同一般的tag,用style包住,注意要加入『.』表示多重內文。
- include CSS : 視link tag為另一個tag,並包住其屬性。
```pug=
head
link(rel='stylesheet' href='./style.css')
style.
Test{
color : red
}
```
## 二 . 常用樣板語法
### (一) . for
- for的語法 :
1. 宣告迴圈 : 打上```for iterVar in iterableThing```。
2. 使用方法 : loop visited一個可迭代的陣列,下面tag要空一個tab。
3. 指定變數 : 再loop後的tag加上『=』並使用JS expression。
```htmlembedded=
for n in ['Test-01', 'Test-03', 'Test-03']
p=n
```
- for的其它用法 :
1. 讀取index值:可以在in前面加入兩個變數,第二個代表index值。
2. 迭代object的key-value : in前面變數代表變為value-key。
```htmlembedded=
for n, i in ['Test-01', 'Test-03', 'Test-03']
p=i+'-'+n
for value, key in {name:'Steven', age: 20}
p=key+'-'+value
```
### (二) . if 和 switch
- if的語法 :
1. 宣告判斷式 : 打上```if(空格)JS expression```
2. 使用方法 : 再加上else或else if於同一個tab層。
- case的語法 :
1. 宣告case : 用case代表常用的switch,用when代替常用的case。
3. 不用加上break : 只有在需要空白內容時,才加入break。
4. 可以用『:』變成block語法。
```htmlpug=
- const
```
### (三) . include 宣告