1. 程式人生 > >不同瀏覽器下word-wrap和word-break強制換行

不同瀏覽器下word-wrap和word-break強制換行

        我們一般控制換行所用到的CSS屬性一共有三個:word-wrap; word-break; white-space。這三個屬性可以說是專為了文字斷行而創造出來的。首先我們得知道這三個屬性到底是做什麼用地:
word-wrap語法:
        word-wrap: normal(預設) | break-word
      目前嘗試chrome不能實現效果, IE能實現效果(原文說各個瀏覽器及其內容,暫未嘗試)
引數:
         normal: 允許內容頂開指定的容器邊界。
        break-word: 內容將在邊界內換行。必要時會觸發word-break(注意:請分辨清楚word-break和break-word這倆個是不同的東西,一為屬性另為引數)。
說明:

        word-wrap是控制是否“為詞斷行”的,設定或檢索當前行超過指定容器的邊界時是否斷開轉行。中文沒有任何問題,英文語句也沒問題。但是對於長串的英文,就不起作用。
範例:
        congratulation這個單詞屬於長串英文,word-wrap:break-word整個單詞看成一個整體,如果該行末端寬度不夠顯示整個單詞,它會自動把整個單詞放到下一行,而不會把單詞截斷,這就是對於長串文字不起作用的解釋。word-wrap:normal是預設情況,英文單詞不被拆開。
 
結論:
       作用範圍僅為div這類標準塊級元素,th,td這類table元素雖然識別但是沒有效果(如果為td,th加上寬度word-wrap在IE下是能夠發揮效果的,但根據完全相容性方便記憶角度上來說還是以前面的結論為準)。
word-break語法:
word-break: normal(預設) | break-all | keep-all
Firefox(即FF)、Opera不能識別
引數:
     normal: 依照亞洲語言和非亞洲語言的文字規則,允許在字內換行。
     break-all: 該行為與亞洲語言的normal相同。也允許非亞洲語言文字行的任意字內斷開。該值適合包含一些非亞洲文字的亞洲文字。
     keep-all: 與所有非亞洲語言的normal相同。對於中文,韓文,日文,不允許字斷開。適合包含少量亞洲文字的非亞洲文字。
說明:
     word-break:break-all,是斷開單詞。在單詞到邊界時,下個字母自動到下一行。主要解決了長串英文的問題(恰恰彌補了上面word-wrap:break-word對於長串文字不起作用的缺陷)。
範例:
        繼續以上面congratulation這個單詞屬於長串英文,word-break:break-all它會把單詞截斷,該行末端就會變成類似conra(congratulation的前端部分),下一行為tulation(conguatulation)的後端部分了。
word-break:keep-all,是指Chinese, Japanese, and Korean不斷詞。即只用此時,不用word-wrap,中文就不會換行了。(英文語句正常。)
結論:
        作用範圍僅為div這類標準塊級元素,th,td這類table元素雖然識別但是沒有效果(經測試Chrome下word-break:break-all是有效果的,但根據完全相容性方便記憶角度上來說還是以前面的結論為準)。Firefox,Opera是無法識別word-break的,更不用提Firefox下的th,td中使用word-break的效果了。
white-space語法:
        white-space: normal(預設) | pre | nowrap
引數:
        normal: 預設。空白會被瀏覽器忽略。
        pre: 空白會被瀏覽器保留。其行為方式類似HTML中的pre標籤。
        nowrap: 文字不會換行,文字會在在同一行上繼續,直到遇到br標籤為止。
