字體 - daniel-qa/Vue GitHub Wiki
https://buttaiwan.github.io/bpmfvs/
源流明體
https://github.com/ButTaiwan/bpmfvs/releases?utm_source=chatgpt.com
- 引用注音字體
@font-face {
font-family: 'BpmfGenRyuMin'; /* 工程用 */
src: url('/fonts/BpmfGenRyuMin-R.ttf') format('truetype');
}
使用時:
body {
font-family: 'BpmfGenRyuMin', '源流注音明體', serif;
}
實際例子:Ruby Annotation(回到字嗨)
html<!-- Character 層:纯編碼 -->
<ruby>
字<rt>ㄗˋ</rt>
</ruby>
<!-- 渲染時 Glyph 層:選擇具體字型 -->
<ruby style="font-family: 'Serif'">
字<rt>ㄗˋ</rt>
</ruby>
<!-- 換字型 → 同一個 Character,但 Glyph 不同 -->
<ruby style="font-family: 'Kai'">
字<rt>ㄗˋ</rt>
</ruby>
看起來一樣都是「字」,但視覺效果不同(Glyph不同)
- 用「字」舉例,最清楚
Character(字符)
定義:「字」這個漢字的「身份」
編碼:U+5B57
英文代碼:
const char = "字"; // ← 這就是 Character
console.log(char.charCodeAt(0)); // 23383 (U+5B57)
Glyph(字形)
同一個 Character(U+5B57),卻有不同的 Glyph:
- 層級:視覺/渲染層
- 一個 Character 可以有多個 Glyph(不同字型的表現)
- 例:U+5B57 在宋體、楷體、黑體都是不同 Glyph
- 由「字型檔案」決定如何畫
渲染流程:
Character(U+5B57)
↓
查詢字型檔案(字.ttf)
↓
找到對應的 Glyph(某個座標點的筆畫集合)
↓
繪製成像素
↓
你看到的「字」
┌─────────────┬─────────────┬─────────────┐
│ 宋體 │ 楷體 │ 黑體 │
├─────────────┼─────────────┼─────────────┤
│ 字 │ 字 │ 字 │
│ (細直筆) │ (撇捺清楚) │ (粗粗壯壯) │
└─────────────┴─────────────┴─────────────┘
同一個編碼 U+5B57,3個不同的 Glyph
- 什麼是「漢字」?
在電腦層面,「漢字」是「編碼」
你打:ㄅㄆㄇ(注音輸入法)
↓
IME 轉換
↓
產生:U+5B57(Unicode 編碼)
↓
渲染成:字(視覺上看到的字形)
「漢字」 = 一個 Unicode 碼位(Code Point)
網頁用 或 <textarea>,瀏覽器直接接收「漢字」
IME 是作業系統層面的東西(Windows、Mac、Linux 各自處理)
網頁無法控制 IME
- 結論先講(很重要)
👉 沒有一種「字型」是你輸入字碼就自動變成「中文 + 注音」的
因為這件事其實拆成兩層:
| 層級 | 負責什麼 |
|---|---|
| 輸入法(IME) | 你打ㄅㄆㄇ → 變成「漢字」 |
| 字型(Font) | 決定字長怎樣 |
| 排版(Layout) | 決定注音顯示在哪 |