搜尋

特殊文字樣式

除了常見的文字樣式,CSS 也有一些針對「特殊字型」或部分瀏覽器特有的樣式,例如 font-stretch、font-kerning、font-smooth、font-variant、font-synthesis、font-feature-settings 等,這些樣式或許支援度不高,但如果字型支援或未來瀏覽器支援,將可以實現例如文字寬度、平滑化、變體、合成等效果,這篇教學會介紹這些 CSS 的特殊文字樣式。

CSS 教學 - 特殊文字樣式

特殊文字樣式

下方列出特殊的文字樣式屬性 ( 都具有繼承特性,但這些屬性支援度都不太好,大多數還需要搭配 OpenType 字型 ):

樣式屬性 屬性值 說明
font-stretch ultra-condensed、extra-condensed
condensed、semi-condensed
normal
semi-expanded、expanded
extra-expanded、ultra-expanded
文字寬度。
font-kerning auto、normal、none 文字間距微調。
font-smooth basic ( auto、never、always )
-webkit- (auto、none、subpixel-antialiased、antialiased)
-moz- ( auto、grayscale )
文字平滑化。
font-variant 目前支援 ( normal、none、small-caps )
font-variant-caps
font-variant-numeric
font-variant-alternates
font-variant-ligatures
font-variant-east-asian
文字替代與變體 ( OpenType 為主 )。
font-feature-settings normal、feature-tag-value 字型進階排版設定 ( OpenType )。
font-synthesis none、weight、style、small-caps、position 文字合成。

font-stretch 文字寬度

font-stretch 樣式屬性可以設定「文字的寬度」,不同字型的寬度也不相同,下方列出相關屬性值:

屬性數值 正常寬度的百分比
ultra-condensed 50%
extra-condensed 62.5%
condensed 75%
semi-condensed 87.5%
normal 100%
semi-expanded 112.5%
expanded 125%
extra-expanded 150%
ultra-expanded 200%

CSS 教學 - 設定文字樣式 - font-weight 文字粗細

幾乎所有的字型都支援 normal 屬性值,其他屬性則看字型是否支援 ( 參考「@font-face 定義字型」),舉例來說,Google Fonts 的 Anek Malayalam 字型就支援多種寬度,下方的範例使用不同的 font-stretch 屬性數值改變文字寬度。

線上展示:https://codepen.io/oxxo/pen/XWweNor

<!-- HTML 程式碼 -->
<h3 class="a">Hello OXXO!! (font-stretch: normal;)</h3>
<h3 class="b">Hello OXXO!! (font-stretch: ultra-condensed;)</h3>
<h3 class="c">Hello OXXO!! (font-stretch: condensed;)</h3>

<!-- CSS 程式碼 -->
<style>
  @import url('https://fonts.googleapis.com/css2?family=Anek+Malayalam:wdth,[email protected],100..800&display=swap');
  h3 {
    margin: 5px;
    font-family: "Anek Malayalam", sans-serif;
  }
  .a {font-stretch: normal;}
  .b {font-stretch: ultra-condensed;}
  .c {font-stretch: ultra-expanded;}
</style>

CSS 教學 - 設定文字樣式 - font-stretch 文字寬度

font-kerning 文字間距微調

font-kerning 樣式屬性可以設定「文字間距微調」,下方列出相關屬性值:

屬性數值 說明
auto 預設值,根據作業系統決定是否微調文字間距。
normal 微調文字間距。
none 不微調文字間距。

下方的範例使用 Verdana 字型,並用不同的 font-kerning 屬性數值調整文字間距,對於不支援 font-kerning 的字型則沒有效果,就算有支援的字型,整體差異也不會太大 ( 下圖紅線可以看到差異 )。

線上展示:https://codepen.io/oxxo/pen/zYQENwB

<!-- HTML 程式碼 -->
<h3 class="a">WoW Let's "OXXO"!! (font-kerning:auto;)</h3>
<h3 class="b">WoW Let's "OXXO"!! (font-kerning:normal;)</h3>
<h3 class="c">WoW Let's "OXXO"!! (font-kerning:none;)</h3>

<!-- CSS 程式碼 -->
<style>
  h3 {
    margin: 5px;
    font-family: Verdana;
    font-weight: normal;
  }
  .a {font-kerning: auto;}
  .b {font-kerning: normal;}
  .c {font-kerning: none;}
</style>

CSS 教學 - 設定文字樣式 - font-kerning 文字間距

font-smooth 文字平滑化

font-smooth 樣式屬性可以設定「文字平滑化」,讓瀏覽器渲染文字時,去除文字邊緣的鋸齒化,這個樣式在高解析度的 Retina 顯示器中效果特別好 ( 但文字粗細會變得比較細 ),不過因為目前這個樣式屬性還沒有列為標準樣式,在不同的瀏覽器可能需要使用不同的屬性名稱,例如在 Chrome 等 webkit 瀏覽器,需要使用 -webkit-font-smoothing,Firefox 則使用 -moz-osx-font-smoothing,下方列出相關屬性值:

