大字體排版設計:5種讓文字當主視覺的手法

多數排版教材都在教一件事,字體要克制、留白要留好、易讀擺第一順位。可是打開這幾年的品牌形象頁、設計工作室的作品集,你會看到一大票網站完全反著做,把一句話,甚至只有一個詞,直接撐滿整個螢幕,筆畫粗到誇張,尺寸大到早就超出「標題」該有的比例。這股風潮不是排版教材教錯了,而是網站設計的重心正在挪動。

這就是大字體排版設計的核心邏輯,不只是把字級調大一兩級,而是讓文字直接扛起原本得靠一張照片或一支插圖才撐得起的畫面份量,變成頁面裡真正的主視覺。這件事以前做不到,其實不是設計師不敢,而是瀏覽器技術跟不上,超大字級換一支手機螢幕,版面很容易整個跑掉;字重想混搭,也得多下載好幾套字型檔案,拖慢整頁載入。這幾年可變字型與新一代 CSS 函式陸續普及,這股風潮才真正落地成可以放心上線的做法。

先從最直接的一招看起,讓文字整個佔滿畫面,直接扛下主視覺的份量。

手法一:字級放大到佔滿版面,文字直接取代照片當主視覺

這一招的核心不是把字級放大兩三級,而是讓文字整個佔滿可視範圍,扛下原本要靠一張照片或一支插圖才撐得起的視覺份量。首頁首屏、品牌形象頁、行銷活動的著陸頁最常見這種做法,因為這幾個場合往往只需要一句話就把調性講完,不需要拼版面內容。蘋果官網的產品發表頁面就是常見的例子,整個畫面幾乎只剩一句超大標題,其餘留白,讓那句話直接扛下整頁的視覺重量。

仿瀏覽器視窗裡只放一句超大標題「字即畫面」、四周大量留白,示範字級放大到佔滿版面時文字如何直接取代照片成為主視覺
首屏只留一句超大標題、其餘留白,讓文字自己扛下原本要靠一張照片才撐得起的視覺份量。

不過這招有個前提,字數必須夠精簡才撐得住。中文字方塊本來就比英文字母佔的空間大,一句話能放到多大,跟這句話有幾個字直接綁在一起,並不是字級愈大愈好。中文標題若硬要塞進十幾個字還想放到佔滿螢幕,反而會讓每個字擠成一團,讀者第一眼抓不到重點。

接下來的問題是,字級這麼大,螢幕尺寸百百種,要怎麼讓它跟著裝置寬度縮放,又不會在手機上直接爆版。

用 CSS clamp(),讓超大字級不會爆版

傳統做法是用固定的中斷點切換字級,螢幕寬度跨過某個門檻,字級就跳一階。問題是螢幕介於兩個斷點之間的時候,字級沒辦法跟著慢慢變化,畫面看起來忽大忽小,像是被硬生生切了一刀。

CSS 的 clamp() 函式解決了這個問題。它一次接受三個值,分別是允許的最小字級、隨螢幕寬度變化的理想字級、還有允許的最大字級,寫法大致像這樣:

h1 {
  font-size: clamp(2rem, 8vw, 8rem);
}Code language: CSS (css)

中間那個理想值通常搭配 vw(viewport width)這種相對單位,讓字級跟著螢幕寬度平滑縮放。螢幕變窄,字級跟著慢慢縮小,碰到設定的最小值就停住,不會小到看不清楚;螢幕變寬,字級跟著放大,碰到最大值也會停住,不會大到失控。MDN 官方文件與 Google 的 web.dev 文件都把 clamp() 列為做流體排版(fluid typography)的標準做法,手機不會爆版,桌機也不會因為字級被鎖住,失去這招原本該有的視覺份量。

字級大小的問題解決了,同一句話裡還能再玩一層變化,就是筆畫粗細的落差。

手法二:粗細字重刻意混搭,做出畫面的節奏與張力

同一句話裡,故意讓幾個字用極粗字重,其他字用極細字重,靠「重量」而不是顏色去引導視線落在關鍵字上。整段文字如果同一個粗細到底,畫面很容易顯得扁平;粗細一旦拉開落差,眼睛自然會先停在最粗的那幾個字上。這招也常搭配「一個詞特別重、其餘字輕」的做法,把讀者注意力鎖定在整句話裡最想強調的那個詞。

同一句話上下對照:整句同一字重時畫面扁平,把關鍵字加到極粗、其餘壓到極細後,視線自然先落在最重的那幾個字上
粗細一旦拉開落差,眼睛會先停在最粗的那幾個字,靠「重量」而不是顏色帶動視線。

粗細對比有個色彩對比比不上的好處。色彩對比會受螢幕色域、環境光線影響,對色弱讀者來說,兩個顏色的差異可能根本感覺不出來;粗細對比不一樣,同一個字重差,在任何裝置、任何色覺條件下都看得出來,是相對穩定的視覺工具。

只是傳統做法要做出好幾種粗細,得分別下載並載入好幾套字重檔案,每多一套就多一次載入,拖慢整頁的速度。這個限制,靠可變字型幾乎整個解決了。

一個字型檔案跑出所有粗細:可變字型是什麼?

可變字型(variable fonts)把字重、寬度、傾斜角這些原本要切成一套一套獨立檔案的變化,做成可以連續調整的軸(axis),一個字型檔案就能涵蓋所有粗細與樣式。同一支字型檔案裡,想要多細就多細,想要多粗就多粗,甚至寬度、傾斜角都能連續調整,不必再另外準備檔案。

傳統做法是每一種粗細各自一個檔案,網站要用到細體、正常、粗體、特粗四種字重,就得載入四個檔案,每個都要花時間下載與解析。改用可變字型之後,一個檔案就能涵蓋這整個範圍,網站要載入的字型檔案數量大幅減少。Google Fonts 的官方知識庫與 MDN 官方文件都把可變字型列為現在做字體排版的建議做法,也讓「同一句話裡混搭好幾種粗細」在技術上變得輕量可行,甚至能做到使用者滑鼠移過去、粗細就即時跟著變化這種互動效果。

粗細落差只是操作文字份量的其中一種方式,另一種更進一步的做法,是把文字的形狀整個當成容器來用。

手法三:文字當容器,讓色彩與影像從字裡透出來

產品名稱疊上材質特寫、活動主視覺的字裡透出品牌主色漸層,這類效果背後的邏輯,是把文字的形狀當成一個容器,或者說一扇窗,底下塞漸層色、材質圖片,甚至一段影片,讓文字看起來像是被畫面填滿,而不是單純疊在圖片正上方的一層字。這種做法特別適合品牌識別感強、想強調「這個詞就是這個畫面」的情境。

深色底上一句大字用 background-clip 讓橘金漸層從字的形狀裡透出,示範把文字當容器、而它仍是可被選取與朗讀的真正文字
文字當容器:漸層被裁進字的形狀裡透出來,而它仍是真正的文字,不影響 SEO 與螢幕閱讀器。

要做出這種效果,有兩條技術路徑,做出來的視覺質感並不一樣,下面兩節分別拆開講。

不管走哪條路徑,都要提醒一件事,對比度不再是設計師能完全掌控的變數,底圖與文字形狀之間的反差,要事先確認夠不夠大,不然字會糊在畫面裡,讀者根本看不清楚寫了什麼。而且這只是視覺渲染上的效果,文字本身仍然是可以被讀取的真正文字,不影響 SEO、不影響複製貼上,螢幕閱讀器一樣能正常唸出來,跟把文字整個做成一張圖片放上去,是完全不同的兩件事。

background-clip:讓文字露出底下的圖片或漸層

background-clip: text 的原理,是把背景圖層裁切成文字的形狀,拿這個形狀當遮罩,只讓背景在文字的範圍內顯示出來。實際寫法只需要幾行:

