1. 程式人生 > 實用技巧 >Markdown樣式自定義及詳解-部落格園、Typora、Markdown Nice

Markdown樣式自定義及詳解-部落格園、Typora、Markdown Nice


標題: Markdown樣式自定義及詳解-部落格園、Typora、Markdown Nice
作者: 夢幻之心星    [email protected]
標籤: [#Markdown,#CSS,#部落格園,#Typora,#Markdown Nice,#Markdown Here]
目錄: [Markdown]
日期: 2021-01-09

背景說明

  • 對於技術寫作,經常需要同步到多個平臺,這就需要樣式不受平臺限制。最好一次寫作排版,多平臺釋出。雖然網上存在線上編輯器,但是對於不開源的平臺,意味著平臺關閉後便無法排版。而持久的技術部落格寫作,就需要一個開源或離線平臺來進行文件的編輯和排版。
  • Markdown 是一種輕量級標記語言, 允許人們使用易讀易寫的純文字格式編寫文件,在 2004 由約翰·格魯伯(John Gruber)建立。 廣泛應用於部落格文章(簡書、CSDN、部落格園)、微信公眾號文章、專案文件、書籍、筆記(印象筆記、有道雲筆記、熊掌記)、郵件、線上協作文件(騰訊文件、石墨文件)、互動式文件、搭建個人部落格等眾多寫作場景。
  • 提到標記語言,就不得不說明一下Web 技術的基礎,Web 技術的基礎為 HTMLCSSHTTP 。 HTML(HyperText Markup Language,超文字標記語言)用於描述、定義頁面內容。 CSS(Cascading Style Sheets,層疊樣式表)用於描述頁面內容的外觀與展示。HTTP(Hypertext Transfer Protocol,超文字傳輸協議)用於傳輸網頁中的 HTML 及其他超媒體文件。 其思想就是把頁面內容、頁面樣式、頁面傳輸進行分離。
  • Markdown 是一種輕量級標記語言,語法簡單易學,採用CSS進行樣式渲染。因此,要更改樣式,就需要更改CSS,而要更改CSS,就需要先了解HTML。Markdown 語法對應於HTML標籤子集 ,因此,只需要瞭解Markdown的CSS對應的HTML標籤即可自由的配置CSS。
  • 網上存在Markdown格式化工具網站,例如Md2All、Markdown Nice、可能吧公眾號 Style等。但也有缺點,一旦斷網,便無法使用。而自定義CSS,就可以做到所見即所得,自由掌握在自己手中。網上大多數教程一般針對於業內人員,門檻較高,而對於外行人員,進行詳細學習成本較高。因此,此文對Markdown 所涉及到的 HTML和 CSS內容進行簡要的說明介紹,既是對自己學習過程的記錄,也是對外行入門的引導。

網頁介紹

HTML

  • 定義了網頁內容的含義和結構。僅列舉 Markdown 中的部分元素,詳細內容可參考HTML 參考手冊

標題

標籤 描述
<h1>
, <h2>, <h3>, <h4>, <h5>, <h6>
六個不同級別的標題,<h1>級別最高,而 <h6>級別最低
<hr> 段落級元素間的主題轉換,表現為水平線

格式

標籤 描述
<p> 定義一個段落
<b> 大多數瀏覽器將文字顯示為粗體
<blockquote> 塊級引用元素,代表其中的文字是引用內容。
<code> 呈現一段計算機程式碼。
<em> 標記出需要使用者著重閱讀的內容,定義強調文字。
<i> 定義斜體文字
<kbd> 定義鍵盤文字
<mark> 定義帶有記號的文字
<pre> 表示預定義格式文字。元素中的文字按照原檔案的編排。
<q> 表示一個封閉的並且是短的行內引用的文字
<s> 定義加刪除線的文字
<u> 定義下劃線文字
<strong> 定義語氣更為強烈的強調文字
<sub> 定義下標文字
<sup> 定義上標文字
<time> 定義一個日期/時間

影象

標籤 描述
<img> 定義影象

連結

標籤 描述
<a> 定義一個連結

列表

標籤 描述
<ul> 定義一個無序列表
<ol> 定義一個有序列表
<li> 表示列表裡的專案。必須包含在一個父元素裡,如有序或無序列表
<dl> 定義一個定義列表
<dt> 定義一個定義定義列表中的專案
<dd> 定義定義列表中專案的描述,必須跟著一個 <dt> 元素

表格

元素 描述
<table> 定義一個表格
<caption> 定義表格標題
<th> 定義表格中的表頭單元格
<tr> 定義表格中的行
<td> 定義表格中的單元
<thead> 定義表格中的表頭內容
<tbody> 定義表格中的主體內容
<tfoot> 定義表格中的表注內容(腳註)
<col> 定義表格中一個或多個列的屬性值
<colgroup> 定義表格中供格式化的列組

CSS

CSS 章節概述

CSS 基礎教程 CSS 簡介、CSS 基礎語法、CSS 高階語法、CSS 派生選擇器、CSS id 選擇器、CSS 類選擇器、CSS 屬性選擇器、CSS 建立
CSS 樣式 CSS 背景、CSS 文字、CSS 字型、CSS 連結、CSS 列表、CSS 表格、CSS 輪廓
CSS 框模型 CSS 框模型概述、CSS 內邊距、CSS 邊框、CSS 外邊距、CSS 外邊距合併
CSS 定位 CSS 定位概述、CSS 相對定位、CSS 絕對定位、CSS 浮動
CSS 選擇器 CSS 元素選擇器、CSS 選擇器分組、CSS 類選擇器詳解、CSS ID 選擇器詳解、CSS 屬性選擇器詳解、CSS 後代選擇器、CSS 子元素選擇器、CSS 相鄰兄弟選擇器、CSS 偽類、CSS 偽元素
CSS 高階 CSS 對齊、CSS 尺寸、CSS 分類、CSS 導航欄、CSS 圖片庫、CSS 圖片透明、CSS 媒介型別、CSS 注意事項、CSS 總結
CSS 參考手冊 CSS 參考手冊、CSS 選擇器、CSS 聽覺參考手冊、CSS 網路安全字型、CSS 單位、CSS 顏色、CSS 顏色值、CSS 顏色名、CSS 顏色十六進

CSS 選擇器

選擇器 例子 例子描述
element p 選擇所有 <p> 元素
element,element div,p 選擇所有 <div> 元素和所有 <p> 元素
element element div p 選擇 <div> 元素內部的所有 <p> 元素
element>element div>p 選擇父元素為 <div> 元素的所有 <p> 元素
element+element div+p 選擇緊接在 <div> 元素之後的所有 <p> 元素
element1~element2 p~ul 選擇前面有 <p> 元素的每個 <ul> 元素
:hover a:hover 選擇滑鼠指標位於其上的連結
:before p:before 在每個 <p> 元素的內容之前插入內容
:after p:after 在每個 <p> 元素的內容之後插入內容
:first-of-type p:first-of-type 選擇屬於其父元素的首個 <p> 元素的每個 <p> 元素
:last-of-type p:last-of-type 選擇屬於其父元素的最後 <p> 元素的每個 <p> 元素
:only-child p:only-child 選擇屬於其父元素的唯一子元素的每個 <p> 元素
:nth-child(n) p:nth-child(2) 選擇屬於其父元素的第二個子元素的每個 <p> 元素

CSS 樣式

CSS 邊框屬性
屬性 描述
border 設定所有的邊框屬性
border-bottom 設定所有的下邊框屬性
border-bottom-color 設定下邊框的顏色
border-bottom-style 設定下邊框的樣式
border-bottom-width 設定下邊框的寬度
border-color 設定四條邊框的顏色
border-left 設定所有的左邊框屬性
border-right 設定所有的右邊框屬性
border-top 設定所有的上邊框屬性
outline 設定所有的輪廓屬性
border-bottom-left-radius 定義邊框左下角的形狀
border-radius 設定邊框四個角的屬性
Box 屬性
屬性 描述
overflow-x 如果內容溢位了元素內容區域,是否對內容的左/右邊緣進行裁剪
overflow-y 如果內容溢位了元素內容區域,是否對內容的上/下邊緣進行裁剪
overflow-style 規定溢位元素的首選滾動方法
CSS 字型屬性
屬性 描述
font 規定字型屬性
font-family 規定文字的字體系列
font-size 規定文字的字型尺寸
font-style 規定文字的字型樣式
font-weight 規定字型的粗細
CSS 列表屬性
屬性 描述
list-style 設定所有的列表屬性
list-style-image 將圖象設定為列表項標記
list-style-position 設定列表項標記的放置位置
list-style-type 設定列表項標記的型別
CSS 外邊距屬性
屬性 描述
margin 設定所有外邊距屬性
margin-bottom 設定元素的下外邊距
margin-left 設定元素的左外邊距
margin-right 設定元素的右外邊距
margin-top 設定元素的上外邊距
CSS 內邊距屬性

同CSS 外邊距屬性。

CSS 定位屬性
屬性 描述
display 規定元素應該生成的框的型別
overflow 規定當內容溢位元素框時發生的事情
CSS 文字屬性
屬性 描述
color 設定文字的顏色
letter-spacing 設定字元間距
line-height 設定行高
text-align 規定文字的水平對齊方式
text-indent 規定文字塊首行的縮排
white-space 規定如何處理元素中的空白
word-spacing 設定單詞間距
text-align-last 設定如何對齊最後一行或緊挨著強制換行符之前的行
text-outline 規定文字的輪廓
text-overflow 規定當文字溢位包含元素時發生的事情
text-wrap 規定文字的換行規則
word-break 規定非中日韓文字的換行規則
word-wrap 允許對長的不可分割的單詞進行分割並換行到下一行
CSS 框模型

CSS 單位
單位 描述
% 百分比
in 英寸
cm 釐米
mm 毫米
em 相對於當前字型的倍數
pt 磅 (1 pt 等於 1/72 英寸)
px 畫素 (計算機螢幕上的一個點)
CSS 顏色
顏色名 描述
rgb(x,x,x) RGB 值 ,如 rgb(255,0,0)
rgb(x%, x%, x%) RGB 百分比值 ,如 rgb(100%,0%,0%)
#rrggbb 十六進位制數 ,如 #ff0000
  • HTML 和 CSS 顏色規範中定義了 147 中顏色名(17 種標準顏色加 130 種其他顏色)。
  • 17 種標準色是 aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, orange, purple, red, silver, teal, white, yellow。

樣式配置

樣式使用說明

  • 樣式為多平臺通用樣式,只需要批量替換祖先選擇器就可以遷移到不同的平臺
  • 因為每個元素都使用了選擇器,因此不會影響介面的正常顯示

樣式具體程式碼

/********************************************
---
    標題: Markdown CSS 自定義及註解.css
    作者: 夢幻之心星    [email protected]
    標籤: [Markdown,CSS,部落格園,Typora,Markdown_Nice,Markdown_Here]
    目錄: [Markdown]
    日期: 2021-1-3
    版本:V1.6
    說明:
      - 祖先選擇器:使用祖先選擇器,使樣式僅適用於特定平臺,而不會影響其他平臺和控制元件元件
          - Typora:[#write]
          - Markdown_Nice:[#nice]
          - Markdown_Here:[.markdown-here-wrapper]
          - 部落格園:[#cnblogs_post_body]
      - 部落格園:面板為CodingLife
      - Typora:主題資料夾下建立的“base.user.css”應用於所有主題,"{theme-css-name}.user.css"僅應用於相應主題。
      - markdown_here:不支援[::before]和[::after],需要將字首和字尾合併到本體中。

---
********************************************/


/********************************************
******全域性屬性
******程式碼
******段落格式
******連結
******圖片
******引用
******列表
******定義列表
******任務列表
******目錄
******表格
******標題
******數學公式
******畫圖
********************************************/


/*================程式碼開始=============*/

#cnblogs_post_body pre {
    line-height: 1.2em;
}

