這篇文章不是給讀者看的,是給元件看的:每一種區塊都在這裡出現一次,改樣式時一頁看完晝、夜讀與手機寬度。
文字與行內元素
一般段落裡會有粗體、斜體(中文不建議用)、刪除線、行內程式碼 useEffect 與 pnpm run dev、
外部連結 TanStack Start、GitHub 連結,
還有站內連結 回到文章列表。註腳也要能用1,同一個註腳可以引用兩次1,再來一個2。
按 Ctrl+K 開啟搜尋(小寫 Esc 也是同樣樣式)。
日文的漢字可以標振假名,冷僻字也能標注音:馨。
這句話後面有一則旁註桌機顯示在段落右側;手機點編號才展開。,
再來一則旁註整篇連號,支援 markdown 與 code。看編號有沒有接著算。
用螢光筆畫重點,用朱筆劃底線、刪掉這句、
把關鍵字圈起來或框起來;也能換顏色、換筆色。
跨行也可以:這是一段比較長、在窄螢幕上會折成兩行以上的螢光筆標記,每一行都會各自畫上一筆,不會只畫在第一行。
清單
- 無序清單第一項
- 第二項,裡面有
code- 巢狀項目
- 第三項
- 有序清單
- 第二步
- 第三步
- 已完成的待辦
- 還沒做的待辦
表格
| 元件 | 用途 | 狀態 |
|---|---|---|
Alert | 提示、警告 | ✅ |
Tabs | 多語言程式碼切換 | ✅ |
Benchmark | 效能比較 | ✅ |
數學
行內公式 ,區塊公式:
程式碼
單行指令(不顯示行號):
pnpm --filter tan-blog dev高亮行 {2,4-5},第 4 行很長(測試自動換行與橫向捲動):
import { createServerFn } from '@tanstack/react-start'
const greet = createServerFn({ method: 'GET' })
.handler(async () => {
const message = 'hello from the server, this line is intentionally rather long so we can test wrapping behaviour on narrow screens'
return { message }
})超過 15 行(預設收合、底部淡出、展開/收合後捲回區塊開頭):
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
def main():
for i in range(10):
print(i, fib(i))
if __name__ == "__main__":
main()
# 下面多寫幾行讓它超過 15 行
x = 1
y = 2
z = x + y
print(z)各語言圖示:
export const Hello = () => <p>Hello</p>{ "name": "sao-blog", "private": true }fn main() { println!("hello"); }package mainFROM node:22-alpineGet-ChildItem -Recurseexample.com { reverse_proxy localhost:3000 }沒有標記語言的程式碼(顯示「純文字」)檔名標題 title="...":
import { defineConfig } from 'vite'
export default defineConfig({ server: { port: 3004 } })差異標記 // [!code ++]、// [!code --](複製時不含刪除行):
const app = new Elysia()
.use(cors())
.use(cors({ origin: 'https://sao.blog' }))
.listen(3000)聚焦 // [!code focus](其餘行淡掉,滑過恢復)與 // [!code highlight]:
export async function loader() {
const post = await getPost()
if (!post) throw notFound()
return post
}提示
附註
小提醒
code 與連結。完成
注意
這個 API 在下一版會移除。
內文可以有好幾段,也可以放清單:
- 第一點
- 第二點
警告
rm -rf /。引言
其實地上本沒有路,走的人多了,也便成了路。
沒有署名、info 語意色的引言。
warning 語意色的引言。
success 語意色的引言。
一般的 markdown 引言,不用斜體。
第二段。
折疊
一致的規則讓每個新元件都「長得像這個站」,不用每次重新決定顏色和邊框。
找得到:收起的內容用 hidden="until-found" 留在頁面裡,用瀏覽器的頁內搜尋找這段文字會自動展開。
console.log('accordion')可同時展開多項:
問答模式 variant="faq":
可以,註明出處並附上原文連結即可。
/rss.xml。分頁
只放一段程式碼時,程式碼貼齊外框、工具浮在右上角:
console.log('hi')print('hi')分頁裡放一般文字時,會有內距和紙色底。
預設選第二個分頁、分頁很多(窄螢幕橫向捲動):
圖片
預設外框(髮絲線+柔影),alt 當圖說並自動編號:
山谷裡的晨霧(預設外框)
截圖襯底:
桌上的筆電(截圖襯底)
拍立得(直式照片):
午睡的小狗
裝飾圖(alt 以 _ 開頭,不顯示圖說):
輪播
圖表
進度條
效能比較
越低越好(自動找出最佳、其餘標倍數):
越高越好、手動標記:
Playground
<button id="b">Click</button>
執行後,console 的輸出會出現在這裡。
import { useState } from 'react'
export default function App() {
const [n, setN] = useState(0)
return <button onClick={() => setN(n + 1)}>clicked {n} times</button>
}
執行後,console 的輸出會出現在這裡。
步驟
安裝 Docker
Bash curl -fsSL https://get.docker.com | sh寫好 compose 檔
建一個
compose.yaml,內容支援任意 markdown。啟動服務
執行docker compose up -d,打開 http://localhost:3000。
檔案樹
apps/
tan-blog/
src/
components/
mdx/
- blocks.css 文章區塊的共用樣式
- DESIGN.md設計原則
renderers/
- …
- styles.css
- vite.config.ts建置設定
packages/
mdx/
- package.json
- README.md
連結卡片
Ttanstack.comtanstack.com/start/latest Bbun.shbun.shgithub.com/owner/repo 會自動變成 GitHub 卡片(星星、語言、過去一年的 commit):
TanStack/router
Eexample.com手動指定標題抓不到預覽時用 title / description 補上。example.com/no-preview
終端機
靜態(預設):指令前有提示字元,複製只會複製指令。
# 安裝相依套件 $ pnpm install Lockfile is up to date, resolution step is skipped Packages: +1287 Done in 4.2s $ pnpm --filter tan-blog dev VITE v8.3.4 ready in 1830 ms ➜ Local: http://localhost:3004/
animate:捲到才逐行打出來,點一下跳到結尾。
PS C:\code> git status On branch main nothing to commit, working tree clean PS C:\code> git log --oneline -1 ace150b feat(tan-blog): Mark 手繪標記 $
推文
網址也會自動變成推文卡片(含影片封面):
便條紙
捲到這裡時,這個螢光筆標記和圈圈才會畫上去。
前後對比
影片
註腳
-
這是一個註腳,文末的返回圖示會帶你回到引用的地方。 2