搜尋

實用文字樣式

除了常見的文字樣式,CSS 也有一些相當實用的文字樣式,例如 text-overflow、text-transform、text-combine-upright、ruby-position、paint-order 等,透過這些文字樣式可以進行大小寫轉換、文字超過範圍的顯示行為、連字號或文字外框線等效果,這篇教學會介紹相關樣式的用法。

CSS 教學 - 實用文字樣式

實用文字樣式

下方列出實用的文字樣式屬性,這些樣式都具有繼承特性:

樣式屬性 屬性值 說明
text-transform capitalize、uppercase、lowercase、none、math-auto 文字大小寫轉換。
text-overflow clip、ellipsis 文字超過範圍的顯示行為。
text-combine-upright none、all 垂直水平書寫方向整合。
ruby-position over、under 標注文字的位置。
text-underline-offset auto、絕對長度單位、相對長度單位 底線上下定位。
text-underline-position auto、from-font、under 底線位置。
paint-order normal、stroke, fill 文字外框。

text-transform 文字大小寫轉換

text-transform 樣式屬性可以設定「文字大小寫轉換」,主要針對「英文字母語系」,具有下列幾種屬性值:

屬性值 說明
none 預設值,按照原本的大小寫。
capitalize 所有單字字首字母大寫。
uppercase 所有字母大寫。
lowercase 所有字母小寫。
math-auto 子元素若為單字母,會使用不同字體呈現 ( 表現數學公式參數 )。

下方範例會呈現這些屬性值的差異。

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

<!-- HTML 程式碼 -->
<h2>APPLE banana orange</h2>
<h2>APPLE banana orange</h2>
<h2>APPLE banana orange</h2>
<h2>APPLE banana orange</h2>
<!-- 注意下方子元素為單一字母的字型 -->
<h2>sin(<span>x</span>) + cos(<b>y</b>) + <span>sin(x)</span> + <span>cos(y)</span></h2>

<!-- CSS 程式碼 -->
<style>
  h2:nth-child(1) {text-transform: none;}
  h2:nth-child(2) {text-transform: capitalize;}
  h2:nth-child(3) {text-transform: uppercase;}
  h2:nth-child(4) {text-transform: lowercase;}
  h2:nth-child(5) {text-transform: math-auto;}
</style>

CSS 教學 - 設定文字樣式 - text-transform 文字大小寫轉換

text-overflow 文字超過範圍的顯示行為

text-overflow 樣式屬性可以設定「文字超過範圍的顯示行為」,需要搭配強制不換行 white-space: nowrap; 和超過裁切 overflow: hidden; 的樣式屬性才有作用,預設值 clip 表示超過範圍的文字會被裁切隱藏,改用 ellipsis 則右側結尾處會使用「...」表現這段文字後方省略了其他文字,在右到左書寫模式「...」會改到左側,下方範例會呈現這兩種屬性值的差異。

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

<!-- HTML 程式碼 -->
<h2>STEAM 教育學習網讓所有人都能輕鬆跨入 STEAM 的學習領域。</h2>
<h2>STEAM 教育學習網讓所有人都能輕鬆跨入 STEAM 的學習領域。</h2>
<h2>STEAM 教育學習網讓所有人都能輕鬆跨入 STEAM 的學習領域。</h2>

<!-- CSS 程式碼 -->
<style>
  h2 {
    width: 300px;
    height: 50px;
    border: 1px solid #000;
    text-align: center;
    overflow: hidden;
    white-space: nowrap;
  }
  h2:nth-child(1){text-overflow: clip;}
  h2:nth-child(2){text-overflow: ellipsis;}
  h2:nth-child(3){
    direction: rtl;
    text-overflow: ellipsis;
  }
</style>

CSS 教學 - 設定文字樣式 - text-overflow 文字超過範圍的顯示行為

text-combine-upright 垂直水平書寫方向整合

text-combine-upright 樣式屬性可以設定「垂直水平書寫方向整合」,預設值 none 表示當書寫方向改成垂直時,英文語數字會反轉 90 度,如果設定為 all,就可以讓英文或數字維持原本的水平方向,但需要注意如果英文字母或數字字數過多,因為水平方向大小仍然會維持「一個字的大小」,就會發生壓縮變形的狀況

