基礎文字和字型樣式

在本文中,我們將開始您的旅程,幫助您掌握使用 CSS 樣式文字。在這裡,我們將詳細介紹文字/字型樣式的所有基本原理,包括設定字型粗細、字體系列和樣式、字型速記、文字對齊和其他效果,以及行高和字間距。

先決條件 HTML 基礎知識(學習 HTML 簡介),CSS 基礎知識(學習 CSS 簡介)。
目標 學習在網頁上設定文字樣式所需的基本屬性和技巧。

CSS 中的文字樣式化涉及哪些內容?

元素內的文字在元素的 內容框 內佈局。它從內容區域的左上角開始(對於 RTL 語言內容,則從右上角開始),並向行的末尾流動。到達末尾後,它向下移動到下一行,並再次流動到末尾。此模式重複,直到所有內容都放置在框中。文字內容的行為實際上類似於一系列內聯元素,它們彼此相鄰地在線上佈局,並且不會建立換行符,直到到達行尾,或者除非您使用 <br> 元素手動強制換行。

注意:如果以上段落讓您感到困惑,沒關係——請返回並複習我們的 盒子模型 文章,在繼續之前先複習一下盒子模型理論。

用於設定文字樣式的 CSS 屬性通常分為兩類,我們將在本文中分別介紹它們

  • 字型樣式:影響文字字型的屬性,例如,應用哪種字型、字型大小以及是否為粗體、斜體等。
  • 文字佈局樣式:影響文字間距和其他佈局特徵的屬性,允許操縱例如行間距和字間距,以及文字在內容框中的對齊方式。

注意:請記住,元素內的所有文字都被視為一個整體。您無法選擇和設定文字子部分的樣式,除非您將它們包裝在適當的元素(例如 <span><strong>)中,或者使用特定於文字的偽元素,如 ::first-letter(選擇元素文字的第一個字母)、::first-line(選擇元素文字的第一行)或 ::selection(選擇游標當前突出顯示的文字)。

字型

讓我們直接進入設定字型樣式的屬性。在本例中,我們將對以下 HTML 示例應用一些 CSS 屬性

html
<h1>Tommy the cat</h1>

<p>Well I remember it as though it were a meal ago…</p>

<p>
  Said Tommy the Cat as he reeled back to clear whatever foreign matter may have
  nestled its way into his mighty throat. Many a fat alley rat had met its
  demise while staring point blank down the cavernous barrel of this awesome
  prowling machine. Truly a wonder of nature this urban predator — Tommy the cat
  had many a story to tell. But it was a rare occasion such as this that he did.
</p>

您可以在 GitHub 上找到 完成的示例(另請參閱 原始碼)。

顏色

color 屬性設定所選元素的前景內容的顏色,通常是文字,但也可能包括其他一些內容,例如使用 text-decoration 屬性放置在文字上的下劃線或上劃線。

color 可以接受任何 CSS 顏色單位,例如

css
p {
  color: red;
}

這將導致段落變成紅色,而不是標準瀏覽器預設的黑色,如下所示

字體系列

要為文字設定不同的字型,您可以使用 font-family 屬性——這允許您指定瀏覽器要應用於所選元素的字型(或字型列表)。瀏覽器僅在訪問網站的機器上可用時才會應用字型;否則,它將只使用瀏覽器 預設字型。一個簡單的示例如下所示

css
p {
  font-family: Arial;
}

這將使頁面上的所有段落都採用 Arial 字型,該字型存在於任何計算機上。

Web 安全字型

說到字型可用性,只有特定數量的字型通常在所有系統上都可用,因此可以在沒有太多顧慮的情況下使用。這些就是所謂的Web 安全字型

大多數情況下,作為 Web 開發人員,我們希望對用於顯示文字內容的字型有更具體的控制權。問題是如何找到一種方法來了解哪種字型在用於檢視我們網頁的計算機上可用。在每種情況下都沒有辦法知道這一點,但已知 Web 安全字型在大多數最常用的作業系統(Windows、macOS、最常見的 Linux 發行版、Android 和 iOS)的幾乎所有例項中都可用。