#cnblogs_post_body pre,
#cnblogs_post_body code {
    font-family: Consolas, Inconsolata, Courier, monospace;
}


/*程式碼整體樣式*/

#cnblogs_post_body code {
    font-size: 14px;
    margin: 0 0.15em;
    padding: 2px 4px;
    border: 1px solid #eaeaea;
    /*圓角框*/
    border-radius: 3px;
    background: #EFF2F3!important;
}


/*程式碼塊*/

#cnblogs_post_body pre code {
    white-space: pre;
    /*如果內容被修剪,顯示滾動條以便檢視其餘內容。*/
    overflow: auto-flow;
    padding: 0.5em 0.7em;
    display: block !important;
}


/* 行內程式碼、列表內程式碼 */

#cnblogs_post_body p code,
#cnblogs_post_body li code {
    font-size: 14px!important;
    color: #3594f7 !important;
    padding: 0 2px;
    display: inline;
}


/*================程式碼結束=============*/


/*================段落格式開始=============*/


/********暫無:下標、上標、高亮、腳註********/


/*段落*/

#cnblogs_post_body p {
    color: #595959;
    padding-top: 1px !important;
    padding-bottom: 1px !important;
    /*字間距*/
    letter-spacing: 0px;
    font-size: 16px;
    /*詞間距*/
    word-spacing: 0px;
    /*首行縮排*/
    text-indent: 0em;
    /*文字對齊 */
    text-align: justify;
    /* 空白字元的顯示 */
    white-space: pre-wrap !important;
    /* 長度超過一行的單詞換行方法  */
    word-wrap: break-word !important;
    /* 非中日韓單詞換行方法 */
    word-break: break-all !important;
}


