摘要:開發中,屏幕寬度有限,超長文字必須換行。嘗試原生方法無法解決問題,只好摸索手動斷行的做法。用解決這個問題困擾了我很久,直到前兩天,我突然發現原來有軟換行的存在。本案例中,使用實際上是想借用瀏覽器計算表格各列寬度的機制。
問題
我們知道,世界上文字主要有兩種:一種是以中文為代表的象形文字;另一種是以英法俄等為代表的拼音語系。前者的換行很簡單,每個單字都有自己的意義,所以每個字后面都可以換行。拼音語言,字母組合本身無意義,連在一起才有意義;不同單詞意義差異巨大,所以只能以單詞為單位換行。
Web 開發中,屏幕寬度有限,超長文字必須換行。在 CSS 中,控制換行的屬性主要有 word-break,white-space,其中,默認換行行為的是 word-break: normal,即以單詞為單位換行。比較奇怪的是,對于 URL,我本以為類似 /.:?& 都是明顯的單詞分隔符,理應換行,但實際上,瀏覽器并不會在這些地方換行。如果我們使用 break-all 或者 break-word,則會使得瀏覽器在不合理的地方換行,如果剛好在表格里,別的列內容比較多,那么包含 URL 的單元格就會被擠壓得非常窄,拉得特別高,非常難看,非常難讀。
嘗試原生方法無法解決問題,只好摸索手動斷行的做法。但是想完美解決問題非常困難:
第一個方案是全部換行,肯定不行;
第二個方案固定寬度換行,因為表格內容不固定,效果也很差,也不行;
老板提出了第三個方案:使用“8.3”格式,即超長字符串只保留前8個字符,后面顯示“...",然后可以手動展開。很明顯,這個方案對 URL 來說沒有什么價值,https:// 加起來正好 8 個字符,有意義么……即使加長也一樣,因為用戶有時候看域名,有時候看 pathname,也有時候看 search,我們沒有辦法預測。
然后老板又提出“Excel 方案”,即固定列寬,自動隱藏超出的文字,用戶可以通過拖拽來調整列寬。這個方案理論上可以解決問題,但是實現難度太大,因為瀏覽器自帶表格自適應寬度的算法,采用 “Excel 方案” 就必須放棄這個算法自己手動實現,成本很高,非萬不得已也不想做。
最后,動態換行,根據表格寬度計算在哪里斷行。還是不行,計算難度太大。
用這個問題困擾了我很久,直到前兩天,我突然發現原來有
它的含義是“可換可不換”。當元素寬度不夠需要換行,就從它這里換;如果寬度夠,就不換行。所以,只需要在“可能”換行的地方加上這個元素,就可以達成我的目標。寫成代碼很簡單,大約是這樣:
function wrapUrl(url) { if (!url) { return ""; } // 先把協議取出來,我不希望在協議這里換行 const head = url.substring(0, 10); const left = url.substring(10); // 在 `?&/` 前面插入 `` // 或者16個連續英文數字也要換行,打斷 hash 和 md5 return head + left.replace(/([?&/]|([a-zA-Z0-9]{16}))/g, str => " " + str ); }
實際效果很好,大概是這樣(截圖時,
與
對比,后者是固定換行,當表格內容很少,有充足的空間顯示 URL 時,也會換行,就不合適了。
需要注意, 以及,做了十幾年前端,稍一放松,竟然有完全不清楚沒用過的標簽,看來有必要找時間再把 HTML、CSS 再翻一遍了。 本文首發于我的博客,兩邊同步更新,歡迎同學與我交流。 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。 轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/114727.html 摘要:開發中,屏幕寬度有限,超長文字必須換行。嘗試原生方法無法解決問題,只好摸索手動斷行的做法。用解決這個問題困擾了我很久,直到前兩天,我突然發現原來有軟換行的存在。本案例中,使用實際上是想借用瀏覽器計算表格各列寬度的機制。
問題
我們知道,世界上文字主要有兩種:一種是以中文為代表的象形文字;另一種是以英法俄等為代表的拼音語系。前者的換行很簡單,每個單字都有自己的意義,所以每個字后面都可以換... 摘要:重要或強調文本表示重要的文本,表示強調。標記代碼使用標記代碼文件名工程名等,要顯示單獨的一塊代碼,可以使用元素包住元素以維持其格式。不要將作為以逃避合適的語義標記內容和控制樣式的快捷方式。和元素旁注標記,通常表示生僻字的發音。
第三章 文本
段落 p
毫不奇怪,p是最常用到的HTML元素之一
作者聯系信息 address
address并不是用于標記郵政地址,而是定義與HTML頁面或... 摘要:文本換行其實是個非常常用但并不起眼的特性。在中日韓文情況下,和有區別,見下圖中日韓文情況下,仍舊等于沒有設,瀏覽器選擇在文字或標點符號處換行。但設成后,將不再允許斷詞哪怕是中日韓文,只能像英語系一樣根據半角空格或標點來換行。
文本換行其實是個非常常用但并不起眼的特性。你什么都不用設,瀏覽器自動就會換行。例如英語,瀏覽器會根據容器尺寸,選擇在半角空格或連字符處換行。例如中文,瀏覽器會選擇... 閱讀 1761·2021-10-12 10:12 閱讀 2530·2021-09-29 09:42 閱讀 2711·2021-09-03 10:28 閱讀 2249·2019-08-30 15:54 閱讀 1153·2019-08-30 15:53 閱讀 1388·2019-08-30 11:26 閱讀 3356·2019-08-30 11:02 閱讀 2134·2019-08-30 11:02 的渲染很特殊,瀏覽器要花很多時間計算每個列的內容、計算它的寬度,所以性能會比較差,這也是不要用
做布局的原因。本案例中,使用
相關文章
使用 <wbr> 解決長 URL 的換行問題
HTML入門學習筆記(二)
CSS3 文本換行
發表評論
0條評論
104828720
男|高級講師
TA的文章
閱讀更多
IR2103H橋驅動電路
SiteGround分布式備份系統,更好的保護獨立站用戶數據
C語言實現呼吸燈(HAL庫)
前端每日實戰:71# 視頻演示如何用純 CSS 創作一個跳 8 字型舞的 loader
使用purifycss精簡css
Flex布局實例,水平垂直居中展示
overflow屬性便捷語法的不兼容問題
使用 <wbr> 解決長 URL 的換行問題