隨著作業系統的不斷發展,實際 Web 安全字型的列表也會發生變化,但至少目前可以將以下字型視為 Web 安全字型(其中許多字型因 90 年代末和 21 世紀初微軟的Web 核心字型計劃而廣受歡迎)

名稱 通用型別 註釋
Arial sans-serif 通常認為最佳實踐是還將Helvetica作為Arial的首選替代方案,因為儘管它們的字型外觀幾乎相同,但Helvetica被認為具有更好的形狀,即使Arial的可用性更廣。
Courier New monospace 某些作業系統具有Courier New字型的替代(可能較舊)版本,稱為Courier。最佳實踐是將兩者都使用,並將Courier New作為首選替代方案。
Georgia serif
Times New Roman serif 某些作業系統具有Times New Roman字型的替代(可能較舊)版本,稱為Times。最佳實踐是將兩者都使用,並將Times New Roman作為首選替代方案。
Trebuchet MS sans-serif 使用此字型時應謹慎——它在移動作業系統上並不廣泛可用。
Verdana sans-serif

注意:在各種資源中,cssfontstack.com 網站維護著 Windows 和 macOS 作業系統上可用的 Web 安全字型的列表,這可以幫助您確定您認為適合使用的字型。

注意:有一種方法可以將自定義字型與網頁一起下載,以便您可以根據需要自定義字型使用方式:Web 字型。這稍微複雜一些,我們將在模組後面的 單獨的文章 中討論。

預設字型

CSS 為字型定義了五個通用名稱:serifsans-serifmonospacecursivefantasy。這些名稱非常通用,從這些通用名稱中使用的確切字型可能因每個瀏覽器和顯示它們的每個作業系統而異。它代表了一種最壞情況的場景,在這種情況下,瀏覽器將盡最大努力提供看起來合適的字型。serifsans-serifmonospace 非常容易預測,應該提供合理的結果。另一方面,cursivefantasy 則不太容易預測,我們建議謹慎使用它們,並在使用過程中進行測試。

五個名稱定義如下

術語 定義 示例
serif 具有襯線(在某些字型中,在筆畫末端看到的裝飾和其他小細節)的字型。
sans-serif 沒有襯線的字型。
monospace 每個字元寬度相同的字型,通常用於程式碼列表中。
cursive 旨在模擬手寫字型的字型,具有流暢、連線的筆畫。
fantasy 旨在裝飾的字型。

字型棧

由於您無法保證網頁上要使用的字型的可用性(即使是 Web 字型也可能由於某些原因而失敗),您可以提供一個字型棧,以便瀏覽器可以從中選擇多個字型。這涉及到一個由多個字型名稱(用逗號分隔)組成的 font-family 值,例如:

css
p {
  font-family: "Trebuchet MS", Verdana, sans-serif;
}

在這種情況下,瀏覽器從列表開頭開始,檢視該字型是否在機器上可用。如果可用,它會將該字型應用於所選元素。如果不可用,它會繼續下一個字型,依此類推。

最好在棧的末尾提供一個合適的通用字型名稱,以便如果列出的字型都不可用,瀏覽器至少可以提供大致合適的字型。為了強調這一點,如果沒有任何其他選項可用,則段落將使用瀏覽器的預設襯線字型(通常是 Times New Roman)——這對無襯線字型來說並不好!

注意:雖然您可以使用包含空格的字體系列名稱,例如 Trebuchet MS,而無需引用名稱,但為了避免轉義錯誤,建議引用包含空格、數字或除連字元以外的其他標點符號的字體系列名稱。

警告:任何可能被誤解為通用系列名稱或 CSS 全域性關鍵字的字體系列名稱都必須用引號括起來。雖然字體系列名稱可以包含為 <custom-ident><string>,但碰巧與 CSS 全域性屬性值(如 initialinherit)或 CSS 與通用字體系列名稱(如 sans-seriffantasy)具有相同名稱的字體系列名稱必須包含在帶引號的字串中。否則,字體系列名稱將被解釋為等效的 CSS 關鍵字或通用系列名稱。當用作關鍵字時,通用字體系列名稱(serifsans-serifmonospacecursivefantasy)和全域性 CSS 關鍵字**不得**用引號括起來,因為字串不被解釋為 CSS 關鍵字。