/* 加粗 */

#cnblogs_post_body strong {
    font-weight: bold;
    color: #3594f7 !important;
}

#cnblogs_post_body strong::before {
    content: "「";
}

#cnblogs_post_body strong::after {
    content: "」";
}


/* 斜體 */

#cnblogs_post_body em {
    font-style: italic;
    color: #3594f7 !important;
}


#cnblogs_post_body em::before {
    content: "『";
}

#cnblogs_post_body em::after {
    content: "』";
}

#cnblogs_post_body strong em::before,
#cnblogs_post_body em strong::before {
    content: none;
}

#cnblogs_post_body strong em::after,
#cnblogs_post_body em strong::after {
    content: none;
}

/* 刪除線 */

#cnblogs_post_body s {
    font-style: italic;
    color: red !important;
}


/*水平分隔線*/

#cnblogs_post_body hr {
    /*元素的高度*/
    height: 1px;
    /*外邊距*/
    margin: 1em 0px;
    /*內邊距*/
    padding: 0;
    /*邊框*/
    border: none;
    border-top: 2px solid #3baafa !important;
}

#cnblogs_post_body kbd {
    font-family: monospace;
    background-color: #ebdfdf !important;
    border: 1px solid #ccc !important;
    border-radius: 5px;
    padding: 1px 5px;
}