下方範例中間的 div,因為後方「ABCDE」只透過一個 span 包覆,所以轉換成水平方向後大小就會被壓縮,而右邊的 div 因為將五個字母分別獨立,就會呈現正常的顯示模式。

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

<!-- HTML 程式碼 -->
<h2>中華民國 114 年 5 月 1 號,一起來唸 ABCDE</h2>
<h2>中華民國 <span>114</span> 年 <span>5</span> 月 <span>1</span> 號,一起來唸 <span>ABCDE</span></h2>
<h2>中華民國 <span>114</span> 年 <span>5</span> 月 <span>1</span> 號,一起來唸 <span>A</span><span>B</span><span>C</span><span>D</span><span>E</span></h2>
  

<!-- CSS 程式碼 -->
<style> 
  h2 {
    height: 320px;
    border: 1px solid #000;
    writing-mode: vertical-lr;
    float: left;
  }
  h2 span {
    text-combine-upright: all;
  };
</style>

CSS 教學 - 設定文字樣式 - text-combine-upright 垂直水平書寫方向整合

ruby-position 標注文字的位置

ruby-position 樣式屬性可以設定「標注文字的位置」,標注文字表示 <ruby><rt> 元素文字,主要作為文字的發音或注譯 ( 餐考「HTML 標注文字 ),預設值 over 表示標注文字位於文字上方,設定 under 會將標注文字移動到文字下方,下方範例會呈現兩種屬性值的差異。

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

<!-- HTML 程式碼 -->
<h2><ruby>床<rt>ㄔㄨㄤˊ</rt>前<rt>ㄑㄧㄢˊ</rt>明<rt>ㄇㄧㄥˊ</rt>月<rt>ㄩㄝˋ</rt>光<rt>ㄍㄨㄤ</rt></ruby></h2>
<h2><ruby>床<rt>ㄔㄨㄤˊ</rt>前<rt>ㄑㄧㄢˊ</rt>明<rt>ㄇㄧㄥˊ</rt>月<rt>ㄩㄝˋ</rt>光<rt>ㄍㄨㄤ</rt></ruby></h2>

<!-- CSS 程式碼 -->
<style> 
  h2 {font-size: 40px;}
  h2:nth-child(2){ruby-position: under;}
</style>

CSS 教學 - 設定文字樣式 - ruby-position 標注文字的位置

text-underline-offset 底線上下定位

text-underline-offset 樣式屬性可以設定「底線的上下定位」,當文字套用底線樣式後,可以設定底線往上移動還是往下移動,預設值 auto,設定時使用絕對長度單位或百分比單位,百分比單位表示「元素文字大小 x 百分比 + 1em」,下方範例會展示三種屬性值的效果,從中可以看出設定為「百分比」單位的底線,會自動加上 1em ( 30px x 0.1 = 3px )。

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

<!-- HTML 程式碼 -->
<h2>Hello OXXO!! ( auto )</h2>
<h2>Hello OXXO!! ( text-underline-offset: 20px; )</h2>
<h2>Hello OXXO!! ( text-underline-offset: 60%; )</h2>
<h2>Hello OXXO!! ( text-underline-offset: -15px; )</h2>
<h2>Hello OXXO!! ( text-underline-offset: -50%; )</h2>

<!-- CSS 程式碼 -->
<style>
  h2 {
    text-decoration: underline red;
    font-size: 30px;
  }
  h2:nth-of-type(2) {text-underline-offset: 20px;}
  h2:nth-of-type(3) {text-underline-offset: 60%;}
  h2:nth-of-type(4) {text-underline-offset: -15px;}
  h2:nth-of-type(5) {text-underline-offset: -50%;}
</style>

CSS 教學 - 實用文字樣式 - text-underline-offset 底線上下定位

text-underline-position 底線位置

text-underline-position 樣式屬性可以設定「底線位置」,此處的底線位置表示「預設參考位置」,無法透過數值調整,只能透過屬性值設定預設參考位置。