字體系列示例

讓我們在之前的示例中新增內容,為段落提供一個無襯線字型

css
p {
  color: red;
  font-family: Helvetica, Arial, sans-serif;
}

這將得到以下結果

字型大小

在我們上一模組的 CSS 值和單位 文章中,我們回顧了長度和尺寸單位。字型大小(使用 font-size 屬性設定)可以採用大多數這些單位(以及其他單位,例如 百分比)測量的值;但是,您用來設定文字大小的最常用單位是

  • px(畫素):您希望文字的高度(以畫素為單位)。這是一個絕對單位——在幾乎任何情況下,它都會在頁面上產生相同的最終計算字型值。

  • em單位:1個em等於當前正在設定樣式的元素的父元素上設定的字型大小(更具體地說,是父元素中包含的大寫字母M的寬度)。如果您有很多巢狀元素並設定了不同的字型大小,那麼這可能變得難以計算,但這是可行的,您將在下面看到。為什麼要費心?一旦您習慣了它,它就非常自然,並且您可以使用em來調整所有內容的大小,而不僅僅是文字。您可以使用em來調整整個網站的大小,這使得維護變得容易。
  • rem單位:它們的用法與em相同,只是1個rem等於文件根元素上設定的字型大小(即<html>),而不是父元素。這使得計算字型大小的數學運算變得更容易。

元素的font-size繼承自該元素的父元素。這一切都從整個文件的根元素開始——<html>——其標準font-size在所有瀏覽器中都設定為16px。根元素內的任何段落(或瀏覽器未設定不同大小的其他元素)最終大小都將為16px。其他元素可能具有不同的預設大小。例如,h1元素預設設定的大小為2em,因此最終大小將為32px

當您開始更改巢狀元素的字型大小時,事情會變得更加複雜。例如,如果您在頁面中有一個<article>元素,並將其font-size設定為1.5 em(這將計算為24 px的最終大小),然後希望<article>元素內的段落計算出的字型大小為20 px,那麼您將使用什麼em值呢?

html
<!-- document base font-size is 16px -->
<article>
  <!-- If my font-size is 1.5em -->
  <p>My paragraph</p>
  <!-- How do I compute to 20px font-size? -->
</article>

您需要將其em值設定為20/24,即0.83333333 em。數學運算可能很複雜,因此您需要小心如何設定樣式。最好在可以的情況下使用rem來保持簡單,並儘量避免設定容器元素的font-size

字型樣式、字型粗細、文字轉換和文字修飾

CSS提供了四個常用的屬性來更改文字的視覺粗細/強調

  • font-style:用於開啟或關閉斜體文字。可能的取值如下(除非出於某種原因您想關閉某些斜體樣式,否則您很少會使用它)
    • normal:將文字設定為普通字型(關閉現有的斜體)。
    • italic:將文字設定為使用字型的斜體版本(如果可用);如果不可用,則會使用傾斜代替斜體進行模擬。
    • oblique:將文字設定為使用模擬的斜體字型版本,透過傾斜普通版本建立。
  • font-weight:設定文字的粗細程度。如果您有許多字型變體可用(例如-light-normal-bold-extrabold-black等),則此屬性有許多可用的值,但實際上您很少會使用除normalbold之外的任何值
    • normalbold:普通和粗體字型粗細。
    • lighterbolder:將當前元素的粗細設定為比其父元素的粗細輕或重一個級別。
    • 100900:數值粗細值,如果需要,可以提供比上述關鍵字更細粒度的控制。
  • text-transform:允許您設定字型進行轉換。取值包括
    • none:防止任何轉換。
    • uppercase:將所有文字轉換為大寫。
    • lowercase:將所有文字轉換為小寫。
    • capitalize:將所有單詞的首字母大寫。
    • full-width:將所有字形寫入固定寬度的方塊內,類似於等寬字型,允許對齊例如拉丁字元以及亞洲語言字形(如中文、日語、韓語)。
  • text-decoration:設定/取消設定字型的文字修飾(您主要使用它在設定連結樣式時取消預設的下劃線)。可用的值是
    • none:取消設定任何已存在的文字修飾。
    • underline:給文字新增下劃線。
    • overline:給文字新增上劃線。
    • line-through:在文字上新增刪除線。
    您應該注意,text-decoration可以同時接受多個值,如果您想同時新增多個修飾,例如text-decoration: underline overline。另請注意,text-decorationtext-decoration-linetext-decoration-styletext-decoration-color的簡寫屬性。您可以使用這些屬性值的組合來建立有趣的視覺效果,例如:text-decoration: line-through red wavy