.hero-text {
  background: linear-gradient(90deg, #ff6a00, #ffd200);
  background-clip: text;
  color: transparent;
}Code language: CSS (css)

要讓效果生效,文字本身的顏色必須設成透明,底下的漸層或圖片才透得出來,這一步是最容易漏掉的地方,漏了這行,畫面看起來就像效果完全沒作用。MDN 官方文件對這個屬性的瀏覽器支援度與寫法都有完整說明,實作前建議先確認目標瀏覽器是否支援。

mix-blend-mode:讓文字和背景相融,不是疊在上面

mix-blend-mode 走的是另一條路,讓文字圖層和底下的圖片,用指定的方式做顏色運算,例如相乘、差值,做出文字和背景「融在一起」的層次感,而不是單純蓋在圖片正上方。只要一行就能套用:

.hero-text {
  mix-blend-mode: difference;
}Code language: CSS (css)

background-clip 的差別在於,一個是把底圖挖洞透出來,另一個是兩層顏色互相運算出新的結果,兩種做法呈現的視覺質感不同,可以依畫面想要的效果挑選。MDN 官方文件列出好幾種混合模式,效果都不太一樣,實際動手切換過幾種再定案,會比光用想的準確。

以上兩種做法都還停留在畫面靜止的狀態,如果讓文字跟著使用者的捲動或滑鼠即時變化,又是另一個層次。

手法四:文字跟著捲動或滑鼠移動,變成會動的介面

這招不是加個淡入淡出效果就算了事,而是讓文字隨著捲動位置或滑鼠位置即時變形、位移、改變粗細,標題本身變成一個會回應使用者行為的介面元件,不再只是靜態內容。形象頁、作品集這類願意花版位經營體驗的頁面很適合這麼做;行銷落地頁就要更節制一點,動態元素放太多,反而會拖慢訪客完成轉換動作的速度。

實作這件事,以前得靠 JavaScript 自己監聽捲動位置或滑鼠移動,一行一行計算位移量。現在瀏覽器已經有原生的捲動驅動動畫可以用,不必自己從零寫監聽程式碼,這也是接下來要拆的第一個技術重點。

捲動觸發:文字隨頁面捲動變形或位移

要讓文字跟著捲動變化,有兩條實作路徑。一條是用 JavaScript 的 Intersection Observer API 監聽元素進入或離開可視範圍的時機,自己計算該套用多少位移量,這條路彈性最大,但程式碼也得自己維護。另一條是直接用瀏覽器原生的 CSS 捲動驅動動畫(scroll-driven animations),把動畫的進度直接綁定到捲動位置,不必自己寫監聽器,通常效能也更好,程式碼量也少很多。MDN 官方文件對這兩種做法都有完整說明,能依專案需求的彈性程度挑一條路走。

動態文字也要留意「減少動態」的使用者設定

有前庭功能敏感問題的使用者,看到大範圍的位移、縮放動畫容易感到暈眩不適,不少人會在作業系統裡開啟「減少動態效果」這個設定。網站端該用 prefers-reduced-motion 這個媒體查詢去判斷使用者是否開了這個設定,一旦偵測到,就該停用非必要的位移與縮放動畫,只留下內容本身。判斷邏輯寫出來大致是這樣:

@media (prefers-reduced-motion: reduce) {
  .hero-text {
    animation: none;
  }
}Code language: CSS (css)

這不是做完主要效果之後再想到要不要補的加分項,而是 W3C 的 WCAG 2.2 規範裡明列的檢核項目之一。動態文字的設計,從一開始規劃互動效果時,就該把這個判斷寫進程式碼裡,而不是等使用者反映不舒服才回頭修。

手法五:巨大文字退到背景,當作畫面的裝飾紋理

跟手法一整個佔滿主視覺的做法相反,這裡的巨大文字退到背景層,不當主要的視覺焦點,而是用超大、通常帶著低透明度或極淺顏色的單字、字母,當成畫面裡的裝飾紋理,墊在真正要讓人讀的內文或圖片後面。這種做法能增加畫面的份量感,又不會搶走主要訊息的注意力,常見於區塊背景、頁尾,或者章節與章節之間的分隔處。跟手法一「文字當主角」最大的差異,就在這裡的文字是配角,存在感刻意被壓低。

超大的「設計」二字以極淡顏色退到背景當裝飾紋理,前景疊上正常字級、可讀的內文,示範巨大文字當配角、內文當主角
巨大文字退到背景當裝飾、壓低透明度,份量感留住,又不搶走前景正常字級的主要訊息。

用這招要抓準兩個分寸。第一,透明度與顏色深淺要抓得夠淺,不然反而會干擾前景內容的可讀性,讀者眼睛會分不清楚哪個才是真正該讀的字。第二,這類裝飾性的文字,技術上該標記為純裝飾內容,避免螢幕閱讀器把背景那串裝飾字跟真正的正文重複唸一次,造成視障使用者聽覺上的困擾。

怎麼挑出最適合自己網站的手法?

前面五個手法擺在一起,不是要五選一憑感覺猜,可以照三個判準一路篩下來。

第一個判準是內容量多寡。手法一要文字整個佔滿畫面,前提是這句話的字數夠精簡;如果要傳達的訊息本來就有好幾句、好幾個重點,硬要塞進超大字級裡,只會讓每個字擠成一團,這種情況更適合考慮手法五,把巨大文字挪到背景當裝飾,主要訊息留在前景用正常字級好好讀。

第二個判準是品牌調性。手法四那種隨捲動或滑鼠即時變形的動態文字,強度偏高,適合形象感強、願意展現實驗性的品牌;走穩重、專業路線的品牌,對這種高強度動態效果要更保守一些,寧可只在單一標題上做一次輕微的位移,也不必整站每個標題都動起來。

第三個判準是裝置與流量結構。行動版流量占比高、使用者網路環境不穩定的網站,動態效果與大檔案的手法都要更克制,先確認 clamp() 設定的最小字級在小螢幕上讀得舒服,再確認動態效果在中低階手機上不會拖慢頁面反應。

這五個手法也不是只能二選一。手法一疊加手法五很常見,前景用超大字級當主標題,背景再墊一層更巨大、更淡的裝飾文字加深份量感;手法二單獨用在一個標題上就有效果,不必整站每個標題都套上粗細混搭。

文字排版正在從「讓人讀得舒服」的角色,被賦予「本身就是畫面」的新任務。不管疊了多少層效果,字級放得再大、動態做得再花俏,最後都得回頭檢查一件事,把所有裝飾拿掉之後,剩下的那句話,訊息本身站不站得住腳。

這五個手法終究是工具箱,不是規定要全部用上的清單。挑一兩個跟自己品牌調性合拍的做深做好,通常比五個全部堆上去,更能讓人記住那句話想說什麼。

資料來源
  1. clamp() CSS function — MDN Web Docs
  2. Responsive and fluid typography with Baseline CSS features — web.dev
  3. Variable fonts guide — MDN Web Docs
  4. Using variable fonts on the web — Google Fonts
  5. background-clip CSS property — MDN Web Docs
  6. mix-blend-mode CSS property — MDN Web Docs
  7. CSS scroll-driven animations guide — MDN Web Docs
  8. Intersection Observer API — MDN Web Docs
  9. Understanding Success Criterion 2.3.3: Animation from Interactions (WCAG 2.2) — W3C