#cnblogs_post_body video {
    width: auto;
    height: auto;
    border: 1px solid #3baafa;
    object-position: center center;
    object-fit: contain;
    margin: 0;
    padding: 0;
    display: block;
}


/*================段落格式結束=============*/


/*================連結開始=============*/


/*超連結*/

#cnblogs_post_body a {
    text-decoration: underline;
    font-size: 16px;
    /*[normal|break-word]*/
    word-wrap: break-word;
    color: #1890ff !important;
    /*[normal|bold]*/
    font-weight: normal;
    border-bottom:none;
}


/*================連結結束=============*/


/*================圖片開始=============*/


/*圖片*/

#cnblogs_post_body img {
    display: block;
    margin: 5px;
    /*圖片邊框圓角化*/
    border-radius: 6px;
    /*圖片自動縮放*/
    object-fit: contain;
    /*圖片外邊框陰影化*/
    box-shadow: 2px 2px 7px #999;
}


/* 圖片描述文字 僅Markdown_Nice支援 */

#cnblogs_post_body figcaption {
    margin-top: 10px;
    /*塊級元素,此元素前後會帶有換行符*/
    display: block;
    text-align: center;
    color: #999;
    font-size: 13px;
}


/*圖片描述文字之前  僅Markdown_Nice支援 */

