一、空格規則
HTML 代碼的空格通常會被浏覽器忽略。
<p>◡◡hello◡◡world◡◡</p>
上面是一行 HTML 代碼,文字的前部、内部和後部各有兩個空格。為了便于識别,這裡使用半圓形符号◡表示空格。
浏覽器的輸出結果如下。
hello world
可以看到,文字的前部和後部的空格都會忽略,内部的連續空格隻會算作一個。這就是浏覽器處理空格的基本規則。
如果希望空格原樣輸出,可以使用<pre>标簽。
<pre>◡◡hello◡◡world◡◡</pre>
另一種方法是,改用 HTML 實體 表示空格。
<p> hello world </p>
二、空格字元
HTML 處理空格的規則,适用于多種字元。除了普通的空格鍵,還包括制表符(\t)和換行符(\r和\n)。
浏覽器會自動把這些符号轉成普通的空格鍵。
<p>hello
world</p>
上面代碼中,文本内部包含了一個換行符,浏覽器視同為空格,輸出結果如下。
是以,文本内部的換行是無效的(除非文本放在<pre>标簽内)。
<p>hello<br>world</p>
上面代碼使用<br>标簽顯式表示換行。
三、CSS 的 white-space 屬性
HTML 語言的空格處理,基本上就是直接過濾。這樣的處理過于粗糙,完全忽視了原始文本内部的空格可能是有意義的。
CSS 提供了一個white-space屬性,可以提供更精确一點的空格處理方式。該屬性共有六個值,除了一個通用的inherit(繼承父元素),下面依次介紹剩下的五個值。
3.1 white-space: normal
white-space屬性的預設值為normal,表示浏覽器以正常方式處理空格。
<p>◡◡hellohellohello◡hello
world
</p>
上面代碼中,文本前部有兩個空格,内部有一個長單詞和一個換行符。
然後,容器<p>指定一個比較小的寬度。為了便于識别,背景色設為紅色。
p {
width: 100px;
background: red;
}
顯示效果如下圖。
可以看到,文首的空格被忽略。由于容器太窄,第一個單詞溢出容器,然後在後面一個空格處換行。文本内部的換行符自動轉成了空格。
3.2 white-space: nowrap
white-space屬性為nowrap時,不會因為超出容器寬度而發生換行。
white-space: nowrap;
所有文本顯示為一行,不會換行。
3.3 white-space: pre
white-space屬性為pre時,就按照<pre>标簽的方式處理。
white-space: pre;
上面結果與原始文本完全一緻,所有空格和換行符都保留了。
3.4 white-space: pre-wrap
white-space屬性為pre-wrap時,基本還是按照<pre>标簽的方式處理,唯一差別是超出容器寬度時,會發生換行。
white-space: pre-wrap;
文首的空格、内部的空格和換行符都保留了,超出容器的地方發生了折行。
3.5 white-space: pre-line
white-space屬性為pre-line時,意為保留換行符。除了換行符會原樣輸出,其他都與white-space:normal規則一緻。
white-space: pre-line;
除了文本内部的換行符沒有轉成空格,其他都與normal的處理規則一緻。這對于詩歌類型的文本很有用。
四、參考連結
●When does white space matter in HTML?,by Patrick Brosset
● white-space,by Sara Cope
原文釋出時間為:2018-10-4
本文作者:阮一峰
本文來自雲栖社群合作夥伴“
前端大學”,了解相關資訊可以關注“
”。