中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)頁制作 > 連續(xù)字符自動換行的解決方案
JavaScript 圖片切割效果 回到列表 Web標(biāo)準(zhǔn)在中國
 連續(xù)字符自動換行的解決方案

作者:秦歌 時間: 2008-12-04 文檔類型:原創(chuàng) 來自:藍(lán)色理想

秦歌(YanKaven) 的站點http://dancewithnet.com/

文本的排版依據(jù)語言的不同會有一些格式上的要求,比如簡體中文中類似逗號、分號等標(biāo)點符號不會出現(xiàn)在一行的開頭,對于英文來講就是一個完整單詞不會在兩行顯示,瀏覽器會依據(jù)類似這樣的原則來顯示文本。但是由于網(wǎng)頁有寬度限制的,連續(xù)的超長的字母、數(shù)字或標(biāo)點符號超出其所在區(qū)域?qū)挾鹊南拗贫鴮?dǎo)致影響頁面視覺,如 例1 所示。這個問題在顯示用戶輸入信息時尤為突出,這里就是要說如何解決這個問題。

CSS3草案中,對文本的處理新增了兩個新屬性 word-wrapword-break 來解決這個問題:

  1. {word-wrap:break-word;} :依照亞洲語言和非亞洲語言的文本規(guī)則,允許在字內(nèi)換行,且允許非亞洲語言文本行的任意字內(nèi)斷開
  2. {word-break:break-all;} : 內(nèi)容將在邊界內(nèi)換行,如需要則詞內(nèi)換行(word-break)也行發(fā)生

下面是常見瀏覽器的支持情況:

  IE Firefox Opera Safari/Chrome
{word-wrap:break-word;} td元素需設(shè)置其寬度
例4例5
不支持 不支持 不支持td元素
例4 例5
{word-break:break-all;} 不支持連續(xù)的符號
例3
不支持 不支持 支持

由于{word-break:break-all;}導(dǎo)致英文和數(shù)字可讀性嚴(yán)重下降且無法使連續(xù)符號換行,所以{word-wrap:break-word;}是一個相對較好的選擇。

但面對瀏覽器的如此糟糕支持,所以不能不借助JavaScript來解決這個問題,即當(dāng)瀏覽器不支持CSS解決方案時,在連續(xù)字符串的適當(dāng)位置插入&#8203;字符(當(dāng)然還可以用<wbr>和&shy;,這三個字符在瀏覽器中的支持情況請看ppk的《The wbr tag》),這些字符寫在瀏覽器中不會顯示,卻使長字符串換行。具體實現(xiàn)代碼如下:

function fnBreakWordAll(o){
var o = o || {},
  iWord = o.word || 13,
  iRe = o.re || '[a-zA-Z0-9]',
  bAll = o.all || false,
  sClassName = o.className || 'word-break-all',
  aEls = o.els || (function(){
    var aEls = [],
      aAllEls = document.getElementsByTagName('*'),
      re = new RegExp('(?:^|\\s+)' + sClassName + '(?:\\s+|$)');
    for(var i =0,iLen = aAllEls.length; i < iLen ; ++i){
      if(re.test(aAllEls[i].className)){
        aEls[aEls.length] = aAllEls[i];
      }
    }
    return aEls;
  })() || [],
  fnBreakWord = function(oEl){
    // 基于http://www.hedgerwow.com/360/dhtml/css-word-break.html修改
    if(!oEl || oEl.nodeType !== 1){
      return false;
    }else if(oEl.currentStyle && typeof oEl.currentStyle.wordWrap==='string'){
      breakWord = function(oEl){
        oEl.runtimeStyle.wordWrap = 'break-word';
        return true;
      }
      return breakWord(oEl);
    }else if(document.createTreeWalker){
      var trim = function  (str) {
        str = str.replace(/^\s\s*/, '');
        var ws = /\s/,
        i = str.length;
        while (ws.test(str.charAt(--i)));
        return str.slice(0, i + 1);
      }
      breakWord = function(oEl){
        var dWalker=document.createTreeWalker(oEl,NodeFilter.SHOW_TEXT,null,false);
        var node,s,c = String.fromCharCode('8203'),
          //re = /([a-zA-Z0-9]{0,13})/;
          re = new RegExp('('+ iRe +'{0,' + iWord + '})');
        while (dWalker.nextNode()){
          node = dWalker.currentNode;
          s = trim(node.nodeValue).split(re).join(c);
          node.nodeValue = s;
        }
        return true;
      }
      return breakWord(oEl);
    }
  };
for(var i=0,n=aEls.length; i<n; ++i){
  var sUa = navigator.userAgent,
    sTn = aEls[i].tagName.toLowerCase() ;
  if((/Opera/).test(sUa) || (/Firefox/).test(sUa) || ((/KHTML/).test(sUa) &&
  (sTn === 'td' || sTn === 'th')) || bAll){
    fnBreakWord(aEls[i]);
  }
}
}

具體應(yīng)用請看 演示實例

fnWordBreakAll函數(shù)提供一些定制參數(shù),使用方法和參數(shù)含義如下:

fnWordBreakAll({word:15,re:'[\\w]',all:true});

參數(shù) 說明
word 正整數(shù),默認(rèn)是13 在這個字?jǐn)?shù)內(nèi)的單詞不會被插入\u8203,印象中超過13個字母的單詞不多,這可以保證絕大部分單詞不會被打碎
re 正則表達(dá)式,默認(rèn)[a-zA-Z0-9] 單詞的正則表達(dá)式,用以確定一個單詞是哪些字符組成,注意\的轉(zhuǎn)義
all 布爾值,默認(rèn)false 確定是否在所有的瀏覽器中執(zhí)行,默認(rèn)在Opera和Firefox,以及當(dāng)class應(yīng)用在th或td的Safari上執(zhí)行,這個主要用在.word-break-all沒有定義時,會對IE加上樣式
className 合法class名,默認(rèn)word-break-all 執(zhí)行函數(shù)的元素對應(yīng)屬性名

這個函數(shù)的核心部分修改自Hedger Wang 整理了一個JavaScript解決方案《Cross Browser Word Breaker》,其利用 document.createTreeWalkersplit 方法給非IE瀏覽器的每個字符間加入了&#8203; ,它用在純中文文本基本上沒有什么問題,但是如果你仔細(xì)觀察他給出的例子就會發(fā)現(xiàn)文本中有英文或數(shù)字時,雖然解決了換行問題,但是使文本難以閱讀,且增大了字符間的間距,所以我在此基礎(chǔ)上做了上面的改進(jìn)。

本文鏈接:http://www.95time.cn/tech/web/2008/6313.asp 

出處:藍(lán)色理想
責(zé)任編輯:moby

◎進(jìn)入論壇網(wǎng)頁制作WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。

作者文章 更多作者文章
JavaScript的陷阱
關(guān)于基于字體大小(em)的設(shè)計
Javascript的匿名函數(shù)
Firefox2中輸入框丟失光標(biāo)bug
Javascript風(fēng)格要素 Ⅱ
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大!熬•自然”設(shè)計大賽開啟
國際體驗設(shè)計大會7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計算如何讓安全問題可控
云計算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計》
犀利開發(fā)—jQuery內(nèi)核詳解與實踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2