說明:
       對於pre屬性,其實就是HTML中連續的多個空白符會被合併,然後為了不讓他合併(最常用的場合就是表示程式碼文字縮排)讓其中的空白符繼續保留而不需要我們增加額外的樣式和標籤來控制它的縮排和換行。pre標籤的原理也是一樣的內部預設有了個white-space:pre。
        對於nowrap屬性,這個是強制不換行核心,一般強制不換行就是利用這個屬性。Firefox的div和td中,以及IE的div中,均沒有問題。唯一的瑕疵就是在IE的td中會有一個問題,如果td沒有指定寬度,則nowrap仍然有效,如果td有寬度,並且文字中無標點、無空格(例如中文長串文字),nowrap則不再有效。解決方式就是可以加word-break:keep-all;可以解決此問題。
     總結強制換行
       如果在div這類標準塊級元素中需要強制換行,最普遍的方案那就是word-wrap:break-word; word-break:break-all;此方式的缺點就是會導致如果恰巧該行末端寬為一個長串英文單詞,那麼該單詞會被撕開的尷尬樣式(而且FF不識別word-break,反而不會撕開這個單詞)。個人認為如果你這個div裡面放的類似於URL這個長串地址,那麼用此方案是非常不錯的選擇(注意:由於FF不識別word-break,所以無法保證每行末端會整齊的斷開URL單詞,但這也是無奈的選擇)。如果不是放置URL這類可以斷開的長串英文,而是英文句子的話,那麼使用word-wrap:break-word;即可。至於網上看到有word-wrap:break-word; overflow:hidden;這麼個寫法,據說可以相容IE和FF,但經過親自測試似乎沒有什麼特別效果。當然,如果你有更好的方案也可以留言參與討論,這裡也十分歡迎您的意見。
      如果是在td,th這類table元素中需要強制換行,個人比較推薦的方式為:先為table設定table-layout:fixed,基本上設定完這個屬性後基本的換行問題都能夠解決而不會出現table中td,th因為裡面各個內容的多寡發生搶奪其他td,th寬度的情形發生。這時如果你依舊有強制換行問題,那麼在此td中內部加一層div,那麼情況就會像上面討論的方式來解決。
        總結強制不換行:
        強制不換行的問題到是比較容易分析的,就如上面所討論的那樣使用white-space:nowrap,Firefox的div和td中,以及IE的div中,均沒有問題。唯一的瑕疵就是在IE的td中會有一個問題,如果td沒有指定寬度,則nowrap仍然有效,如果td有寬度,並且文字中無標點、無空格(例如中文長串文字),nowrap則不再有效。解決方式就是可以加word-break:keep-all;可以解決此問題。綜合下來,比較穩妥的方式是在文字與td之間再套一層div,然後使用nowrap,那麼就是強制不換行。注意這時候很有可能文字會過多導致溢位容器,所以你還得加一個overflow:hidden,防止溢位容器,這樣子就可以相容各個瀏覽器了。
       總結了那麼多,發覺似乎也就那幾個屬性在瀏覽器裡面的各種相容性的平衡,現在似乎尚未有一個完美的方案可以全部相容各個瀏覽器,我們所能做的最多的就是儘可能的保持個瀏覽器顯示一致。如果你還是覺得一定要相容所有的瀏覽器,那麼最後的方案那麼就是動用JS了,以後的文章中我會考慮從以最小的JS代價來滿足此要求,但這暫不在本文所討論的範圍內。
        一般情況下,元素擁有預設的white-space:normal(自動換行,PS:不換行是white-space:nowrap),當錄入的文字超過定義的寬度後會自動換行,但當錄入的資料是一堆沒有空格的字元或字母或數字(常規資料應該不會有吧,但有些測試人員是會這樣子做的),超過容器寬度時就會把容器撐大,不換行。
