認識 HTML <pre> tag

使文本格式能夠被保留地顯示在網頁上

Lai
UnaLai
4 min readJun 14, 2020

--

在網頁流程中,經常會遇到在編輯頁面中,請使用者輸入一段文字,並於之後瀏覽頁面顯示該段文字。

文字輸入框通常會使用 <textarea> tag 讓使用者彈性編輯。但在顯示時,需注意顯示的方式,才能使使用者編輯的內容完整呈現。今天就來認識與上述需求相關的 <pre> tag 吧。

➤ 介紹 <pre> tag

<pre> tag 與其他標籤不同,可完整呈現程式碼當中的文本格式,包含換行符號、空格等。

以上述的需求範例為例,使用 <p> tag 與 <pre> tag 的差異如下:

可以發現使用普通的 <p> tag 會濾掉換行及空白符號。而 <pre> tag 則能夠保留使用者編輯的內容文本格式。

而這兩個內容的差別關鍵在於 white-space 屬性。

➤ 介紹關鍵 white-space 屬性

white-space 屬性會決定文本當中的空白字元該如何顯示。有以下選項供設定(參考 MDN 文件):

  • normal
    連續的空白會被合併,換行字元視為空白。只有在文字空間被限制時會換行。
    其中「文字空間被限制」,指的是文本的容器大小小於文本長度時,為了不超出容器,就會換行。
  • nowrap
    基本上同 normal,只是強制不換行,也就是可能會超過文本的容器。
  • pre
    連續的空白會被保留,只有遇到 <br> 元素或是換行符號時才會換行。
  • pre-wrap
    基本上同 pre ,但會受文字空間限制而換行。
  • pre-line
    基本上同 pre-wrap ,但連續的空白字元會被合併。

接續上一段的範例,用 white-space 屬性重新理解一下。

<p> tag 的 white-space 預設為 normal 。因此所有的換行字元都被視作空白,且連續的空白會被合併,因而無法完整呈現 <textarea> tag 中的文本內容。

而 <pre> tag 的 white-space 預設為 pre 。因此空白、換行都能夠正常顯示,能夠完整呈現 <textarea> tag 中的文本內容。

我們知道其中關鍵了,也就表示,我們可以更改 p <tag> 的 white-space 屬性,使它能夠擁有跟 <pre> tag 一樣的特性。

顯示如下:

可以發現 <p> tag 與 <pre> tag 顯示結果有一點差異。這是因為 <pre> tag 還有一項特色是它預設為等寬字體 (monospace)。若將兩 tag 設定為同一字體,則視覺上就無差異了。

使用 <pre> tag 時需小心它的 white-space 預設為 pre ,表示不受文字空間限制,也就是會發生視覺上爆版的情況,如下所示。

給定 <pre> tag 寬度為 100px 及灰色背景。可以發現文字以明顯超過容器範圍了。

這時有兩個解決方式:

(1) 滾動顯示
設定 overflow-x: scroll; ,使之保有文本格式,又可以透過滾動瀏覽內容。

(2) 更改white-space 屬性
white-space 屬性改為 pre-wrap,使 <pre> tag 因文字空間限制而換行。

以上是今天的小小分享,有任何問題都歡迎留言指教,謝謝 😊

--

--

Lai
UnaLai

我是一名前端工程師,我熱愛學習與分享 ❤︎