某天老闆在羣裏反饋,英文單詞爲何被截斷了?css
很顯然,這是咱們前端的鍋,自行背鍋。這個問題太簡單了,css里加兩行屬性,分分鐘搞定。html
1
2
|
word
–
break
:
keep
–
all
;
word
–
wrap
:
break
–
word
;
|
開心的提交代碼,刷新頁面。我擦,怎麼仍是沒有斷詞?不可能啊!!! 難道這兩個屬性有什麼兼容性問題或者有什麼限制條件?爲了避免搬石頭砸本身的腳,仍是去深刻了解一下。前端
關鍵字: word-break, word-wrapcss3
提早聲明:上面的問題用這兩個屬性來解決並無什麼問題,這裏只是再加深鞏固一下知識。想了解緣由的同窗請直接看下一小節。git
word-break, word-wrap這兩個屬性都比較常見,斷詞、溢出顯示省略號等常見功能都須要用到它們。但具體它們分別是什麼意思,各自有什麼屬性,可能不少人都不是很清楚。反正我不懂。每次都是從網上查一查就用上了,兩個屬性長得太像了,老是記不住。github
來,先看文檔。web
1
|
word
–
break
:
normal
|
break
–
all
|
keep
–
all
;
|
normal 使用瀏覽器默認的換行規則。
break-all 容許在單詞內換行。
keep-all 只能在半角空格或連字符處換行。sublime-text
http://www.w3school.com.cn/cssref/pr_word-break.asp瀏覽器
1
|
word
–
wrap
:
normal
|
break
–
word
;
|
normal 只在容許的斷字點換行(瀏覽器保持默認處理)。
break-word 在長單詞或 URL 地址內部進行換行。編輯器
http://www.w3school.com.cn/cssref/pr_word-wrap.asp
看懂了嗎?反正我好像沒看懂。
看圖貌似會好點。
http://www.w3school.com.cn/tiy/t.asp?f=css3_word-wrap
相信大概能看明白了,我簡單總結下:
研表究明,漢字的序順並不定一能影閱響讀,好比當你看完這句話後,才發這現裏的字全是都亂的。
這樣子均可以流暢閱讀,更別說斷詞了…
再回頭來看咱們的問題,理論上加上了word-break: keep-all;word-wrap: break-word;應該沒問題了,看來還有別的坑。
關鍵字: white-space
確認word-break和word-wrap使用方法沒有錯後,開始檢查咱們本身的代碼。抓包發現,後臺同窗返回的文本里空格所有以 來代替。
what?爲何要用轉義字符代替?爲何css不能識別這個轉義空格?
電話後臺同窗,告知:在很早以前的爲了解決某個前端問題才這麼作的。
抓耳撓腮,使勁回憶了下,確實有這麼回事。
由於瀏覽器會自動將多個空格壓縮爲一個空格顯示。爲了還原用戶的本來輸入,纔將空格進行html轉義。
專業的字符畫製做人員會用全角空格來作,這樣就不擔憂瀏覽器的空格合併問題了
ok,那 暫時還不能動它。
1
2
3
4
5
|
<div>
<div>
bananas
</div>
</div>
|
既然規範這麼定了,埋了坑,確定會想辦法讓你繞過的,想起了white-space。
white-space咱們更多的時候只用到nowrap的屬性,來配合實現…的特效,實際它還有更多的姿式未解鎖。
1
2
|
white
-
space
:
normal
|
nowrap
|
pre
|
pre
-
wrap
|
pre
-
line
咱們重點關注
pre開頭的幾個屬性。
pre是
preserve
(保留
)的縮寫。沒錯,它就跟保留空格有關係。
|
pre: 保留全部的空格和回車,且不容許折行。
pre-wrap: 保留全部的空格和回車,可是容許折行。
pre-line: 會合並空格,且容許折行
意思簡單明瞭,好像也不用解釋什麼。
因此咱們的解決方案來了:
後臺按照用戶的輸入的原始空格返回,不用作轉義,前端加上
1
2
3
|
word-break
:
keep-all
;
word-wrap
:
break-word
;
white-space
:
pre-wrap
;
|
蹭蹭蹭修改完,貌似沒什麼問題。
不過,這些個屬性都是做用於Text上的,而咱們的頁面裏有不少都是富文本,若是將pre-wrap做用於富文本上的父節點上也會有一樣的功效嗎?
帶着疑問,測試了幾個富文本,果真出現了大段空白….
富文本里的html標籤之間有空格。
有興趣的同窗能夠在
http://www.taoba.com
http://www.qq.com
的body上加上white-space:pre-wrap看看效果。
那富文本的問題要怎麼解決呢,黑科技登場了!!
沒法反抗,那就享受吧。
既然瀏覽器會壓縮多個空格,那隻要保證文本里每次只有一個空格相鄰不就能夠了。
□ -> □
□□ -> □
□□□ -> □ □
□□□□ -> □ □
自動規避了瀏覽器的合併空格策略。
這個思路來自於富文本編輯器,寫過富文本編輯器的同窗可能會不屑一顧,這個方案咱們都用爛了.. 感謝大家!!
(寫個富文本編輯器是學習前端的最佳方式,歡迎閒的蛋疼的同窗快去踩坑)
通知後臺同窗按照這個規則來改,問題搞定。