解決方法(以IE,chrome,FF為測試瀏覽器):
{
word-break:break-all; /*支援IE,chrome,FF不支援*/
word-wrap:break-word;/*支援IE,本人測試不支援chrome,但是其他資源說支援(有待商榷),支援FF*/
}
以下是對這兩種方法的區別說明:
1、word-break:break-all 例如div寬200px,它的內容就會到200px自動換行,如果該行末端有個英文單詞很長(congratulation等),它會把單詞截斷,變成該行末端為conra(congratulation的前端部分),下一行為tulation(conguatulation)的後端部分了。
2、word-wrap:break-word 例子與上面一樣,但區別就是它會把congratulation整個單詞看成一個整體,如果該行末端寬度不夠顯示整個單詞,它會自動把整個單詞放到下一行,而不會把單詞截斷掉的。
3、word-break:break-all 支援版本:IE5以上 該行為與亞洲語言的 normal 相同。也允許非亞洲語言文字行的任意字內斷開。該值適合包含一些非亞洲文字的亞洲文字。
word-wrap:break-word 支援版本:IE5.5以上 內容將在邊界內換行。如果需要,詞內換行( word-break )也將發生。表格自動換行,避免撐開。
語法:word-break : normal | break-all | keep-all
引數: normal : 依照亞洲語言和非亞洲語言的文字規則,允許在字內換行
break-all : 該行為與亞洲語言的normal相同。也允許非亞洲語言文字行的任意字內斷開。該值適合包含一些非亞洲文字的亞洲文字
keep-all : 與所有非亞洲語言的normal相同。對於中文,韓文,日文,不允許字斷開。適合包含少量亞洲文字的非亞洲文字
語法: word-wrap : normal | break-word
引數: normal : 允許內容頂開指定的容器邊界
break-word : 內容將在邊界內換行。如果需要,詞內換行(word-break)也行發生說明:設定或檢索噹噹前行超過指定容器的邊界時是否斷開轉行。
建議:word-break 用W3C檢測會顯示問題的,導致百度快照也會出問題-這個屬性OPERA 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;

相關推薦

不同瀏覽器word-wrapword-break強制

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

你真的了解word-wrapword-break的區別嗎?

導致 within opera developer 不起作用 溢出 了解 gpo 有一個 這兩個東西是什麽,我相信至今還有很多人搞不清,只會死記硬背的寫一個word-wrap:break-word;word-break:break-all;這樣的東西來強制斷句,又或者是因

table td 內容太長自動的例項(word-wrapword-break的差異)

參考文件 :   table-layout  : http://www.w3school.com.cn/cssref/pr_tab_table-layout.asp word-wrap 和 word-brak的差異:  http://www.cnblogs.com/2050