讓我們看看如何向我們的示例中新增幾個這些屬性

我們的新結果如下所示

css
html {
  font-size: 10px;
}

h1 {
  font-size: 5rem;
  text-transform: capitalize;
}

h1 + p {
  font-weight: bold;
}

p {
  font-size: 1.5rem;
  color: red;
  font-family: Helvetica, Arial, sans-serif;
}

文字陰影

您可以使用text-shadow屬性為文字應用陰影。它最多可以接受四個值,如下面的示例所示

css
text-shadow: 4px 4px 5px red;

這四個屬性如下所示

  1. 陰影相對於原始文字的水平偏移量——它可以接受大多數可用的CSS 長度和尺寸單位,但您最常使用px;正值將陰影向右移動,負值向左移動。此值必須包含。
  2. 陰影相對於原始文字的垂直偏移量。它的行為類似於水平偏移量,只是它上下移動陰影,而不是左右移動。此值必須包含。
  3. 模糊半徑:值越高,陰影擴散得越廣。如果未包含此值,則預設為0,這意味著沒有模糊。它可以接受大多數可用的CSS 長度和尺寸單位
  4. 陰影的基本顏色,它可以接受任何 CSS顏色單位。如果未包含,則預設為currentcolor,即陰影的顏色取自元素的color屬性。

多個陰影

您可以透過包含多個以逗號分隔的陰影值來為同一文字應用多個陰影,例如

css
h1 {
  text-shadow:
    1px 1px 1px red,
    2px 2px 1px red;
}

如果將其應用於Tommy The Cat示例中的h1元素,我們將得到以下結果

注意:您可以在Sitepoint文章Moonlighting with CSS text-shadow中看到更多有趣的text-shadow用法示例。

文字佈局

在基本字型屬性的基礎上,讓我們看看可以用來影響文字佈局的屬性。

文字對齊

text-align屬性用於控制文字在其包含內容框內的對齊方式。可用的值列在下面。它們的工作方式與在常規文字處理應用程式中的工作方式幾乎相同

  • left:左對齊文字。
  • right:右對齊文字。
  • center:居中對齊文字。
  • justify:使文字分散開來,改變單詞之間的間隙,以便所有文字行都具有相同的寬度。您需要謹慎使用此屬性——它可能看起來很糟糕,尤其是在應用於包含許多長單詞的段落時。如果您要使用此屬性,還應該考慮與其他屬性一起使用,例如hyphens,以便將一些較長的單詞換行。

如果我們將text-align: center;應用於示例中的h1,我們將得到以下結果

css
html {
  font-size: 10px;
}

h1 {
  font-size: 5rem;
  text-transform: capitalize;
  text-shadow:
    1px 1px 1px red,
    2px 2px 1px red;
  text-align: center;
}

h1 + p {
  font-weight: bold;
}

p {
  font-size: 1.5rem;
  color: red;
  font-family: Helvetica, Arial, sans-serif;
}

行高