屬性值 說明
auto 預設值,根據瀏覽器定義放置 ( 通常在 baseline 下方 )。
from-font 根據字體的設定放置,如果字體沒有設定,使用 auto。
under 放置在 baseline 下方。

下方範例會呈現這些屬性值的微小差異,注意「pjQ」和「括號」之間的底線有些微不同。

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

<!-- HTML 程式碼 -->
<h2>gpjQ ( text-underline-position: auto; )</h2>
<h2>gpjQ ( text-underline-position: from-font; )</h2>
<h2>gpjQ ( text-underline-position: under; )</h2>

<!-- CSS 程式碼 -->
<style>
  h2 {
    text-decoration: underline red;
    font-size: 30px;
  }
  h2:nth-of-type(1) {text-underline-position: auto;}
  h2:nth-of-type(2) {text-underline-position: from-font;}
  h2:nth-of-type(3) {text-underline-position: under;}
</style>

CSS 教學 - 實用文字樣式 - text-underline-position 底線位置

paint-order 文字外框

paint-order 樣式屬性可以設定「文字外框」,需要搭配 webkit 相關樣式屬性 -webkit-text-stroke 才有作用,有下列幾種屬性值:

屬性值 說明
normal 預設值,正常渲染元素樣式,文字本身顏色會被邊框所覆蓋。
fill 文字本身顏色會被邊框所覆蓋。
stroke 文產生邊框之後再進行填充,正常呈現文字顏色。
stroke fill 文產生邊框之後再進行填充,正常呈現文字顏色。

下方範例呈現這些屬性值的差異。

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

<!-- HTML 程式碼 -->
<h2>oxxo.studio</h2>
<h2>oxxo.studio</h2>
<h2>oxxo.studio</h2>
<h2>oxxo.studio</h2>

<!-- CSS 程式碼 -->
<style> 
  h2 {
    font-size: 50px;
    -webkit-text-stroke: 5px orange;
    margin: 10px;
  }
  h2:nth-child(1){paint-order: normal;}
  h2:nth-child(2){paint-order: fill;}
  h2:nth-child(3){paint-order: stroke;}
  h2:nth-child(4){paint-order: stroke fill;}
</style>

CSS 教學 - 設定文字樣式 - paint-order 文字外框

小結

雖然大部分的情形都用不到這篇教學所介紹的文字樣式,不過像是注音標註的位置、多餘的文字隱藏後產生「...」,甚至是英文字母的大小寫轉換...等其實都相當實用,如果有機會,不妨運用這些文字樣式,替網頁的文字或選單增添更多變化。

意見回饋

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

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則 CSS 常用樣式屬性

CSS 選擇器

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

數值與單位

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

規則與定義

變數 ( Variables ) 媒體查詢 ( @media ) 容器查詢 ( @container ) 自訂屬性值 ( @property ) 匯入樣式 ( @import ) 分層優先順序 ( @layer )

函式類型

數學計算 文字與清單計數 形狀與線段 路徑 ( path ) 生成內容與引號

顏色與濾鏡

顏色單位 色彩模型 漸層色 影像濾鏡 ( filter ) 背景濾鏡 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字與段落

設定字型 ( font-family ) 使用外部字型 定義字型 ( @font-face ) 文字尺寸 文字樣式 ( 常用 ) 文字樣式 ( 其他實用 ) 文字樣式 ( 特殊用途 ) 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 文字自動分欄

元素容器

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

背景與陰影

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

清單與表格

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

基本排版與定位

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

Flexbox 彈性排版

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

Grid 網格排版

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

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 自訂動畫路徑 ( offset ) 動畫觸發事件 多重動畫的權重與順序

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask ) 物件填滿方式與定位 轉換函式 ( transform ) 平移、旋轉與縮放 3D 轉換與透視 3D 正多面體

視窗與使用者行為

捲軸樣式 ( scrollbar ) 滑鼠游標圖示 ( cursor ) 滑鼠事件 ( pointer-events ) 使用者選取 ( user-select ) 捲動行為 ( scroll、overscroll )

範例效果

CSS 圓餅圖 CSS 跑馬燈 Google 載入動畫 漸層色的轉場與動畫 電子時鐘數字 不規則形狀動畫