單詞太長導致自動,出現空白區域。——word-wrapword-break(英文單詞

寫在前面: 在寫頁面的時候,偶爾有時會遇到下圖這兩種情況,一種是單詞過長時會溢位div,一種是直接換行,導致出現空白區域。這兩個情景就需要word-wrap、word-break這兩個屬性出場來解決了。閒話不扯了,本文主要內容有:word-wrap和word-

你瞭解word-wrapword-break的區別嗎?

       我想很多人會在想這兩個東西是什麼鬼東西,我相信至今還有很多人搞不清,只會死記硬背的寫一個word-wrap:break-word;word-break:break-all;這樣的東西來強制斷句,又或者是因為這兩個東西實在是太拗口了,長得又差不多,導致連背都很難

不同瀏覽器word-wrap,word-break,white-space強制總結

強制換行與強制不換行用到的屬性 我們一般控制換行所用到的CSS屬性一共有三個:word-wrap; word-break; white-space。這三個屬性可以說是專為了文字斷行而創造出來的。首先我們得知道這三個屬性到底是做什麼用地: word-wrap語法: word-wrap: normal(預設

word-wrapword-breakwhite-space

1、先要明確一點,不加word-wrap或word-break的時候,就是瀏覽器預設的時候,如果有一個單詞很長,導致一行中剩下的空間已經放不下它時,則瀏覽器會把這個單詞挪到下一行去: 2、這個長單詞還不算變態的,因為至少它沒有長到超過包裹它的元素的長度,但是如果超過了的話

word-wrapword-break的區別,以及無效情況

OS 自動 class word-wrap 就是 con 整體 tro ace 兩種方法的區別說明: 1,word-break:break-all 例如div寬400px,它的內容就會到400px自動換行,如果該行末端有個英文單詞很長(congratulation等),它會

屬性word-wrapword-break的區別

word-wrap 強調的是是否允許單詞內斷句,而word-break強調的則是怎麼樣來進行單詞內的斷句。 說到這裡,好像依然不是很明朗,好吧,表達能力差的孩紙真是傷不起啊,只能用些例項來補救了。 首先,何謂單詞內斷句?當然這裡指的都是西文單詞。 這是沒有單詞內斷句的情況

css 長單詞不溢位容器的解決方法 word-wrapword-break

這兩個東西是什麼,我相信至今還有很多人搞不清,只會死記硬背的寫一個word-wrap:break-word;word-break:break-all;這樣的東西來強制斷句,又或者是因為這兩個東西實在是太拗口了,長得又差不多,導致連背都很難背下來。 那它們到底是什麼呢?我在m

white-space、word-wrapword-break 字母 數字不問題

實現頁面的文字、字母的展示效果的時候,相信大家都會遇到過一些這樣的要求:“文字不能換行,要強制文字一行展示”或者是“字母不會自動換行,需要實現可以自動換行斷句”等等諸如此類的要求,現在就這個文字、字母換不換行的問題,說說這三個css屬性的巧妙運用:white-space、

關於word-wrapword-break的區別

總結如下:word-wrap是控制換行的。使用break-word時,是將強制換行。中文沒有任何問題,英文語句也沒問題。但是對於長串的英文,就不起作用。break-word是控制是否斷詞的。normal是預設情況,英文單詞不被拆開。break-all,是斷開單詞。在單詞到邊界

解決uploadify插件不同瀏覽器的兼容性問題

tar 開啟 lse 比較 插件安裝 工作 col 做了 pre http://www.thinkphp.cn/code/2138.html uploadify在部分瀏覽器上沒法使用,或者各種報錯的解決方法。uploadify插件上傳圖片是很爽的體驗。 如果用chrom

JS如何在不同瀏覽器實現全屏

手動將瀏覽器全屏,大家都知道非常簡單,按F11就OK了,但如果要用JS實現瀏覽器全屏了? 對於IE瀏覽器實現全屏非常簡單,因為可以呼叫ActiveXObject物件。非IE的瀏覽器就無法辦到了,幸好,如今是html5的時代了,我們可以使用html5提供的api實現全屏功能。

Word Search Word Search Ⅱ

總程式碼如下: class Solution { public: struct TrieNode { TrieNode *child[26]; string node; TrieNode():node("") {

生成word附件word域動態賦值

return arr fir inf 字段 pla 動態 field equals 生成word文檔和word域動態賦值,很多時候需要生成這樣的word文檔供下載和打印,先制作一個包含了域的 word的模板附件,放在服務器端或者字節流存入數據庫,以供需要的時候代碼可以獲取到

word中如何將空格變成

結果 工具 步驟 -1 查找 inline com photo index 大家在工作和學習中可能會遇到文字替換或符號替換,大家要學會txt、doc、xls之間的切換,替換好之後放到最終的文件中,txt好處是沒有格式,doc個好處是有格式,而xls主要是分配到單元格中。

二十二、英文字母數字不會如何處理

英文 一次 bre word-wrap style 英文字母 ron wrap -a 一次偶然的項目中,遇到一個奇怪的問題,為什麽我都寫了換行的css怎麽還是沒有換行?請教宋老師之後才知道“英文字母和數字是不會換行的”,那如何處理呢? 處理辦法,在所在類上增加下面css:

css實現連續數字英文的自動的方法

overflow 邊界 沒有 flow bre ref wid over IE 1.(IE瀏覽器)連續的英文字符和阿拉伯數字,使用word-wrap : break-word ;或者word-break:break-all;實現強制斷行 #wrap{word-break:b

Hexo 在subtiledescription中實現

如下所示,用雙引號括起來,同時實現<br>即可達到換行目的 # Site title: "LEO'S NOTE" # 標題 subtitle: "心有猛虎 | 細嗅薔薇" # 副標題 description: "Stay Hungry.<br>Stay