實在是受不了 adobe dreamweaver 的肥大,每次只要想將 html 製作共用的模時,就覺得開啟很慢,而在同步時也很慢。

在正好在研究 mac 軟體 Prepros 時發現有Pug(jade)、Haml、Slim 支援樣板引擎的格式,在找了一些相關的文章後發現 Pug(jade) 比較如我所想要的,正好梅干也有相關的文章(真的是太有緣了,我想真的有機會就拜為師)。


1-Jade基本寫法

See the Pen Jade基本規則 by Jimmy_Wu (@Jimmy_Wu) on CodePen.

1-1-屬性(Attributes)

標籤特性看起來與 html(有額外逗號)相似,但它們的值都只是普通的 JavaScript。

有很多屬性,可以把它們分成多行

不轉義特性(Unescaped Attributes)

Class 實字(Class Literal)
類別可以使用 .className 語法來定義

Style 特性(Style Attributes)

Class 特性(Class Attributes)
class 特性可以是字串(就像任何普通的特性),但它也可以是 class 名稱的陣列,在從 JavaScript 產生時很方便

ID 實字(ID Literal)
ID 可以使用 #IDName 語法來定義

&attributes
讀作 “and attributes”, &attributes 語法可用來分解物件成元素的特性。

1-2-程式碼 (code)

jade 三種類型的 code

第一種:無緩衝程式碼(Unbuffered Code)

這種類型的 code 以一個中橫線 - 開頭,不會直接輸出

第二種:緩衝程式碼 (Buffered Code)

此類型的 code 以一個等號 = 開頭;為了安全, jade 會將 html 代碼進行轉義

也可以把 = 及後面的文本與 tag 放在同一行

第三種:無轉義緩衝的程式碼(Unescaped Buffered Code)

此類型的 code 以一個嘆號加一個等號 != 開頭,而且 jade 不會轉義 html 代碼;
如果是變量,可以寫成 !{var} 作用於 #{val},只是不轉義;

1-3-註解/註釋 (comments)

單行註解

jade 使用雙斜線 // 進行單行註釋;
如果不想讓註釋的內容顯示到生成的 html 代碼中,可以在雙斜線後跟一個單橫線 //-

區塊註解 (Block Comments)

雙斜線 // 後面的註釋內容換行並縮進可進行塊級註釋;

條件式註解 (Conditional Comments)

Jade 沒有任何針對條件式註解的特殊語法。 如果你的一行以 < 開頭,那它會被視為純文本。 所以就使用普通的 HTML 風格條件式註解
條件註釋,只有在 IE10,及以下的 IE瀏覽器才支持,jade中的條件註釋沒有特別的語法,而是直接採用一般的 html 條件註釋

1-4-doctype

html5
jade:doctype html
html: <!DOCTYPE html>

xml
jade:doctype xml
html: <?xml version="1.0" encoding="utf-8" ?>

strict
jade:doctype strict
html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

1-5-純文本(Plain Text)

方式一:管線文本 (Piped Text)
Piped Text 在文本的開頭使用管道符 |

方式二:在 Tag 中的內嵌 (Inline in a Tag)
文本與 tag 放到同一行

方式三:適合有大量文本 (Block in a Tag)
在 tag 後使用一個點號 ., tag 與 .之間不能有空格

1-6-迭代(Iteration)

主要的迭代方法, eachwhile
each

See the Pen jade 迭代(Iteration)-each by Jimmy_Wu (@Jimmy_Wu) on CodePen.


另外 each .. in 的用法

while

1-1-5-過濾器 (filters)

過濾器,語法是一個前置的冒號 : 加上過濾器的名稱;
jade 支持的過濾器有如下幾種:

  • :stylus 必須已安裝 stylus
  • :less 必須已安裝 less.js
  • :markdown 必須已安裝 markdown-js 或 node-discount
  • :cdate
  • :coffeescript 必須已安裝 coffee-script

2-Jade 模版實際運用

2-2-Jade Extend (繼承)

像 Dreamweaver 網頁模版的概念,透過已製作好的模版後 (檔案 tpl.jade),再針對模版 (檔案 tpl.jade) 修改裡面的元素與內容,替換原模版 (檔案 tpl.jade)的區塊 (檔案 extends.jade),。
在製作模版時,當可替換的元素,則用 block 標示, block 後接替換區塊的命名,例如: block webtitle,但注意替換區塊的命名後更換的元素區塊要在退位。

tpl.jade

extends.jade

修改的繼承(Extends)檔案,註解要使用 //- 註解內容 才能正確註解起來,若使用 //註解內容 (JS的註解) 的話,輸出 html 檔案會產生 <!-- 註解內容 -->

2-2-Jade Includes (匯入)

匯入這功能,就像一般的php或是apsx一樣,可以將內容直接匯入進來,就像拷貝貼上一樣,而這以前大部分都用iframe來製作,但現有了匯入後,就能將版型拆成多隻後,再把它合併起來,因此當要修改時就更方便了。

2-3-Jade 混入(mixins)

使用 mixin 可以創建可重用的代碼塊

minxin = mixinName,調用的時候直接 +mixinName

上層元素下接續結構

使用的時候,還可以給 mixin 定義參數,當作一個函數來使用

Mixin Blocks

mixin 也可以使用像 include 那樣的塊

Mixin Attributes


3-模版功能與區塊元件化使用注意事項

  1. Jade 的 Extends (繼承) 製做出來的模版,無法直接使用 Includes (匯入) 在模版內混用。
  2. 套用 Extends (繼承) 模版路徑的 jade 檔, block 區塊名稱 沒有在下方加入內容的話,是直接取用模版內的內容與架,但如果有使用要取代模版內區塊內的內容與架構,可以在 block 區塊名稱 下方接著帶入內容與架構就可以取代。
  3. 注意 Extends (繼承) 進來的空白鍵或是 Tab 鍵字元階層,如果沒包在下層的話,會無法帶入或是取代模版內容與架構。

tpl.jade

include footer.jade 的內容

extends.jade


4-Jade除錯與注意事項

在退為鍵使用上要注意,如果主要使用 Tab 鍵來退位的話,在檔案中就都要使用 TAB 退位來控制,若如果使用空白鍵退位的話,就全用空白鍵,如果混用的話輸出到 html 檔時會發生錯誤無法輸出成功。

線上直接轉換


資料來源

Jade-正體中文文件-語言參考
梅問題教學網-JADE基本使用教學:規則、文字、繼承、匯入、函式寫法
Baking Bootstrap Snippets with Jade
Jade樣板引擎入門(1)-基本概念與用法
JAYIER’S WEB-NOTES – Jade中文教程