整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          前端工程師必須遵守的高質(zhì)量的前端代碼規(guī)范,你寫(xiě)代碼是這樣做嗎?

          、唯一定律

          無(wú)論有多少人共同參與同一項(xiàng)目,一定要確保每一行代碼都像是唯一個(gè)人編寫(xiě)的。

          2.2 Example

          四、語(yǔ)言屬性

          五、IE 兼容模式

          IE 支持通過(guò)特定的 <meta> 標(biāo)簽來(lái)確定繪制當(dāng)前頁(yè)面所應(yīng)該采用的 IE 版本。除非有強(qiáng)烈的特殊需求,否則最好是設(shè)置為 edge mode,從而通知 IE 采用其所支持的最新的模式。

          六、字符編碼

          八、實(shí)用為王

          盡量遵循 HTML 標(biāo)準(zhǔn)和語(yǔ)義,但是不要以犧牲實(shí)用性為代價(jià)。任何時(shí)候都要盡量使用最少的標(biāo)簽并保持最小的復(fù)雜度。

          九、屬性順序

          9.1 從大到小

          HTML 屬性應(yīng)當(dāng)按照以下給出的順序依次排列,確保代碼的易讀性。

          (1)class

          (2)id, name

          (3)data-*

          (4)src, for, type, href, value

          (5)title, alt

          (6)role, aria-*

          十、布爾(boolean)型屬性

          10.1 注意

          (1)布爾型屬性可以在聲明時(shí)不賦值。XHTML 規(guī)范要求為其賦值,但是 HTML5 規(guī)范不需要。

          (2)元素的布爾型屬性如果有值,就是 true,如果沒(méi)有值,就是 false。

          十一、減少標(biāo)簽的數(shù)量

          02

          編寫(xiě)靈活、穩(wěn)定、高質(zhì)量的CSS代碼的規(guī)范

          一、語(yǔ)法

          1.1 注意

          (1)用兩個(gè)空格來(lái)代替制表符(tab) -- 這是唯一能保證在所有環(huán)境下獲得一致展現(xiàn)的方法。

          (2)為選擇器分組時(shí),將單獨(dú)的選擇器單獨(dú)放在一行。

          (3)為了代碼的易讀性,在每個(gè)聲明塊的左花括號(hào)前添加一個(gè)空格。

          (4)聲明塊的右花括號(hào)應(yīng)當(dāng)單獨(dú)成行。

          (5)每條聲明語(yǔ)句之后應(yīng)該插入一個(gè)空格。

          (6)為了獲得更準(zhǔn)確的錯(cuò)誤報(bào)告,每條聲明都應(yīng)該獨(dú)占一行。

          (7)所有聲明語(yǔ)句都應(yīng)當(dāng)以分號(hào)結(jié)尾。最后一條聲明語(yǔ)句后面的分號(hào)是可選的,但是,如果省略這個(gè)分號(hào),你的代碼可能更易出錯(cuò)。

          (8)對(duì)于以逗號(hào)分隔的屬性值,每個(gè)逗號(hào)后面都應(yīng)該插入一個(gè)空格(例如 ,box-shadow)。

          (9)不要在 rgb()、rgba()、hsl()、hsla() 或 rect() 值的內(nèi)部的逗號(hào)后面插入空格。這樣利于從多個(gè)屬性值(既加逗號(hào)也加空格)中區(qū)分多個(gè)顏色值(只加逗號(hào),不加空格)。

          (1)由于定位(positioning)可以從正常的文檔流中移除元素,并且還能覆蓋盒模型(box model)相關(guān)的樣式,因此排在首位。

          (2)盒模型排在第二位,因?yàn)樗鼪Q定了組件的尺寸和位置。

          (3)其他屬性只是影響組件的內(nèi)部(inside)或者是不影響前兩組屬性,因此排在后面。

          2.3 Example

          三、不要使用 @import

          (1)使用多個(gè) <link> 元素

          (2)通過(guò) Sass 或 Less 類(lèi)似的 CSS 預(yù)處理器將多個(gè) CSS 文件編譯為一個(gè)文件

          (3)通過(guò) Rails、Jekyll 或其他系統(tǒng)中提供過(guò) CSS 文件合并功能

          四、媒體查詢(xún)(Media query)的位置

          五、帶前綴的屬性

          這樣做的關(guān)鍵因素是為了錯(cuò)誤檢測(cè) -- 例如,CSS 校驗(yàn)器指出在 100 行有語(yǔ)法錯(cuò)誤。如果是單行單條聲明,你就不會(huì)忽略這個(gè)錯(cuò)誤;如果是單行多條聲明的話,你就要仔細(xì)分析避免漏掉錯(cuò)誤了。

          七、簡(jiǎn)寫(xiě)形式的屬性聲明

          7.1 濫用簡(jiǎn)寫(xiě)

          在需要顯示地設(shè)置所有值的情況下,應(yīng)當(dāng)盡量限制使用簡(jiǎn)寫(xiě)形式的屬性聲明。常見(jiàn)的濫用簡(jiǎn)寫(xiě)屬性聲明的情況如下:

          (1)padding

          (2)margin

          (3)font

          (4)background

          heading 元素只需要設(shè)置上、下邊距(margin)的值,因此,在必要的時(shí)候,只需覆蓋這兩個(gè)值就可以。過(guò)度使用簡(jiǎn)寫(xiě)形式的屬性聲明會(huì)導(dǎo)致代碼混亂,并且會(huì)對(duì)屬性值帶來(lái)不必要的覆蓋從而引起意外的副作用。

          八、Less 和 Sass 中的嵌套

          十、注釋

          10.1 注意

          代碼是由人編寫(xiě)并維護(hù)的。請(qǐng)確保你的代碼能夠自描述、注釋良好并且易于他人理解。好的代碼注釋能夠傳達(dá)上下文關(guān)系和代碼目的。不要簡(jiǎn)單地重申組件或 class 名稱(chēng)。

          十一、class 命名

          11.1 規(guī)范

          (1)class 名稱(chēng)中只能出現(xiàn)小寫(xiě)字符和破折號(hào)(dashe)(不是下劃線,也不是駝峰命名法)。破折號(hào)應(yīng)當(dāng)用于相關(guān) class 的命名(類(lèi)似于命名空間)(例如,.btn 和 .btn-danger)。

          (2)避免過(guò)度任意的簡(jiǎn)寫(xiě)。.btn 代表 button,但是 .s 不能表達(dá)任何意思。

          (3)class 名稱(chēng)應(yīng)當(dāng)盡可能短,并且意義明確。

          (4)使用有意義的名稱(chēng)。使用有組織的或目的明確的名稱(chēng),不要使用表現(xiàn)形式(presentational)的名稱(chēng)。

          (5)基于最近的父 class 或基本(base) class 作為新 class 的前綴。

          (6)使用 .js-* class 來(lái)標(biāo)識(shí)行為(與樣式相對(duì)),并且不要將這些 class 包含到 CSS 文件中。

          在為 Sass 和 Less 變量命名時(shí)也可以參考上面列出的各項(xiàng)規(guī)范。

          十二、選擇器

          12.1 注意

          (1)對(duì)于通用元素使用 class ,這樣利于渲染性能的優(yōu)化。

          (2)對(duì)于經(jīng)常出現(xiàn)的組件,避免使用屬性選擇器(例如,[class^="..."])。瀏覽器的性能會(huì)受到這些因素的影響。

          (3)選擇器要盡可能短,并且盡量限制組成選擇器的元素個(gè)數(shù),建議不要超過(guò) 3 。

          (4)只有在必要的時(shí)候才將 class 限制在最近的父元素內(nèi)(也就是后代選擇器)(例如,不使用帶前綴的 class 時(shí) -- 前綴類(lèi)似于命名空間)。

          十三、代碼組織

          13.1 注意

          (1)以組件為單位組織代碼段。

          (2)制定一致的注釋規(guī)范。

          (3)使用一致的空白符將代碼分隔成塊,這樣利于掃描較大的文檔。

          有技術(shù)問(wèn)題私信小編:666

          ×00 簡(jiǎn)介

          0×01 解碼過(guò)程總述

          0×02 瀏覽器中的詞法分析

          0×03 HTML編碼與HTML解析

          0×04 常見(jiàn)誤區(qū)

          0×05 瀏覽器有趣的容錯(cuò)行為

          0×06 結(jié)語(yǔ)

          *原創(chuàng)作者:VillanCh

          0×00 簡(jiǎn)介

          編碼問(wèn)題一直是一個(gè)痛點(diǎn),在wooyun有一篇XSS編碼的文章,講到一些痛點(diǎn),既然準(zhǔn)備再次完成一篇對(duì)XSS中的編碼講解,同時(shí)也對(duì)得起這個(gè)文章的名字,本文就比較系統(tǒng)的講一下瀏覽器Lexer中HTML編碼處理的問(wèn)題與XSS的html編碼原理剖析。

          0×01 解碼過(guò)程總述

          在開(kāi)始XSS之前,我們?nèi)绻磺宄幋a解碼的過(guò)程,將會(huì)對(duì)XSS造成非常大的困難,不懂得編碼而亂插一氣,如果你是自動(dòng)化工具還好但是如果你是手動(dòng)XSS,那么你可就遭殃了,運(yùn)氣好做出來(lái),運(yùn)氣不好就怎么樣也解決不了編碼問(wèn)題了。

          了解編碼過(guò)程首先從瀏覽器解析來(lái)講吧

          對(duì)瀏覽器解析HTML有過(guò)了解的同學(xué),肯定是清楚瀏覽的的這些工具原理,一般來(lái)講瀏覽器通過(guò)Lexer-Parser來(lái)解析生成Dom樹(shù)然后再對(duì)CSS元素進(jìn)行渲染,最后執(zhí)行javascript(瀏覽器腳本),但是為什么要講這一部分呢?原因就是這和解碼的順序是有關(guān)系的!

          舉一個(gè)簡(jiǎn)單的例子吧:在HTML(非XHTML)環(huán)境下如果你的xss輸出點(diǎn)在<script>標(biāo)簽內(nèi),你采用了HTML實(shí)體編碼的形式,怎么可能觸發(fā)XSS漏洞呢?如果你不懂這個(gè)問(wèn)題,也許你會(huì)做很多無(wú)用功。

          0×02 瀏覽器中的詞法分析

          熟悉編譯原理的讀者可以自由選擇快速略過(guò)第一第二段或者短暫復(fù)習(xí)一下。

          關(guān)于一個(gè)計(jì)算機(jī)工作人員是否需要學(xué)習(xí)編譯原理這個(gè)話題,我相信大家各持己見(jiàn)。但是我相信如果你是要做一個(gè)優(yōu)秀的程序員或者是IT工作者,編譯原理不一定要精通,但是至少應(yīng)該有所了解,限于篇幅的原因,我并不打算在這里講太多的編譯原理的只是簡(jiǎn)單提及一下讓大家知道編譯原理到底是干什么的,在瀏覽器中是怎么被應(yīng)用的。

          Parser-Lexer Combination(解析器-詞法分析器)

          這個(gè)結(jié)構(gòu)負(fù)責(zé)對(duì)html文檔進(jìn)行解析,解析的過(guò)程分為兩個(gè)過(guò)程:詞法分析和語(yǔ)法分析

          本部分,主要講詞法分析部分

          詞法分析就是將輸入的句子(語(yǔ)句,內(nèi)容)分解為有順序的單詞和符號(hào):具體例子就是如果輸入1+2-3,那么經(jīng)過(guò)詞法分析,就應(yīng)該按順序得到五個(gè)token:分別是1(int),+(option),2(int),-(option),3(int)。然后得到的結(jié)果交給語(yǔ)法分析進(jìn)行上下文無(wú)關(guān)語(yǔ)法判別。

          如果有興趣了解如何實(shí)現(xiàn)詞法分析,可以參考編譯原理及實(shí)踐這本書(shū)。

          那么在瀏覽器中,詞法分析的特性還是值得注意的,例如,它會(huì)自動(dòng)跳過(guò)HTML中的空格和換行或者制表符,這樣也就是有些條件下僅僅是多個(gè)空格或者換行符制表符就能起到過(guò)waf,的原理了,(但是現(xiàn)在這種bypass方法已經(jīng)很out了)。除此之外呢,在詞法分析中,也許還會(huì)忽略注釋部分,那么大家是不是又有一些想法了呢?那么,我們結(jié)合以前XSS的經(jīng)驗(yàn),筆者結(jié)合符號(hào)算法的簡(jiǎn)單敘述,大家可以理解檢測(cè)一下自己的猜測(cè)是不是正確。

          眾所周知,我們的瀏覽器解析html時(shí),是把

          <img src = 1/>

          這個(gè)標(biāo)簽解析成

          <

          img

          src

          =

          1

          /

          >

          這六個(gè)符號(hào)(token)的。

          那么僅僅就是這么簡(jiǎn)單么?答案當(dāng)然是否定的。

          解析過(guò)程簡(jiǎn)單例子:

          1. 在解析<這個(gè)符號(hào)以前,狀態(tài)是Data State

          2. 然后解析到<的時(shí)候,解析狀態(tài)變?yōu)門(mén)ag open state,然后開(kāi)始搜尋標(biāo)簽名,(在搜尋標(biāo)簽名的時(shí)候,我們要思考一個(gè)問(wèn)題,<和標(biāo)簽名img并不是同一個(gè)token,他們顯然是分別進(jìn)行解析的,那么有沒(méi)有可能忽略掉<和img之間的空格或者換行什么的?這個(gè)問(wèn)題,我相信很好找到答案。)

          3. 找到標(biāo)簽名,狀態(tài)變?yōu)門(mén)ag name state,這個(gè)狀態(tài)就表示已經(jīng)識(shí)別了標(biāo)簽名,

          4. 然后知道讀取到最近的一個(gè)>時(shí),結(jié)束tag name state的狀態(tài),重新進(jìn)入Data State。

          如果嵌套有標(biāo)簽的話重復(fù)上述解析步驟,關(guān)于</body>的部分,大同小異,只不過(guò)/符號(hào)會(huì)創(chuàng)建一個(gè)閉合標(biāo)簽的標(biāo)識(shí),來(lái)表示一個(gè)標(biāo)簽的閉合。

          但是!我要說(shuō)的是但是!這個(gè)解析過(guò)程是相當(dāng)松散的。因?yàn)镠TML的歷史原因,導(dǎo)致HTML的模式千奇百怪,錯(cuò)誤頻繁出現(xiàn),開(kāi)發(fā)者程序員的水平參差不齊,HTML的不規(guī)范的特性。這個(gè)解析過(guò)程注定是相當(dāng)復(fù)雜的。舉個(gè)最簡(jiǎn)單的例子。

          <img src=x onerror=alert(1)>

          你覺(jué)得這個(gè)元素可以被識(shí)別么?能彈窗么?既然這么問(wèn),那么答案肯定是肯定的。

          <img src=http://pic.com/pic.jpg>

          如果http://pic.com/pic.jpg這個(gè)圖片真實(shí)存在,那么,這個(gè)沒(méi)有引號(hào)的標(biāo)簽可以被識(shí)別么?

          除此之外,還有很多很多的神奇的trick值得去探索。

          0×03 HTML編碼與HTML解析

          HTML實(shí)體編碼的出現(xiàn),解決了一個(gè)問(wèn)題,例如<和>這兩個(gè)符號(hào)在HTML文檔中出現(xiàn)是非常不安全的,因?yàn)檫@標(biāo)志著標(biāo)簽的開(kāi)始和結(jié)束,為了安全使用這些保留字符。開(kāi)發(fā)人員使用了一套叫實(shí)體編碼的編碼策略,這類(lèi)編碼以&開(kāi)頭,以分號(hào);結(jié)尾。

          但是結(jié)合0×02的知識(shí)我們可以猜測(cè),以“;”為分割符,在實(shí)際的處理中,由于瀏覽器解析器高度的容錯(cuò)性,所有的可以成為分割符的符號(hào)放在結(jié)尾代替;當(dāng)然有可能可以正確分隔,那么這也就是著名的一個(gè)trick:HTML實(shí)體編碼最后的;可以省略,這就是原理所在。好,我們,接著講HTML實(shí)體編碼的一些有趣的東西。

          在HTML編碼,中大家都知道一個(gè)應(yīng)該寫(xiě)為“&#數(shù)字”或者“&#x十六進(jìn)制”,但是不為人知的可能就是后面的數(shù)字可以寫(xiě)成Unicode,曾經(jīng)有點(diǎn)蛋疼的時(shí)候,筆者把所有的unicode字符用&#編碼的形式打了出來(lái),看了一下有沒(méi)有什么有趣的符號(hào)。在《web之困》中,作者就舉例了一個(gè)有趣的符號(hào):

          那么讀者要問(wèn)了,這個(gè)東西講的有什么意思呢?那么接下來(lái)就要說(shuō)一些很明確的,也是很多有誤區(qū)的地方:HTML在哪里可以解析?整個(gè)HTML的文檔下都可以解析么?

          得明確地講:HTML編碼要在Data state(標(biāo)簽外部和標(biāo)簽的text段)和標(biāo)簽內(nèi)的屬性值的位置解析,但是直接注意的是在特殊模式(這個(gè)問(wèn)題將在下一段中解釋?zhuān)┫拢词故窃贒ata state下,HTML編碼也照樣不會(huì)被解析。在0×02中,我們知道解析到HTML解析過(guò)程中,在遇到一對(duì)<和>的解析過(guò)程中,都是Tagname/open/close state,在這三個(gè)狀態(tài)中,HTML編碼也是不會(huì)被解碼的,也就意味著解析到標(biāo)簽屬性的值的時(shí)候自動(dòng)切換進(jìn)了Data State,這些都是符合我們正確認(rèn)知的。

          接下來(lái)我們來(lái)舉例(以Firefox為例):

          看到下面的標(biāo)簽,有讀者就要問(wèn)為什么沒(méi)有反斜杠?很簡(jiǎn)單啊,瀏覽器識(shí)別一個(gè)標(biāo)簽我們?cè)?×02部分講到的,只需要<作為標(biāo)簽的開(kāi)始,并且>作為標(biāo)簽的結(jié)束,所以不一定需要有</tagname>,在HTML解析條件下也可以識(shí)別標(biāo)簽

          我們?cè)谟浭卤局休斎脒@六個(gè)標(biāo)簽,讀者可以來(lái)猜一下哪些可以彈窗,哪些不能?

          很顯然第一第二是完全可以的。

          第三個(gè)沒(méi)有明顯寫(xiě)明邊界,實(shí)際上這個(gè)和第二個(gè)的邊界處理是一樣的,默認(rèn)了邊界,(我們可以姑且認(rèn)為=和>是獨(dú)立的token,那么也就是說(shuō)即使不用單引號(hào)或者雙引號(hào)或者反引號(hào)照樣可以起到邊界的作用,事實(shí)上卻是如此)

          第四個(gè)人為加上了邊界,所以當(dāng)然是可以的,

          第五個(gè)&#34就是引號(hào),這里的引號(hào)在數(shù)據(jù)區(qū),也就相當(dāng)于onerror=”’ alert(1)’”

          第六個(gè),我們知道在非Data state段是不會(huì)HTML編碼解碼的,所以第六個(gè)破壞了屬性的結(jié)構(gòu)。

          特殊模式:<style><script><textarea><xmp>這四個(gè)標(biāo)簽的text段按理說(shuō)也是Data state但是沒(méi)辦法進(jìn)行HTML編碼的解析,原因就是他們處于特殊模式,在這個(gè)模式中,相當(dāng)于是啟動(dòng)了別的解析器,也就是為了處理別的代碼或者特定文本,關(guān)閉了HTML編碼的解析。

          接下來(lái)我們嘗試一下HTML到底能不能在<script>中解析:

          大家看到了,源碼是這樣的,顯然是沒(méi)有辦法解析HTML編碼的。

          作為對(duì)比我們?cè)倏匆幌孪旅娴那闆r

          這樣我們就發(fā)現(xiàn)了普通條件下的在標(biāo)簽的text段的確是發(fā)生了HTML編碼的解析。

          0×04 常見(jiàn)誤區(qū)

          我既然寫(xiě)在普通的Data State段,而且提示也提示出了<script>alert(1)<script>但是為什么不會(huì)彈框呢?可能有讀者還是會(huì)有這個(gè)問(wèn)題。

          這里需要提醒大家的是:HTML編碼(HTML實(shí)體編碼)的出現(xiàn),是為了防止保留符號(hào)與顯示字符的沖突。

          那么我們解析原因就很簡(jiǎn)單了:也就是說(shuō)<script>alert(1)</script>這個(gè)字符串實(shí)際上只為了顯示,而不執(zhí)行,js代碼的執(zhí)行是放在HTML編碼之后,而且必須位于可以執(zhí)行的地方對(duì)么?大家想一下,如果放在<a>標(biāo)簽內(nèi),沒(méi)人指示執(zhí)行JS代碼,而且顯示<script>alert(1)</script>這個(gè)時(shí)候HTML解析器只是把它顯示出來(lái)并不會(huì)執(zhí)行(如果讀者這里有點(diǎn)懵逼,那么請(qǐng)返回看0×01部分)。

          然后為什么標(biāo)簽屬性值的部分是可以執(zhí)行的呢?很簡(jiǎn)單,因?yàn)閛nxxxx的函數(shù)都是時(shí)間處理函數(shù),的確屬于HTML標(biāo)準(zhǔn)的屬性值,但是大家可以理解為這是JS特定函數(shù)或者特定功能的執(zhí)行入口,那么在解析的時(shí)候,首先把HTML標(biāo)簽屬性的值當(dāng)作數(shù)據(jù)解析以后(解析HTML代碼),然后交給JS引擎,然后執(zhí)行。這樣就可以得到JS的執(zhí)行結(jié)果。

          0×05 瀏覽器有趣的容錯(cuò)行為

          我們接下來(lái)還是以一個(gè)標(biāo)簽為例。來(lái)總結(jié)一下瀏覽器是有多么強(qiáng)大的容錯(cuò)性。

          對(duì)于這樣一個(gè)標(biāo)簽,我們多多少少看起來(lái)還有點(diǎn)別扭。但是經(jīng)過(guò)0×02的講解,我相信大家腦子里應(yīng)該是已經(jīng)把它分解成了很多個(gè)token,而且,可以很輕易的分辨出這個(gè)tag是完全可以正常工作的。首先我們從開(kāi)頭一點(diǎn)一點(diǎn)來(lái)解釋?zhuān)?/p>

          1. 在IE瀏覽器中,你可以在img中間加入NULL字符,而且還可以解析成功。

          2. 在img和src還有src=s和title之間的兩個(gè)邊界,你完全可以用別的符號(hào)來(lái)替換邊界

          有圖為證:

          換成\t仍然可以解析成功,也就是并不是必須用空格或者\(yùn)t的對(duì)吧。換成\n照樣可以成功:

          至于還有什么符號(hào)還可以,嗯哼,這就需要讀者自己嘗試了(什么難道你要自己一個(gè)一個(gè)試?)

          1. 大家注意我在onerror和class參數(shù)之間沒(méi)有空格或者其他分隔符,但是仍然可以執(zhí)行成功,為什么?這個(gè)問(wèn)題我在前面部分多次提到。

          2. 屬性的值的邊界應(yīng)該用什么來(lái)確定?單引號(hào),雙引號(hào),反引號(hào),還有呢?這里也是讀者可以自己動(dòng)手去嘗試的。

          0×06 結(jié)語(yǔ)

          讀者要明白,瀏覽器之間都是有差異的,尤其是IE和其他類(lèi)型的瀏覽器,那么具體的差異的內(nèi)容,大家可以fuzz一下,當(dāng)然有一些資料推薦給大家使用的:《web application obfuscation》,《web之困》。本文簡(jiǎn)單談一談HTML編碼這些問(wèn)題就已經(jīng)有了這么長(zhǎng)的篇幅。如果有機(jī)會(huì),筆者將在以后的文章中為大家講解一下其他的編碼部分(URL編碼和JS編碼)

          arkdown 基礎(chǔ)語(yǔ)法

          概述

          Markdown是一種輕量級(jí)標(biāo)記語(yǔ)言,排版語(yǔ)法簡(jiǎn)潔,讓人們更多地關(guān)注內(nèi)容本身而非排版。它使用易讀易寫(xiě)的純文本格式編寫(xiě)文檔,可與HTML混編,可導(dǎo)出 HTML、PDF 以及本身的 .md 格式的文件。因簡(jiǎn)潔、高效、易讀、易寫(xiě),Markdown被大量使用,如Github、Wikipedia、簡(jiǎn)書(shū)等。 千萬(wàn)不要被「標(biāo)記」、「語(yǔ)言」嚇到,Markdown的語(yǔ)法十分簡(jiǎn)單,常用的標(biāo)記符號(hào)不超過(guò)十個(gè),用于日常寫(xiě)作記錄綽綽有余,不到半小時(shí)就能完全掌握。 就是這十個(gè)不到的標(biāo)記符號(hào),卻能讓人優(yōu)雅地沉浸式記錄,專(zhuān)注內(nèi)容而不是糾結(jié)排版,達(dá)到「心中無(wú)塵,碼字入神」的境界。

          標(biāo)題語(yǔ)法

          要?jiǎng)?chuàng)建標(biāo)題,請(qǐng)?jiān)趩卧~或短語(yǔ)前面添加井號(hào) (#) 。# 的數(shù)量代表了標(biāo)題的級(jí)別。例如,添加三個(gè) # 表示創(chuàng)建一個(gè)三級(jí)標(biāo)題 (<h3>) (例如:### My Header)。

          Markdown語(yǔ)法

          HTML

          預(yù)覽效果

          # Heading level 1

          <h1>Heading level 1</h1>

          Heading level 1

          # Heading level 2

          <h2>Heading level 2</h2>

          Heading level 2

          # Heading level 3

          <h3>Heading level 3</h3>

          Heading level 3

          # Heading level 4

          <h4>Heading level 4</h4>

          Heading level 4

          # Heading level 5

          <h5>Heading level 5</h5>

          Heading level 5

          # Heading level 6

          <h6>Heading level 6</h6>

          Heading level 6

          可選語(yǔ)法

          還可以在文本下方添加任意數(shù)量的 == 號(hào)來(lái)標(biāo)識(shí)一級(jí)標(biāo)題,或者 -- 號(hào)來(lái)標(biāo)識(shí)二級(jí)標(biāo)題。

          Markdown語(yǔ)法

          HTML

          預(yù)覽效果

          # Heading level 1

          <h1>Heading level 1</h1>

          Heading level 1

          # Heading level 2

          <h2>Heading level 2</h2>

          Heading level 2

          不同的 Markdown 應(yīng)用程序處理 # 和標(biāo)題之間的空格方式并不一致。為了兼容考慮,請(qǐng)用一個(gè)空格在 # 和標(biāo)題之間進(jìn)行分隔。

          段落語(yǔ)法

          要?jiǎng)?chuàng)建段落,請(qǐng)使用空白行將一行或多行文本進(jìn)行分隔。

          Markdown語(yǔ)法

          HTML

          預(yù)覽效果

          I really like using Markdown.

          <p>I really like using Markdown.</p>

          I really like using Markdown.

          不要用空格(spaces)或制表符( tabs)縮進(jìn)段落。

          換行語(yǔ)法

          在一行的末尾添加兩個(gè)或多個(gè)空格,然后按回車(chē)鍵,即可創(chuàng)建一個(gè)換行(<br>)。

          Markdown語(yǔ)法

          HTML

          預(yù)覽效果

          I really like using Markdown.

          <p>I really like using Markdown.</p>

          I really like using Markdown.
          sfjlsdjflds

          換行最佳實(shí)踐

          幾乎每個(gè) Markdown 應(yīng)用程序都支持兩個(gè)或多個(gè)空格進(jìn)行換行,稱(chēng)為 結(jié)尾空格(trailing whitespace) 的方式,但這是有爭(zhēng)議的,因?yàn)楹茈y在編輯器中直接看到空格,并且很多人在每個(gè)句子后面都會(huì)有意或無(wú)意地添加兩個(gè)空格。由于這個(gè)原因,你可能要使用除結(jié)尾空格以外的其它方式來(lái)?yè)Q行。幸運(yùn)的是,幾乎每個(gè) Markdown 應(yīng)用程序都支持另一種換行方式:HTML 的
          標(biāo)簽。

          為了兼容性,請(qǐng)?jiān)谛形蔡砑印敖Y(jié)尾空格”或 HTML 的
          標(biāo)簽來(lái)實(shí)現(xiàn)換行。

          還有兩種其他方式我并不推薦使用。CommonMark 和其它幾種輕量級(jí)標(biāo)記語(yǔ)言支持在行尾添加反斜杠 () 的方式實(shí)現(xiàn)換行,但是并非所有 Markdown 應(yīng)用程序都支持此種方式,因此從兼容性的角度來(lái)看,不推薦使用。并且至少有兩種輕量級(jí)標(biāo)記語(yǔ)言支持無(wú)須在行尾添加任何內(nèi)容,只須鍵入回車(chē)鍵(return)即可實(shí)現(xiàn)換行。

          強(qiáng)調(diào)語(yǔ)法

          通過(guò)將文本設(shè)置為粗體或斜體來(lái)強(qiáng)調(diào)其重要性。

          粗體(Bold)

          要加粗文本,請(qǐng)?jiān)趩卧~或短語(yǔ)的前后各添加兩個(gè)星號(hào)(asterisks)或下劃線(underscores)。如需加粗一個(gè)單詞或短語(yǔ)的中間部分用以表示強(qiáng)調(diào)的話,請(qǐng)?jiān)谝哟植糠值膬蓚?cè)各添加兩個(gè)星號(hào)(asterisks)。

          Markdown語(yǔ)法

          HTML

          預(yù)覽效果

          I just love **bold text**.

          I just love <strong>bold text</strong>.

          I just love bold text

          I just love __bold text__.

          I just love <strong>bold text</strong>.

          I just love bold text

          Love**is**bold

          Love<strong>is</strong>bold

          Loveisbold

          粗體(Bold)用法最佳實(shí)踐 Markdown 應(yīng)用程序在如何處理單詞或短語(yǔ)中間的下劃線上并不一致。為兼容考慮,在單詞或短語(yǔ)中間部分加粗的話,請(qǐng)使用星號(hào)(*)。

          斜體(Italic)

          要用斜體顯示文本,請(qǐng)?jiān)趩卧~或短語(yǔ)前后添加一個(gè)星號(hào)(*)或下劃線(_)。要斜體突出單詞的中間部分,請(qǐng)?jiān)谧帜盖昂蟾魈砑右粋€(gè)星號(hào),中間不要帶空格。

          Markdown語(yǔ)法

          HTML

          預(yù)覽效果

          I just love *Italicized text*.

          I just love <em>Italicized text</em>.

          I just love Italicized text

          I just love _Italicized text_.

          I just love <em>Italicized text</em>.

          I just love Italicized text

          Love*is*bold

          Love<em>is</em>bold

          Loveisbold

          斜體(Italic)用法的最佳實(shí)踐 要同時(shí)用粗體和斜體突出顯示文本,請(qǐng)?jiān)趩卧~或短語(yǔ)的前后各添加三個(gè)星號(hào)或下劃線。要加粗并用斜體顯示單詞或短語(yǔ)的中間部分,請(qǐng)?jiān)谝怀鲲@示的部分前后各添加三個(gè)星號(hào),中間不要帶空格。

          粗體(Bold)和斜體(Italic)

          要同時(shí)用粗體和斜體突出顯示文本,請(qǐng)?jiān)趩卧~或短語(yǔ)的前后各添加三個(gè)星號(hào)或下劃線。要加粗并用斜體顯示單詞或短語(yǔ)的中間部分,請(qǐng)?jiān)谝怀鲲@示的部分前后各添加三個(gè)星號(hào),中間不要帶空格。

          Markdown語(yǔ)法

          HTML

          預(yù)覽效果

          This text is ***really important***.

          This text is <strong><em>really important</em></strong>.

          This text is really important

          This text is ___really important___.

          This text is <strong><em>really important</em></strong>.

          This text is really important

          This text is __*really important*__.

          This text is <strong><em>really important</em></strong>

          This text is really important.

          This text is **_really important_**.

          This text is <strong><em>really important</em></strong>

          This text is really important.

          This is really***very***important text.

          This is really<strong><em>very</em></strong>important text

          This is reallyveryimportant text.

          粗體(Bold)和斜體(Italic)用法的最佳實(shí)踐

          Markdown 應(yīng)用程序在處理單詞或短語(yǔ)中間添加的下劃線上并不一致。為了實(shí)現(xiàn)兼容性,請(qǐng)使用星號(hào)將單詞或短語(yǔ)的中間部分加粗并以斜體顯示,以示重要。

          引用語(yǔ)法

          要?jiǎng)?chuàng)建塊引用,請(qǐng)?jiān)诙温淝疤砑右粋€(gè) > 符號(hào)。

          > Dorothy followed her through many of the beautiful rooms in her castle.
          

          渲染效果如下所示:

          Dorothy followed her through many of the beautiful rooms in her castle.

          多個(gè)段落的塊引用

          塊引用可以包含多個(gè)段落。為段落之間的空白行添加一個(gè) > 符號(hào)。

          > Dorothy followed her through many of the beautiful rooms in her castle.
          >
          > The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.
          

          渲染效果如下:

          Dorothy followed her through many of the beautiful rooms in her castle.

          The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.

          嵌套塊引用

          塊引用可以嵌套。在要嵌套的段落前添加一個(gè) >> 符號(hào)。

          > Dorothy followed her through many of the beautiful rooms in her castle.
          >
          >> The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.
          

          渲染效果如下:

          Dorothy followed her through many of the beautiful rooms in her castle.

          The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.

          帶有其它元素的塊引用

          塊引用可以包含其他 Markdown 格式的元素。并非所有元素都可以使用,你需要進(jìn)行實(shí)驗(yàn)以查看哪些元素有效。

          > #### The quarterly results look great!
          >
          > - Revenue was off the chart.
          > - Profits were higher than ever.
          >
          >  *Everything* is going according to **plan**.
          

          渲染效果如下:

          The quarterly results look great!Revenue was off the chart.Profits were higher than ever.

          Everything is going according to plan.

          列表語(yǔ)法

          可以將多個(gè)條目組織成有序或無(wú)序列表。

          有序列表

          要?jiǎng)?chuàng)建有序列表,請(qǐng)?jiān)诿總€(gè)列表項(xiàng)前添加數(shù)字并緊跟一個(gè)英文句點(diǎn)。數(shù)字不必按數(shù)學(xué)順序排列,但是列表應(yīng)當(dāng)以數(shù)字 1 起始。

          無(wú)序列表

          要?jiǎng)?chuàng)建無(wú)序列表,請(qǐng)?jiān)诿總€(gè)列表項(xiàng)前面添加破折號(hào) (-)、星號(hào) (*) 或加號(hào) (+) ??s進(jìn)一個(gè)或多個(gè)列表項(xiàng)可創(chuàng)建嵌套列表。

          在列表中嵌套其他元素

          要在保留列表連續(xù)性的同時(shí)在列表中添加另一種元素,請(qǐng)將該元素縮進(jìn)四個(gè)空格或一個(gè)制表符,如下例所示:

          段落

          *   This is the first list item.
          *   Here's the second list item.
          
              I need to add another paragraph below the second list item.
          
          *   And here's the third list item.
          

          渲染效果如下:

          This is the first list item.

          Here's the second list item.

          I need to add another paragraph below the second list item.

          And here's the third list item.

          引用塊

          *   This is the first list item.
          *   Here's the second list item.
          
              > A blockquote would look great below the second list item.
          
          *   And here's the third list item.
          

          渲染效果如下:

          This is the first list item.

          Here's the second list item.

          A blockquote would look great below the second list item.

          And here's the third list item.

          代碼塊

          代碼塊通常采用四個(gè)空格或一個(gè)制表符縮進(jìn)。當(dāng)它們被放在列表中時(shí),請(qǐng)將它們縮進(jìn)八個(gè)空格或兩個(gè)制表符。

          1.  Open the file.
          2.  Find the following code block on line 21:
          
                  <html>
                    <head>
                      <title>Test</title>
                    </head>
          
          3.  Update the title to match the name of your website.
          

          渲染效果如下:

          Open the file.

          Find the following code block on line 21:

          Update the title to match the name of your website.

          圖片

          1.  Open the file containing the Linux mascot.
          2.  Marvel at its beauty.
          
              ![百度](https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png)
          
          3.  Close the file.
          

          渲染效果如下:

          Open the file containing the Linux mascot.

          Marvel at its beauty.

          Close the file.

          代碼語(yǔ)法

          要將單詞或短語(yǔ)表示為代碼,請(qǐng)將其包裹在反引號(hào) (`) 中。

          轉(zhuǎn)義反引號(hào)

          如果你要表示為代碼的單詞或短語(yǔ)中包含一個(gè)或多個(gè)反引號(hào),則可以通過(guò)將單詞或短語(yǔ)包裹在雙反引號(hào)(``)中。

          Markdown語(yǔ)法

          HTML

          預(yù)覽效果

          Use `code` in your Markdown file.

          Use code in your Markdown file.

          Use `code` in your Markdown file.

          代碼塊

          要?jiǎng)?chuàng)建代碼塊,請(qǐng)將代碼塊的每一行縮進(jìn)至少四個(gè)空格或一個(gè)制表符。

               <html>
                    <head>
                    </head>
              </html>
          

          渲染效果如下:

           <html>
                <head>
                </head>
          </html>
          

          Note: 要?jiǎng)?chuàng)建不用縮進(jìn)的代碼塊,請(qǐng)使用 圍欄式代碼塊

          分割線語(yǔ)法

          要?jiǎng)?chuàng)建分隔線,請(qǐng)?jiān)趩为?dú)一行上使用三個(gè)或多個(gè)星號(hào) (***)、破折號(hào) (---) 或下劃線 (___) ,并且不能包含其他內(nèi)容。

          ***
          
          ---
          
          _________________
          

          以上三個(gè)分隔線的渲染效果看起來(lái)都一樣:

          為了兼容性,請(qǐng)?jiān)诜指艟€的前后均添加空白行。

          鏈接語(yǔ)法

          鏈接文本放在中括號(hào)內(nèi),鏈接地址放在后面的括號(hào)中,鏈接title可選。

          超鏈接Markdown語(yǔ)法代碼:[超鏈接顯示名](超鏈接地址 "超鏈接title")

          對(duì)應(yīng)的HTML代碼:<a href="超鏈接地址" title="超鏈接title">超鏈接顯示名</a>

          這是一個(gè)鏈接 [Markdown語(yǔ)法](https://www.example.com)。
          

          渲染效果如下:

          這是一個(gè)鏈接 Markdown語(yǔ)法。

          給鏈接增加 Title

          鏈接title是當(dāng)鼠標(biāo)懸停在鏈接上時(shí)會(huì)出現(xiàn)的文字,這個(gè)title是可選的,它放在圓括號(hào)中鏈接地址后面,跟鏈接地址之間以空格分隔。

          這是一個(gè)鏈接 [Markdown語(yǔ)法](https://www.example.com "最好的markdown教程")。
          

          渲染效果如下: 這是一個(gè)鏈接 Markdown語(yǔ)法。

          網(wǎng)址和Email地址

          使用尖括號(hào)可以很方便地把URL或者email地址變成可點(diǎn)擊的鏈接。

          <https://www.example.com>
          <fake@example.com>
          

          渲染效果如下: https://www.example.com fake@example.com

          帶格式化的鏈接

          強(qiáng)調(diào) 鏈接, 在鏈接語(yǔ)法前后增加星號(hào)。 要將鏈接表示為代碼,請(qǐng)?jiān)诜嚼ㄌ?hào)中添加反引號(hào)。

          I love supporting the **[EFF](https://eff.org)**.
          This is the *[Markdown Guide](https://www.example.com)*.
          See the section on [`code`](#code).
          

          渲染效果如下: I love supporting the EFF. This is the Markdown Guide. See the section on code.

          引用類(lèi)型鏈接

          引用樣式鏈接是一種特殊的鏈接,它使URL在Markdown中更易于顯示和閱讀。參考樣式鏈接分為兩部分:與文本保持內(nèi)聯(lián)的部分以及存儲(chǔ)在文件中其他位置的部分,以使文本易于閱讀。

          鏈接的第一部分格式

          引用類(lèi)型的鏈接的第一部分使用兩組括號(hào)進(jìn)行格式設(shè)置。第一組方括號(hào)包圍應(yīng)顯示為鏈接的文本。第二組括號(hào)顯示了一個(gè)標(biāo)簽,該標(biāo)簽用于指向您存儲(chǔ)在文檔其他位置的鏈接。

          盡管不是必需的,可以在第一組和第二組括號(hào)之間包含一個(gè)空格。第二組括號(hào)中的標(biāo)簽不區(qū)分大小寫(xiě),可以包含字母,數(shù)字,空格或標(biāo)點(diǎn)符號(hào)。

          以下示例格式對(duì)于鏈接的第一部分效果相同:

          • [hobbit-hole][1]
          • [hobbit-hole] [1]

          鏈接的第二部分格式

          引用類(lèi)型鏈接的第二部分使用以下屬性設(shè)置格式:

          放在括號(hào)中的標(biāo)簽,其后緊跟一個(gè)冒號(hào)和至少一個(gè)空格(例如[label]:)。 鏈接的URL,可以選擇將其括在尖括號(hào)中。 鏈接的可選標(biāo)題,可以將其括在雙引號(hào),單引號(hào)或括號(hào)中。 以下示例格式對(duì)于鏈接的第二部分效果相同:

          • [1]: https://en.wikipedia.org/wiki/Hobbit#Lifestyle
          • [1]: https://en.wikipedia.org/wiki/Hobbit#Lifestyle "Hobbit lifestyles"
          • [1]: https://en.wikipedia.org/wiki/Hobbit#Lifestyle 'Hobbit lifestyles'
          • [1]: https://en.wikipedia.org/wiki/Hobbit#Lifestyle (Hobbit lifestyles)
          • [1]: <https://en.wikipedia.org/wiki/Hobbit#Lifestyle> "Hobbit lifestyles"
          • [1]: <https://en.wikipedia.org/wiki/Hobbit#Lifestyle> 'Hobbit lifestyles'
          • [1]: <https://en.wikipedia.org/wiki/Hobbit#Lifestyle> (Hobbit lifestyles) 可以將鏈接的第二部分放在Markdown文檔中的任何位置。有些人將它們放在出現(xiàn)的段落之后,有些人則將它們放在文檔的末尾(例如尾注或腳注)。

          不同的 Markdown 應(yīng)用程序處理URL中間的空格方式不一樣。為了兼容性,請(qǐng)盡量使用%20代替空格。

          圖片語(yǔ)法

          要添加圖像,請(qǐng)使用感嘆號(hào) (!), 然后在方括號(hào)增加替代文本,圖片鏈接放在圓括號(hào)里,括號(hào)里的鏈接后可以增加一個(gè)可選的圖片標(biāo)題文本。

          插入圖片Markdown語(yǔ)法代碼:![圖片alt](圖片鏈接 "圖片title")。

          對(duì)應(yīng)的HTML代碼:<img src="圖片鏈接" alt="圖片alt" title="圖片title">

          ![這是圖片](https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png "百度")
          

          渲染效果如下:

          鏈接圖片

          給圖片增加鏈接,請(qǐng)將圖像的Markdown 括在方括號(hào)中,然后將鏈接添加在圓括號(hào)中。

          [![百度圖片](https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png "百度")](https://www.baidu.com)
          

          渲染效果如下:

          轉(zhuǎn)義字符語(yǔ)法

          要顯示原本用于格式化 Markdown 文檔的字符,請(qǐng)?jiān)谧址懊嫣砑臃葱备茏址?\ 。

          \* Without the backslash, this would be a bullet in an unordered list.
          

          渲染效果如下:

          * Without the backslash, this would be a bullet in an unordered list.

          可做轉(zhuǎn)義的字符

          以下列出的字符都可以通過(guò)使用反斜杠字符從而達(dá)到轉(zhuǎn)義目的。

          Character

          Name

          \

          backslash

          `

          backtick

          *

          asterisk

          _

          underscore

          { }

          curly braces

          [ ]

          brackets

          ( )

          parentheses

          #

          pound sign

          +

          plus sign

          -

          minus sign (hyphen)

          .

          dot

          !

          exclamation mark

          |

          pipe

          特殊字符自動(dòng)轉(zhuǎn)義

          在 HTML 文件中,有兩個(gè)字符需要特殊處理: < 和 & 。 < 符號(hào)用于起始標(biāo)簽,& 符號(hào)則用于標(biāo)記 HTML 實(shí)體,如果你只是想要使用這些符號(hào),你必須要使用實(shí)體的形式,像是 < 和 &。

          & 符號(hào)其實(shí)很容易讓寫(xiě)作網(wǎng)頁(yè)文件的人感到困擾,如果你要打「AT&T」 ,你必須要寫(xiě)成「AT&T」 ,還得轉(zhuǎn)換網(wǎng)址內(nèi)的 & 符號(hào),如果你要鏈接到:

          http://images.google.com/images?num=30&q=larry+bird
          

          你必須要把網(wǎng)址轉(zhuǎn)成:

          http://images.google.com/images?num=30&q=larry+bird
          

          才能放到鏈接標(biāo)簽的 href 屬性里。不用說(shuō)也知道這很容易忘記,這也可能是 HTML 標(biāo)準(zhǔn)檢查所檢查到的錯(cuò)誤中,數(shù)量最多的。

          Markdown 允許你直接使用這些符號(hào),它幫你自動(dòng)轉(zhuǎn)義字符。如果你使用 & 符號(hào)的作為 HTML 實(shí)體的一部分,那么它不會(huì)被轉(zhuǎn)換,而在其它情況下,它則會(huì)被轉(zhuǎn)換成 &。所以你如果要在文件中插入一個(gè)著作權(quán)的符號(hào),你可以這樣寫(xiě):

          ?
          

          Markdown 將不會(huì)對(duì)這段文字做修改,但是如果你這樣寫(xiě):

          AT&T
          

          Markdown 就會(huì)將它轉(zhuǎn)為:

          AT&T
          

          類(lèi)似的狀況也會(huì)發(fā)生在 < 符號(hào)上,因?yàn)?Markdown 支持 行內(nèi) HTML ,如果你使用 < 符號(hào)作為 HTML 標(biāo)簽的分隔符,那 Markdown 也不會(huì)對(duì)它做任何轉(zhuǎn)換,但是如果你是寫(xiě):

          4 < 5
          

          Markdown 將會(huì)把它轉(zhuǎn)換為:

          4 < 5
          

          需要特別注意的是,在 Markdown 的塊級(jí)元素和內(nèi)聯(lián)元素中, < 和 & 兩個(gè)符號(hào)都會(huì)被自動(dòng)轉(zhuǎn)換成 HTML 實(shí)體,這項(xiàng)特性讓你可以很容易地用 Markdown 寫(xiě) HTML。(在 HTML 語(yǔ)法中,你要手動(dòng)把所有的 < 和 & 都轉(zhuǎn)換為 HTML 實(shí)體。)

          內(nèi)嵌HTML標(biāo)簽

          對(duì)于 Markdown 涵蓋范圍之外的標(biāo)簽,都可以直接在文件里面用 HTML 本身。如需使用 HTML,不需要額外標(biāo)注這是 HTML 或是 Markdown,只需 HTML 標(biāo)簽添加到 Markdown 文本中即可。

          行級(jí)內(nèi)聯(lián)標(biāo)簽

          HTML 的行級(jí)內(nèi)聯(lián)標(biāo)簽如 <span>、<cite>、<del> 不受限制,可以在 Markdown 的段落、列表或是標(biāo)題里任意使用。依照個(gè)人習(xí)慣,甚至可以不用 Markdown 格式,而采用 HTML 標(biāo)簽來(lái)格式化。例如:如果比較喜歡 HTML 的 <a> 或 <img> 標(biāo)簽,可以直接使用這些標(biāo)簽,而不用 Markdown 提供的鏈接或是圖片語(yǔ)法。當(dāng)你需要更改元素的屬性時(shí)(例如為文本指定顏色或更改圖像的寬度),使用 HTML 標(biāo)簽更方便些。

          HTML 行級(jí)內(nèi)聯(lián)標(biāo)簽和區(qū)塊標(biāo)簽不同,在內(nèi)聯(lián)標(biāo)簽的范圍內(nèi), Markdown 的語(yǔ)法是可以解析的。

          This **word** is bold. This <em>word</em> is italic.
          

          渲染效果如下: This word is bold. This word is italic.

          區(qū)塊標(biāo)簽

          區(qū)塊元素──比如 <div>、<table>、<pre>、<p> 等標(biāo)簽,必須在前后加上空行,以便于內(nèi)容區(qū)分。而且這些元素的開(kāi)始與結(jié)尾標(biāo)簽,不可以用 tab 或是空白來(lái)縮進(jìn)。Markdown 會(huì)自動(dòng)識(shí)別這區(qū)塊元素,避免在區(qū)塊標(biāo)簽前后加上沒(méi)有必要的

          標(biāo)簽。

          例如,在 Markdown 文件里加上一段 HTML 表格:

          This is a regular paragraph.
          
          <table>
              <tr>
                  <td>Foo</td>
              </tr>
          </table>
          
          This is another regular paragraph.
          

          請(qǐng)注意,Markdown 語(yǔ)法在 HTML 區(qū)塊標(biāo)簽中將不會(huì)被進(jìn)行處理。例如,你無(wú)法在 HTML 區(qū)塊內(nèi)使用 Markdown 形式的*強(qiáng)調(diào)*。

          提示:出于安全原因,并非所有 Markdown 應(yīng)用程序都支持在 Markdown 文檔中添加 HTML。如有疑問(wèn),請(qǐng)查看相應(yīng) Markdown 應(yīng)用程序的手冊(cè)。某些應(yīng)用程序只支持 HTML 標(biāo)簽的子集。

          對(duì)于 HTML 的塊級(jí)元素 <div>、<table>、<pre> 和 <p>,請(qǐng)?jiān)谄淝昂笫褂每招校╞lank lines)與其它內(nèi)容進(jìn)行分隔。盡量不要使用制表符(tabs)或空格(spaces)對(duì) HTML 標(biāo)簽做縮進(jìn),否則將影響格式。

          在 HTML 塊級(jí)標(biāo)簽內(nèi)不能使用 Markdown 語(yǔ)法。例如 <p>italic and **bold**</p> 將不起作用。

          擴(kuò)展語(yǔ)法

          原始設(shè)計(jì)文檔中概述的基本語(yǔ)法主要是為了應(yīng)付大多數(shù)情況下的日常所需元素,但對(duì)于某些人來(lái)說(shuō)還不夠,這就是擴(kuò)展語(yǔ)法的用武之地。

          一些個(gè)人和組織開(kāi)始通過(guò)添加其他元素(例如表,代碼塊,語(yǔ)法突出顯示,URL自動(dòng)鏈接和腳注)來(lái)擴(kuò)展基本語(yǔ)法。可以通過(guò)使用基于基本Markdown語(yǔ)法的輕量級(jí)標(biāo)記語(yǔ)言,或通過(guò)向兼容的Markdown處理器添加擴(kuò)展來(lái)啟用這些元素。

          表格

          要添加表,請(qǐng)使用三個(gè)或多個(gè)連字符(---)創(chuàng)建每列的標(biāo)題,并使用管道(|)分隔每列。您可以選擇在表的任一端添加管道。

          | 語(yǔ)法 | 描述 |
          | ---- | ---- |
          | 頭部 | 標(biāo)題 |
          | 段落 | 文本 |
          

          呈現(xiàn)的輸出如下所示:

          語(yǔ)法

          描述

          頭部

          標(biāo)題

          段落

          文本

          單元格寬度可以變化,如下所示。呈現(xiàn)的輸出將看起來(lái)相同。

          | 語(yǔ)法 | 描述 |
          | ---| ------ |
          | 頭部 | 標(biāo)題 |
          | 段落 | 文本 |
          

          Tip: 使用連字符和管道創(chuàng)建表可能很麻煩。 #### 對(duì)齊

          您可以通過(guò)在標(biāo)題行中的連字符的左側(cè),右側(cè)或兩側(cè)添加冒號(hào)(:),將列中的文本對(duì)齊到左側(cè),右側(cè)或中心。

          | 語(yǔ)法      | 描述 | 測(cè)試文本     |
          | :---        |    :----:   |          ---: |
          | 頭部      | 標(biāo)題       | 你好   |
          | 段落   | 文本        | 更好      |
          

          呈現(xiàn)的輸出如下所示:

          語(yǔ)法

          描述

          測(cè)試文本

          頭部

          標(biāo)題

          你好

          段落

          文本

          更好

          格式化表格中的文字

          您可以在表格中設(shè)置文本格式。例如,您可以添加鏈接,代碼(僅反引號(hào)(`)中的單詞或短語(yǔ),而不是代碼塊)和強(qiáng)調(diào)。

          您不能添加標(biāo)題,塊引用,列表,水平規(guī)則,圖像或HTML標(biāo)簽。

          在表中轉(zhuǎn)義管道字符

          您可以使用表格的HTML字符代碼(|)在表中顯示豎線(|)字符。

          圍欄代碼塊

          Markdown基本語(yǔ)法允許您通過(guò)將行縮進(jìn)四個(gè)空格或一個(gè)制表符來(lái)創(chuàng)建代碼塊。如果發(fā)現(xiàn)不方便,請(qǐng)嘗試使用受保護(hù)的代碼塊。根據(jù)Markdown處理器或編輯器的不同,您將在代碼塊之前和之后的行上使用三個(gè)反引號(hào)((```)或三個(gè)波浪號(hào)(~~~)。

          ```
          {
            "firstName": "John",
            "lastName": "Smith",
            "age": 25
          }
          ```
          

          呈現(xiàn)的輸出如下所示:

          {
            "firstName": "John",
            "lastName": "Smith",
            "age": 25
          }
          

          語(yǔ)法高亮

          許多Markdown處理器都支持受?chē)鷻诖a塊的語(yǔ)法突出顯示。使用此功能,您可以為編寫(xiě)代碼的任何語(yǔ)言添加顏色突出顯示。要添加語(yǔ)法突出顯示,請(qǐng)?jiān)谑芊雷o(hù)的代碼塊之前的反引號(hào)旁邊指定一種語(yǔ)言。

          ```json
          {
            "firstName": "John",
            "lastName": "Smith",
            "age": 25
          }
          ```
          

          呈現(xiàn)的輸出如下所示:

          {
            "firstName": "John",
            "lastName": "Smith",
            "age": 25
          }
          

          腳注

          腳注使您可以添加注釋和參考,而不會(huì)使文檔正文混亂。當(dāng)您創(chuàng)建腳注時(shí),帶有腳注的上標(biāo)數(shù)字會(huì)出現(xiàn)在您添加腳注參考的位置。讀者可以單擊鏈接以跳至頁(yè)面底部的腳注內(nèi)容。

          要?jiǎng)?chuàng)建腳注參考,請(qǐng)?jiān)诜嚼ㄌ?hào)([^1])內(nèi)添加插入符號(hào)和標(biāo)識(shí)符。標(biāo)識(shí)符可以是數(shù)字或單詞,但不能包含空格或制表符。標(biāo)識(shí)符僅將腳注參考與腳注本身相關(guān)聯(lián)-在輸出中,腳注按順序編號(hào)。

          在括號(hào)內(nèi)使用另一個(gè)插入符號(hào)和數(shù)字添加腳注,并用冒號(hào)和文本([^1]: My footnote.)。您不必在文檔末尾添加腳注。您可以將它們放在除列表,塊引號(hào)和表之類(lèi)的其他元素之外的任何位置。

          Here's a simple footnote,[^1] and here's a longer one.[^bignote]
          
          [^1]: This is the first footnote.
          
          [^bignote]: Here's one with multiple paragraphs and code.
          
              Indent paragraphs to include them in the footnote.
          
              `{ my code }`
          
              Add as many paragraphs as you like.
          

          呈現(xiàn)的輸出如下所示:

          Here's a simple footnote,[^1] and here's a longer one.[^bignote]

          [^1]: This is the first footnote.

          [^bignote]: Here's one with multiple paragraphs and code.

          Indent paragraphs to include them in the footnote.
          
          `{ my code }`
          
          Add as many paragraphs as you like.
          

          標(biāo)題編號(hào)

          許多Markdown處理器支持標(biāo)題的自定義ID - 一些Markdown處理器會(huì)自動(dòng)添加它們。添加自定義ID允許您直接鏈接到標(biāo)題并使用CSS對(duì)其進(jìn)行修改。要添加自定義標(biāo)題ID,請(qǐng)?jiān)谂c標(biāo)題相同的行上用大括號(hào)括起該自定義ID。

          ### My Great Heading {#custom-id}
          

          HTML看起來(lái)像這樣:

          <h3 id="custom-id">My Great Heading</h3>
          

          鏈接到標(biāo)題ID (#headid)

          通過(guò)創(chuàng)建帶有數(shù)字符號(hào)(#)和自定義標(biāo)題ID的標(biāo)準(zhǔn)鏈接,可以鏈接到文件中具有自定義ID的標(biāo)題。

          Markdown

          HTML

          預(yù)覽效果

          Heading IDs

          Heading IDs

          Heading IDs

          其他網(wǎng)站可以通過(guò)將自定義標(biāo)題ID添加到網(wǎng)頁(yè)的完整URL(例如[Heading IDs](https://www.example.com/heading-ids.html#headid))來(lái)鏈接到標(biāo)題。

          定義列表

          一些Markdown處理器允許您創(chuàng)建術(shù)語(yǔ)及其對(duì)應(yīng)定義的定義列表。要?jiǎng)?chuàng)建定義列表,請(qǐng)?jiān)诘谝恍猩湘I入術(shù)語(yǔ)。在下一行,鍵入一個(gè)冒號(hào),后跟一個(gè)空格和定義。

          First Term
          : This is the definition of the first term.
          
          Second Term
          : This is one definition of the second term.
          : This is another definition of the second term.
          

          HTML看起來(lái)像這樣:

          <dl>
            <dt>First Term</dt>
            <dd>This is the definition of the first term.</dd>
            <dt>Second Term</dt>
            <dd>This is one definition of the second term. </dd>
            <dd>This is another definition of the second term.</dd>
          </dl>
          

          呈現(xiàn)的輸出如下所示:

          First Term

          This is the definition of the first term.

          Second Term

          This is one definition of the second term. This is another definition of the second term.

          刪除線

          您可以通過(guò)在單詞中心放置一條水平線來(lái)刪除單詞。結(jié)果看起來(lái)像這樣。此功能使您可以指示某些單詞是一個(gè)錯(cuò)誤,要從文檔中刪除。若要?jiǎng)h除單詞,請(qǐng)?jiān)趩卧~前后使用兩個(gè)波浪號(hào)~~。

          ~~2023年很卷~~ ,希望2024世界更加美好。
          

          呈現(xiàn)的輸出如下所示:

          2023年很卷 ,希望2024世界更加美好。

          任務(wù)列表語(yǔ)法

          任務(wù)列表使您可以創(chuàng)建帶有復(fù)選框的項(xiàng)目列表。在支持任務(wù)列表的Markdown應(yīng)用程序中,復(fù)選框?qū)@示在內(nèi)容旁邊。要?jiǎng)?chuàng)建任務(wù)列表,請(qǐng)?jiān)谌蝿?wù)列表項(xiàng)之前添加破折號(hào)-和方括號(hào)[ ],并在[ ]前面加上空格。要選擇一個(gè)復(fù)選框,請(qǐng)?jiān)诜嚼ㄌ?hào)[x]之間添加 x 。 示例代碼:

          - [x] 列表1
          - [ ] 列表2
          - [ ] 列表3
          

          呈現(xiàn)的輸出如下所示:

          • 列表1
          • 列表2
          • 列表3

          使用Emoji表情

          有兩種方法可以將表情符號(hào)添加到Markdown文件中:將表情符號(hào)復(fù)制并粘貼到Markdown格式的文本中,或者鍵入emoji shortcodes。

          復(fù)制和粘貼表情符號(hào)

          在大多數(shù)情況下,您可以簡(jiǎn)單地從Emojipedia 等來(lái)源復(fù)制表情符號(hào)并將其粘貼到文檔中。許多Markdown應(yīng)用程序會(huì)自動(dòng)以Markdown格式的文本顯示表情符號(hào)。從Markdown應(yīng)用程序?qū)С龅腍TML和PDF文件應(yīng)顯示表情符號(hào)。

          Tip: 如果您使用的是靜態(tài)網(wǎng)站生成器,請(qǐng)確保將HTML頁(yè)面編碼為UTF-8。

          使用表情符號(hào)簡(jiǎn)碼

          一些Markdown應(yīng)用程序允許您通過(guò)鍵入表情符號(hào)短代碼來(lái)插入表情符號(hào)。這些以冒號(hào)開(kāi)頭和結(jié)尾,并包含表情符號(hào)的名稱(chēng)。

          歡迎閱讀此文 :tent: 如對(duì)你有幫助,動(dòng)動(dòng)小手指點(diǎn)個(gè)贊吧,給博主一點(diǎn)鼓勵(lì) :heart: 。
          
          哈哈哈!   
          

          呈現(xiàn)的輸出如下所示:

          歡迎閱讀此文 :tent: 如對(duì)你有幫助,動(dòng)動(dòng)小手指點(diǎn)個(gè)贊吧,給博主一點(diǎn)鼓勵(lì) :heart: 。

          哈哈哈!

          Note: 注意:您可以使用此表情符號(hào)簡(jiǎn)碼列表,但請(qǐng)記住,表情符號(hào)簡(jiǎn)碼因應(yīng)用程序而異。 多個(gè)單詞的簡(jiǎn)碼用 _ 來(lái)連接,且簡(jiǎn)碼必須是小寫(xiě)。

          自動(dòng)網(wǎng)址鏈接

          許多Markdown處理器會(huì)自動(dòng)將URL轉(zhuǎn)換為鏈接。這意味著如果您輸入http://www.example.com,即使您未使用方括號(hào)(`[]`),您的Markdown處理器也會(huì)自動(dòng)將其轉(zhuǎn)換為鏈接。

          呈現(xiàn)的輸出如下所示:

          http://www.example.com

          禁用自動(dòng)URL鏈接

          如果您不希望自動(dòng)鏈接URL,則可以通過(guò)將URL表示為帶反引號(hào)的代碼來(lái)刪除該鏈接。

          `http://www.example.com`
          

          呈現(xiàn)的輸出如下所示: http://www.example.com


          主站蜘蛛池模板: 国产主播一区二区| 2022年亚洲午夜一区二区福利| 狠狠做深爱婷婷综合一区| 久久亚洲色一区二区三区| 老熟女高潮一区二区三区| 蜜臀AV一区二区| 成人免费区一区二区三区| 精品一区二区三区在线播放| 亚洲宅男精品一区在线观看| 中文字幕精品无码一区二区三区| 日韩久久精品一区二区三区 | 国产精品一区视频| 国产成人精品一区二区三区无码| 正在播放国产一区| 中文字幕精品一区二区| 久久99精品一区二区三区| 国产午夜毛片一区二区三区 | 国产精品无圣光一区二区 | 中文乱码精品一区二区三区| 相泽南亚洲一区二区在线播放| 久久精品国产一区二区三| 免费一区二区无码东京热| 美女AV一区二区三区| 精品久久久中文字幕一区| 老熟妇高潮一区二区三区| 日本片免费观看一区二区| 精品福利视频一区二区三区| 亚洲视频免费一区| 蜜桃视频一区二区三区在线观看| 国产综合精品一区二区三区| 日本一区二区三区高清| 好吊视频一区二区三区| 中文字幕亚洲一区| 国产精品无圣光一区二区| 亚洲成AV人片一区二区密柚| 无码国产精品一区二区免费16 | 日本无码一区二区三区白峰美| 国产福利一区二区三区在线观看 | 99精品国产一区二区三区不卡| 少妇人妻精品一区二区三区| 人妻无码视频一区二区三区|