根據使用者的偏好調整字型,讓他們能以最舒適的方式閱讀內容。
讓使用者參與設計過程,對使用者、設計師和開發人員來說都是令人振奮的體驗。使用者可以進入你的體驗,並順暢地開始觀看內容,他們的偏好設定會充分整合到設計結果中。
這篇網誌文章探討如何搭配使用 CSS 媒體查詢和可變字型,進一步調整閱讀體驗。字型等級和粗細可透過 font-variation-settings
自訂,方便根據各種偏好設定和情境進行微調,例如偏好深色模式或高對比模式。我們可以根據這些偏好設定,為使用者體驗量身打造可變字型。
- 深色模式的漸層效果略有減少。
- 高對比模式會使用更粗的字型。
- 低對比度會使用較細的字型。
請跟著我們瞭解 CSS 和可變字型的各個部分,看看如何實現這個有意義的時刻!
開始設定
為了著重於 CSS 和字型變體設定值,同時提供可供讀取和查看的內容,以下標記可供您預覽工作:
<h1>Variable font weight based on contrast preference</h1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Officia, quod? Quidem, nemo aliquam, magnam rerum distinctio
itaque nisi nam, cupiditate dolorum ad sint. Soluta nemo
labore aliquid ex, dicta corporis.
</p>
不必新增任何 CSS,字型大小就會自動配合使用者偏好設定。
以下是另一個示範影片,說明以像素設定 font-size
會如何壓縮所有使用者偏好設定,以及為何應以 rem 設定字型大小:
最後,為了將示範內容置中並提供支援,我們加入了一些 CSS:
@layer demo.support {
body {
display: grid;
place-content: center;
padding: var(--size-5);
gap: var(--size-5);
}
h1 {
text-wrap: balance;
}
}
透過這個示範設定,您可以開始測試及導入這項實用的排版 UX 功能。
載入 Roboto Flex 變數字型
自動調整策略取決於具有有意義自訂軸的變數字型,具體來說,您需要 GRAD
和 wght
。本文的目標是自動調整使用者偏好設定,包括色彩配置和對比度,這兩者都會根據使用者偏好設定調整這些軸。
使用 CSS 的 @font-face
API 載入可變字型:
@font-face {
font-family: "Roboto Flex";
src: url('https://assets.codepen.io/2585/RobotoFlex') format('truetype');
}
接著將字型套用至部分內容。下列 CSS 會將其套用至所有項目:
@layer demo.support {
body {
font-family: Roboto Flex;
}
}
運用 CSS 自訂屬性和媒體查詢
載入字型後,您可以查詢使用者偏好設定,並調整可變字型設定以符合偏好設定。
沒有偏好設定時的設定 (預設)
以下初始樣式將是預設樣式,或者換句話說,是沒有任何偏好設定的使用者所看到的樣式。
@layer demo {
body {
--base-weight: 400;
--base-grade: 0;
font-variation-settings:
"wght" var(--base-weight),
"GRAD" var(--base-grade)
;
}
}
偏好高對比度時的設定
如果使用者在系統設定中偏好高對比度,請將 --base-weight
值從 400
增加至 700
:
@layer demo {
@media (prefers-contrast: more) {
body {
--base-weight: 700;
}
}
}
現在閱讀時的對比度更高。
偏好低對比度時的設定
如果使用者在系統設定中偏好低對比度,請將 --base-weight
值從 400
減少至 200
:
@layer demo {
@media (prefers-contrast: less) {
body {
--base-weight: 200;
}
}
}
現在閱讀時的對比度較低。
偏好設定為深色模式時的設定
@layer demo {
@media (prefers-color-scheme: dark) {
body {
--base-grade: -25;
}
}
}
現在已考量到深色背景上的淺色文字與淺色背景上的深色文字,在感知上的差異。
所有人皆可一起分享
@layer demo {
body {
--base-weight: 400;
--base-grade: 0;
font-variation-settings:
"wght" var(--base-weight),
"GRAD" var(--base-grade)
;
}
@media (prefers-contrast: more) {
body {
--base-weight: 700;
}
}
@media (prefers-contrast: less) {
body {
--base-weight: 200;
}
}
@media (prefers-color-scheme: dark) {
body {
--base-grade: -25;
}
}
}
或者,為了好玩,也可以一起使用 CSS 巢狀結構:
@layer demo {
body {
--base-weight: 400;
--base-grade: 0;
font-variation-settings:
"wght" var(--base-weight),
"GRAD" var(--base-grade)
;
@media (prefers-contrast: more) { --base-weight: 700 }
@media (prefers-contrast: less) { --base-weight: 200 }
@media (prefers-color-scheme: dark) { --base-grade: -25 }
}
}
系統會根據使用者的偏好設定調整字型,提供最佳閱讀體驗。完整原始碼請見下方的 Codepen。