#cnblogs_post_body figcaption:before {
    content: "";
    background-image: url(https://cdn.jsdelivr.net/gh/Sky-seeker/Pictrue_Bed/ico/MarkDown_CSS-img_fig_before.png);
    /*行內塊元素*/
    display: inline-block;
    width: 18px;
    height: 18px;
    background-size: 18px;
    /*背景影象不會重複*/
    background-repeat: no-repeat;
    background-position: center;
    margin-right: 5px;
    margin-bottom: -5px;
}


/*================圖片結束=============*/


/*================引用開始=============*/


/*引用塊*/

#cnblogs_post_body blockquote {
    text-align: left;
    border-left: 3px solid #00000066!important;
    background: RGBA(0, 0, 0, 0.05) !important;
    display: block;
    margin: 0;
    padding: 2px 5px !important;
}


/*引用塊的文字內容*/

#cnblogs_post_body blockquote p {
    color: #777;
    /*首行縮排*/
    text-indent: 0em;
}

#cnblogs_post_body q {
    border-left: 6px solid #ddd;
    padding: 0 1em;
    color: #777;
    quotes: none;
}


/*================引用結束=============*/


/*================列表開始=============*/


/* 列表中的專案樣式:包括無序字首點、有序字首數、列表內容*/

#cnblogs_post_body li,
#cnblogs_post_body li p {
    font-size: 15px;
    font-weight: normal;
    color: #595959;
    margin: 0;
}

#cnblogs_post_body ul,
#cnblogs_post_body ol {
    font-size: 15px;
    color: #595959;
    margin-left: 0px;
    margin-bottom: 0.1em;
    padding-left: 3em;
}

#cnblogs_post_body ul ul,
#cnblogs_post_body ol ul,
#cnblogs_post_body ul ol,
#cnblogs_post_body ol ol {
    padding-left: 1.5em;
}

#cnblogs_post_body blockquote ol,
#cnblogs_post_body blockquote ul {
    padding-left: 1.5em;
}


/* 有序列表--一級列表字首數字樣式 Markdown Nice*/

#cnblogs_post_body ol li {
    list-style-type: decimal;
    /*[decimal|upper-roman|lower-alpha]*/
}


/* 有序列表--二級列表字首數字樣式*/

#cnblogs_post_body ol ol li,
#cnblogs_post_body ul ol li {
    list-style-type: lower-roman;
}


/*================列表結束=============*/


/*================定義列表開始=============*/


/* 定義一個定義列表 */

#cnblogs_post_body dl {
    padding: 0;
}


/* 定義一個定義定義列表中的專案 */

#cnblogs_post_body dl dt {
    font-size: 1em;
    font-weight: bold;
    font-style: italic;
}


/* 定義定義列表中專案的描述 */

#cnblogs_post_body dl dd {
    margin: 0 0 1em;
    padding: 0 1em;
}


/*================定義列表結束=============*/


/*================任務列表開始=============*/


/*================任務列表結束=============*/


/*================目錄開始=============*/


/*================目錄結束=============*/


/*================表格開始=============*/


/* 定義一個表格 */

#cnblogs_post_body table {
    border-collapse: collapse;
    display: table!important;
    width: -webkit-fill-available;
}


/* 定義表格的行 */

#cnblogs_post_body table tr {
    background-color: white;
    margin: 0;
    padding: 0;
}


/* 表格的表頭 */

#cnblogs_post_body th {
    border: 2px solid #ccc !important;
    font-weight: bold;
    background-color: #f0f0f0;
    font-size: 16px;
    padding: 5px 10px;
}


/* 表格的主體內容 */

#cnblogs_post_body tbody {
    margin: 10;
    padding: 0;
}


/* 表格主體內容單元 */

#cnblogs_post_body tr td {
    border: 1px solid #ccc;
    font-size: 16px;
    color: #595959;
    padding: 5px 10px;
}