屬性數值 -webkit- -moz- 正常寬度的百分比
auto auto auto 預設值,根據作業系統決定是否平滑化。
never none - 不平滑化。
always subpixel-antialiased grayscale 平滑化。
- antialiased - 針對 Retina 顯示器平滑化。

下方的範例使用不同的 font-smooth 屬性數值讓文字平滑化。

線上展示:https://codepen.io/oxxo/pen/ZENXBgg

<!-- HTML 程式碼 -->
<h3 class="a">Hello OXXO!! (預設值)</h3>
<h3 class="b">Hello OXXO!! (平滑化)</h3>
<h3 class="c">Hello OXXO!! (沒有平滑化)</h3>

<!-- CSS 程式碼 -->
<style>
  h3 {
    margin: 5px;
    font-size: 30px;
  }
  .b {
    font-smooth: always;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
  }
  .c {
    font-smooth: never;
    -webkit-font-smoothing: none;
  }
</style>

CSS 教學 - 設定文字樣式 - font-smooth 文字平滑化

font-variant 文字替代與變體

font-variant 樣式屬性可以設定「文字變體」,是集合下列幾種樣式屬性的簡寫,指定的數值時,等同指定樣式屬性指定了數值 ( 大多數僅支援部分 OpenType 字型,且各個瀏覽器支援度並不一致 ),下方列出相關屬性值:

下方的範例使用不同的 font-variant 屬性數值產生的文字效果 ( 支援度根據不同瀏覽器與字型而定 )。

線上展示:https://codepen.io/oxxo/pen/YzbrZGB

<!-- HTML 程式碼 -->
<h3 class="a">Hello Oxxo!! 3/10 (font-variant: small-caps;)</h3>
<h3 class="b">Hello Oxxo!! 3/10 (font-variant: lining-nums slashed-zero;)</h3>

<!-- CSS 程式碼 -->
<style>
  h3 {
    margin: 5px;
    font-weight: normal;
    font-family: "Verdana";
  }
  .a {
    font-variant: small-caps;
  }
  .b {
    font-variant: lining-nums slashed-zero;
  }
</style>

CSS 教學 - 設定文字樣式 - font-variant 文字替代與變體

font-feature-settings 字型進階排版設定

font-feature-settings 樣式屬性主要針對 OpenType 字型進行「進階排版設定」,可以針對特定功能的字型,設定是否開啟字型內建的特性,通常會將其作為 @font-face 的描述子使用,下方列出相關屬性值:

屬性數值 說明
normal 預設值。
feature-tag-value OpenType 字型標籤,參考「Feature Tags」。

下方的範例呈現相關用法 ( 因手邊沒有相關字型可以測試,僅使用程式碼說明 )。

@font-face {
  font-family: 字型名稱;
  src: url("字型檔案.otf");
  font-feature-settings: "swsh" 1;
}
.swshFont {
  font-family: 字型名稱;
}

font-synthesis 文字合成

font-synthesis 樣式屬性主要針對部分字型進行「文字合成」,可以針對缺少粗體或斜體的字型,設定遇到該樣式時要採用的字型,下方列出相關屬性值:

屬性數值 說明
none 不合成,預設值。
weight 合成缺少的粗體字。
style 合成缺少的斜體字。
small-caps 合成缺少的小型大寫字。
position 合成缺少的下標和上標字。

下方的範例呈現相關用法 ( 不過因為常用的字型大多都支援粗體斜體,因此僅使用程式碼說明 )。

.a {
  font-synthesis: style weight;
}
.b {
  font-synthesis: style small-caps position;
}

小結

這篇教學所介紹的文字樣式,大多是比較冷門,或針對特定字型而設定的樣式,整體來說用途不大,且瀏覽器支援度也不高,如果有時間的話再嘗試看看即可。

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

關鍵字與文字數值 長度與角度單位 顏色單位 位置名稱與時間單位

變數與內容函式

變數 數學計算 文字與清單計數 生成內容與引號

顏色與濾鏡

色彩模型 漸層色 影像濾鏡

文字樣式

使用通用字型 使用外部字型 @font-face 定義字型 文字尺寸 常用文字樣式 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 特殊文字樣式

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬度與高度 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 影像邊框 輪廓 ( outline ) 可見性與透明度 內容溢出與裁切

背景與陰影

背景顏色 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 定義計數規則 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 定位 ( position )

Flexbox 彈性排版

Flexbox 彈性盒子 Flexbox 對齊方式 Flexbox 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 動畫觸發事件 多重動畫的權重與順序

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask )