不同瀏覽器下word-wrap,word-break,white-space強制換行和不換行總結(jié)

強制換行與強制不換行用到的屬性

我們一般控制換行所用到的CSS屬性一共有三個:word-wrap; word-break; white-space。這三個屬性可以說是專為了文字斷行而創(chuàng)造出來的辙售。首先我們得知道這三個屬性到底是做什么用地:

word-wrap語法:

word-wrap: normal(默認) | break-word

各個瀏覽器均能識別

參數(shù):

normal: 允許內(nèi)容頂開指定的容器邊界。

break-word: 內(nèi)容將在邊界內(nèi)換行右冻。必要時會觸發(fā)word-break(注意:請分辨清楚word-break和break-word這倆個是不同的東西勋眯,一為屬性另為參數(shù))。

說明:

word-wrap是控制是否“為詞斷行”的叹侄,設(shè)置或檢索當(dāng)前行超過指定容器的邊界時是否斷開轉(zhuǎn)行吁恍。中文沒有任何問題扒秸,英文語句也沒問題。但是對于長串的英文冀瓦,就不起作用伴奥。

范例:

congratulation這個單詞屬于長串英文,word-wrap:break-word整個單詞看成一個整體翼闽,如果該行末端寬度不夠顯示整個單詞渔伯,它會自動把整個單詞放到下一行,而不會把單詞截斷肄程,這就是對于長串文字不起作用的解釋锣吼。word-wrap:normal是默認情況,英文單詞不被拆開蓝厌。

結(jié)論:

作用范圍僅為div這類標準塊級元素玄叠,th,td這類table元素雖然識別但是沒有效果(如果為td,th加上寬度word-wrap在IE下是能夠發(fā)揮效果的,但根據(jù)完全兼容性方便記憶角度上來說還是以前面的結(jié)論為準)拓提。

word-break語法:

word-break: normal(默認) | break-all | keep-all

Firefox读恃、Opera不能識別

參數(shù):

normal: 依照亞洲語言和非亞洲語言的文本規(guī)則,允許在字內(nèi)換行。
break-all: 該行為與亞洲語言的normal相同寺惫。也允許非亞洲語言文本行的任意字內(nèi)斷開疹吃。該值適合包含一些非亞洲文本的亞洲文本。
keep-all: 與所有非亞洲語言的normal相同西雀。對于中文萨驶,韓文,日文艇肴,不允許字斷開腔呜。適合包含少量亞洲文本的非亞洲文本。

說明:

word-break:break-all再悼,是斷開單詞核畴。在單詞到邊界時,下個字母自動到下一行冲九。主要解決了長串英文的問題(恰恰彌補了上面word-wrap:break-word對于長串文字不起作用的缺陷)谤草。

范例:

繼續(xù)以上面congratulation這個單詞屬于長串英文,word-break:break-all它會把單詞截斷莺奸,該行末端就會變成類似conra(congratulation的前端部分)丑孩,下一行為tulation(conguatulation)的后端部分了。
word-break:keep-all憾筏,是指Chinese, Japanese, and Korean不斷詞。即只用此時花鹅,不用word-wrap氧腰,中文就不會換行了。(英文語句正常刨肃。)

結(jié)論:

作用范圍僅為div這類標準塊級元素古拴,th,td這類table元素雖然識別但是沒有效果(經(jīng)測試Chrome下word-break:break-all是有效果的,但根據(jù)完全兼容性方便記憶角度上來說還是以前面的結(jié)論為準)真友。Firefox,Opera是無法識別word-break的黄痪,更不用提Firefox下的th,td中使用word-break的效果了。

white-space語法:

white-space: normal(默認) | pre | nowrap

參數(shù):

normal: 默認盔然∥Υ颍空白會被瀏覽器忽略。
pre: 空白會被瀏覽器保留愈案。其行為方式類似HTML中的pre標簽挺尾。
nowrap: 文本不會換行,文本會在在同一行上繼續(xù)站绪,直到遇到br標簽為止遭铺。

說明:

對于pre屬性,其實就是HTML中連續(xù)的多個空白符會被合并,然后為了不讓他合并(最常用的場合就是表示代碼文字縮進)讓其中的空白符繼續(xù)保留而不需要我們增加額外的樣式和標簽來控制它的縮進和換行魂挂。pre標簽的原理也是一樣的內(nèi)部默認有了個white-space:pre甫题。
對于nowrap屬性,這個是強制不換行核心涂召,一般強制不換行就是利用這個屬性坠非。Firefox的div和td中,以及IE的div中芹扭,均沒有問題麻顶。唯一的瑕疵就是在IE的td中會有一個問題,如果td沒有指定寬度舱卡,則nowrap仍然有效辅肾,如果td有寬度,并且文字中無標點轮锥、無空格(例如中文長串文字)矫钓,nowrap則不再有效。解決方式就是可以加word-break:keep-all;可以解決此問題舍杜。