line-height屬性設定每行文字的高度。此屬性不僅可以接受大多數長度和尺寸單位,還可以接受無單位值,該值用作乘數,通常被認為是最佳選擇。使用無單位值,font-size將被乘以併產生line-height。正文文字在行間距較大的情況下通常看起來更美觀,也更容易閱讀。推薦的行高約為1.5 – 2(雙倍行距)。要將文字行設定為字型高度的1.6倍,我們將使用

css
p {
  line-height: 1.6;
}

將其應用於示例中的<p>元素將得到以下結果

css
html {
  font-size: 10px;
}

h1 {
  font-size: 5rem;
  text-transform: capitalize;
  text-shadow:
    1px 1px 1px red,
    2px 2px 1px red;
  text-align: center;
}

h1 + p {
  font-weight: bold;
}

p {
  font-size: 1.5rem;
  color: red;
  font-family: Helvetica, Arial, sans-serif;
  line-height: 1.6;
}

字母和單詞間距

letter-spacingword-spacing屬性允許您設定文字中字母和單詞之間的間距。您不會經常使用這些屬性,但可能會發現它們在獲取特定外觀或提高特定密集字型的可讀性方面很有用。它們可以接受大多數長度單位

為了說明這一點,我們可以將一些單詞和字母間距應用到HTML示例中每個<p>元素的第一行,使用

css
p::first-line {
  letter-spacing: 4px;
  word-spacing: 4px;
}

這將呈現我們的HTML如下

css
html {
  font-size: 10px;
}

h1 {
  font-size: 5rem;
  text-transform: capitalize;
  text-shadow:
    1px 1px 1px red,
    2px 2px 1px red;
  text-align: center;
  letter-spacing: 2px;
}

h1 + p {
  font-weight: bold;
}

p {
  font-size: 1.5rem;
  color: red;
  font-family: Helvetica, Arial, sans-serif;
  line-height: 1.6;
  letter-spacing: 1px;
}

其他值得關注的屬性

以上屬性讓您瞭解如何在網頁上開始設定文字樣式,但還有許多其他屬性可以使用。我們只想在這裡介紹最重要的屬性。一旦您習慣了使用上述屬性,您還應該探索以下屬性

字型樣式

文字佈局樣式

  • text-indent:指定文字內容第一行開始前應留出多少水平空間。
  • text-overflow:定義如何向用戶發出未顯示的溢位內容的訊號。
  • white-space:定義如何處理元素內部的空格和關聯的換行符。
  • word-break:指定是否在單詞內換行。
  • direction:定義文字方向。(這取決於語言,通常最好讓 HTML 處理這部分,因為它與文字內容相關。)
  • hyphens:開啟或關閉支援語言的連字元功能。
  • line-break:放寬或加強亞洲語言的換行。
  • text-align-last:定義塊的最後一行或強制換行之前的行的對齊方式。
  • text-orientation:定義一行中文字的方向。
  • overflow-wrap:指定瀏覽器是否可以換行以防止溢位。
  • writing-mode:定義文字行是水平還是垂直佈局,以及後續行的流動方向。

字型簡寫

許多字型屬性也可以透過簡寫屬性 font 設定。它們的書寫順序如下:font-stylefont-variantfont-weightfont-stretchfont-sizeline-heightfont-family

在所有這些屬性中,只有font-sizefont-family 在使用 font 簡寫屬性時是必需的。

font-sizeline-height 屬性之間必須放置一個正斜槓。

完整的示例如下所示

css
font:
  italic normal bold normal 3em/1.5 Helvetica,
  Arial,
  sans-serif;

主動學習:玩轉文字樣式化

在本活動學習課程中,我們沒有為您準備任何具體的練習。我們只是希望您能很好地使用一些字型/文字佈局屬性。親身體驗一下您可以想出什麼!您可以使用離線 HTML/CSS 檔案執行此操作,也可以將您的程式碼輸入到下面的即時可編輯示例中。

如果您犯了錯誤,您可以隨時使用“重置”按鈕重置它。

總結

希望您喜歡本文中關於文字的練習!下一篇文章將為您提供有關設定 HTML 列表樣式 的所有必要知識。