/*隔行改變行的背景色*/

#cnblogs_post_body table tr:nth-child(2n) {
    background-color: #f8f8f8;
}


/*================表格結束=============*/


/*================標題開始=============*/

#cnblogs_post_body h1,
#cnblogs_post_body h2,
#cnblogs_post_body h3,
#cnblogs_post_body h4,
#cnblogs_post_body h5,
#cnblogs_post_body h6 {
    margin-top: 20px;
    margin-bottom: 15px;
    padding: 0px;
    font-weight: bold;
}


/* 一級標題 */

#cnblogs_post_body h1 {
    display: block;
    font-size: 24px;
    text-align: left;
    color: #40b8fa;
    line-height: 1.5;
    /* 一級標題文字內容之前 h1 ::before  */
    padding-left: 45px!important;
    background-image: url(https://cdn.jsdelivr.net/gh/Sky-seeker/Pictrue_Bed/ico/MarkDown_CSS-h1_before.png);
    background-size: 40px;
    background-repeat: no-repeat;
    background-position: center left;
}


/* 二級標題 */

#cnblogs_post_body h2 {
    display: block;
    border-bottom: 3px solid #40b8fa;
    font-size: 22px;
    color: #40b8fa !important;
    /*相對定位元素的定位是相對其正常位置。*/
    /*  position: relative;*/
    /* 二級標題文字內容之前 h2 ::before  */
    padding-left: 40px!important;
    background-image: url(https://cdn.jsdelivr.net/gh/Sky-seeker/Pictrue_Bed/ico/MarkDown_CSS-h2_before.png);
    background-size: 35px;
    background-repeat: no-repeat;
    background-position: center left;
    /* 二級標題 字首 將 [#nice_h2 .prefix ] 中的[.prefix]替換為[::before]
    /* 二級標題 字首 將 [#nice_h2 .suffix ] 中的[.prefix]替換為[::after]	*/
    /* 
    content: "";    
    background-image: url();
    background-size: 20px;
    background-repeat: no-repeat;
    width: 20px;
    height: 20px;
    display: inline-block;
    margin-left: 6px;
    margin-right: 6px;
    margin-bottom: -4px;
  */
}


/* 三級標題 */

#cnblogs_post_body h3 {
    font-size: 20px;
    font-weight: bold;
    width: fit-content;
    border-bottom: 2px solid RGBA(79, 177, 249, 0.65);
    color: #40b8fa !important;
    /*三級標題文字內容之前 h3 ::before */
    padding-left: 30px!important;
    background-image: url(https://cdn.jsdelivr.net/gh/Sky-seeker/Pictrue_Bed/ico/MarkDown_CSS-h3_before.png);
    background-size: 25px;
    background-repeat: no-repeat;
    background-position: center left;
}


/* 四級標題*/

#cnblogs_post_body h4 {
    font-size: 18px;
    /* 四級標題文字內容之前 h4::before */
    padding-left: 30px!important;
    background-image: url(https://cdn.jsdelivr.net/gh/Sky-seeker/Pictrue_Bed/ico/MarkDown_CSS-h4_before.png);
    background-size: 25px;
    background-position: left;
    background-repeat: no-repeat;
    background-position: center left;
}


/* 五級標題 */

#cnblogs_post_body h5 {
    font-size: 16px;
    /* 五級標題文字內容之前 h4::before */
    padding-left: 20px!important;
    background-image: url(https://cdn.jsdelivr.net/gh/Sky-seeker/Pictrue_Bed/ico/MarkDown_CSS-h5_before.png);
    background-size: 15px;
    background-position: left;
    background-repeat: no-repeat;
    background-position: center left;
}


/* 六級標題*/

#cnblogs_post_body h6 {
    font-size: 16px;
}


/*================標題結束=============*/

參考資料


版權宣告:本文為「夢幻之心星」原創,依據 CC BY-NC-SA 4.0 許可證進行授權,轉載請附上原文出處連結及本宣告。


部落格園地址:https://www.cnblogs.com/Sky-seeker
微信公眾號:關注微信公眾號,獲取即時推送