==總結(jié)強制換行==:

如果在div這類標準塊級元素中需要強制換行新娜,最普遍的方案那就是word-wrap:break-word; word-break:break-all;此方式的缺點就是會導(dǎo)致如果恰巧該行末端寬為一個長串英文單詞,那么該單詞會被撕開的尷尬樣式(而且FF不識別word-break既绩,反而不會撕開這個單詞)概龄。個人認為如果你這個div里面放的類似于URL這個長串地址,那么用此方案是非常不錯的選擇(注意:由于FF不識別word-break饲握,所以無法保證每行末端會整齊的斷開URL單詞私杜,但這也是無奈的選擇)。如果不是放置URL這類可以斷開的長串英文救欧,而是英文句子的話衰粹,那么使用word-wrap:break-word;即可。至于網(wǎng)上看到有word-wrap:break-word; overflow:hidden;這么個寫法笆怠,據(jù)說可以兼容IE和FF铝耻,但經(jīng)過親自測試似乎沒有什么特別效果。當(dāng)然蹬刷,如果你有更好的方案也可以留言參與討論瓢捉,這里也十分歡迎您的意見。
如果是在td,th這類table元素中需要強制換行办成,個人比較推薦的方式為:先為table設(shè)定table-layout:fixed泊柬,基本上設(shè)定完這個屬性后基本的換行問題都能夠解決而不會出現(xiàn)table中td,th因為里面各個內(nèi)容的多寡發(fā)生搶奪其他td,th寬度的情形發(fā)生。這時如果你依舊有強制換行問題诈火,那么在此td中內(nèi)部加一層div兽赁,那么情況就會像上面討論的方式來解決状答。


==總結(jié)強制不換行==:

強制不換行的問題到是比較容易分析的,就如上面所討論的那樣使用white-space:nowrap刀崖,F(xiàn)irefox的div和td中惊科,以及IE的div中,均沒有問題亮钦。唯一的瑕疵就是在IE的td中會有一個問題馆截,如果td沒有指定寬度,則nowrap仍然有效蜂莉,如果td有寬度蜡娶,并且文字中無標點、無空格(例如中文長串文字)映穗,nowrap則不再有效窖张。解決方式就是可以加word-break:keep-all;可以解決此問題。綜合下來蚁滋,比較穩(wěn)妥的方式是在文字與td之間再套一層div宿接,然后使用nowrap,那么就是強制不換行辕录。注意這時候很有可能文字會過多導(dǎo)致溢出容器睦霎,所以你還得加一個overflow:hidden,防止溢出容器走诞,這樣子就可以兼容各個瀏覽器了副女。
總結(jié)了那么多,發(fā)覺似乎也就那幾個屬性在瀏覽器里面的各種兼容性的平衡蚣旱,現(xiàn)在似乎尚未有一個完美的方案可以全部兼容各個瀏覽器碑幅,我們所能做的最多的就是盡可能的保持個瀏覽器顯示一致。如果你還是覺得一定要兼容所有的瀏覽器姻锁,那么最后的方案那么就是動用JS了枕赵,以后的文章中我會考慮從以最小的JS代價來滿足此要求猜欺,但這暫不在本文所討論的范圍內(nèi)位隶。
一般情況下,元素擁有默認的white-space:normal(自動換行开皿,PS:不換行是white-space:nowrap),當(dāng)錄入的文字超過定義的寬度后會自動換行涧黄,但當(dāng)錄入的數(shù)據(jù)是一堆沒有空格的字符或字母或數(shù)字(常規(guī)數(shù)據(jù)應(yīng)該不會有吧,但有些測試人員是會這樣子做的)赋荆,超過容器寬度時就會把容器撐大笋妥,不換行。

解決方法(以IE窄潭,chrome,FF為測試瀏覽器):

{
word-break:break-all; /*支持IE春宣,chrome,F(xiàn)F不支持*/
word-wrap:break-word;/*支持IE,chrome月帝,F(xiàn)F*/
}
以下是對這兩種方法的區(qū)別說明:

1躏惋、word-break:break-all 例如div寬200px,它的內(nèi)容就會到200px自動換行嚷辅,如果該行末端有個英文單詞很長(congratulation等)簿姨,它會把單詞截斷,變成該行末端為conra(congratulation的前端部分)簸搞,下一行為tulation(conguatulation)的后端部分了扁位。

2、word-wrap:break-word 例子與上面一樣趁俊,但區(qū)別就是它會把congratulation整個單詞看成一個整體域仇,如果該行末端寬度不夠顯示整個單詞,它會自動把整個單詞放到下一行则酝,而不會把單詞截斷掉的殉簸。

3、

word-break:break-all 支持版本:IE5以上 該行為與亞洲語言的 normal 相同沽讹。也允許非亞洲語言文本行的任意字內(nèi)斷開般卑。該值適合包含一些非亞洲文本的亞洲文本。

word-wrap:break-word 支持版本:IE5.5以上 內(nèi)容將在邊界內(nèi)換行爽雄。如果需要蝠检,詞內(nèi)換行( word-break )也將發(fā)生。表格自動換行挚瘟,避免撐開叹谁。

語法:word-break : normal | break-all | keep-all

參數(shù): normal : 依照亞洲語言和非亞洲語言的文本規(guī)則,允許在字內(nèi)換行

break-all : 該行為與亞洲語言的normal相同乘盖。也允許非亞洲語言文本行的任意字內(nèi)斷開焰檩。該值適合包含一些非亞洲文本的亞洲文本

keep-all : 與所有非亞洲語言的normal相同。對于中文订框,韓文析苫,日文,不允許字斷開穿扳。適合包含少量亞洲文本的非亞洲文本

語法: word-wrap : normal | break-word

參數(shù): normal : 允許內(nèi)容頂開指定的容器邊界

break-word : 內(nèi)容將在邊界內(nèi)換行衩侥。如果需要,詞內(nèi)換行(word-break)也行發(fā)生說明:設(shè)置或檢索當(dāng)當(dāng)前行超過指定容器的邊界時是否斷開轉(zhuǎn)行矛物。

建議:word-break 用W3C檢測會顯示問題的茫死,導(dǎo)致百度快照也會出問題-這個屬性O(shè)PERA FIREFOX 瀏覽器也不支持 word-break屬性可以用white-space:normal;來代替,這樣在FireFox和IE下就都能正確換行履羞,而且要注意峦萎,單詞間的空格不能用 來代替屡久,不然不能正確換行。

兼容 IE 和 FF 的換行 CSS 推薦樣式

最好的方式是word-wrap:break-word; overflow:hidden; 而不是word-wrap:break-word; word-break:break-all; 也不是word-wrap:break-word; overflow:auto;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爱榔,一起剝皮案震驚了整個濱河市涂身,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搓蚪,老刑警劉巖蛤售,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妒潭,居然都是意外死亡悴能,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門雳灾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漠酿,“玉大人,你說我怎么就攤上這事谎亩〕闯埃” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵匈庭,是天一觀的道長夫凸。 經(jīng)常有香客問我,道長阱持,這世上最難降的妖魔是什么夭拌? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮衷咽,結(jié)果婚禮上鸽扁,老公的妹妹穿的比我還像新娘。我一直安慰自己镶骗,他們只是感情好桶现,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鼎姊,像睡著了一般骡和。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上此蜈,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天即横,我揣著相機與錄音噪生,去河邊找鬼裆赵。 笑死,一個胖子當(dāng)著我的面吹牛跺嗽,可吹牛的內(nèi)容都是我干的战授。 我是一名探鬼主播页藻,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼植兰!你這毒婦竟也來了份帐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤楣导,失蹤者是張志新(化名)和其女友劉穎废境,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筒繁,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡噩凹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毡咏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驮宴。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呕缭,靈堂內(nèi)的尸體忽然破棺而出堵泽,到底是詐尸還是另有隱情,我是刑警寧澤恢总,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布迎罗,位于F島的核電站,受9級特大地震影響片仿,放射性物質(zhì)發(fā)生泄漏佳谦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一滋戳、第九天 我趴在偏房一處隱蔽的房頂上張望钻蔑。 院中可真熱鬧,春花似錦奸鸯、人聲如沸咪笑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窗怒。三九已至,卻和暖如春蓄拣,著一層夾襖步出監(jiān)牢的瞬間扬虚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工球恤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辜昵,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓咽斧,卻偏偏與公主長得像堪置,于是被迫代替她去往敵國和親躬存。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容