關於換行以及換行屬性

来源:https://www.cnblogs.com/moonLightcy/archive/2019/12/24/12090104.html
-Advertisement-
Play Games

對於CSS的white space屬性,我想大部分人應該和我差不多,最常用的就是nowrap屬性,最多用來做超長省略號顯示的時候會用到【hiahiahia~】 起因是這樣的:產品doggie策划了一個元旦活動,活動主頁最下邊需要顯示配置的活動規則,註意,是配置的活動規則,所以,免不了運營小妹要在後臺 ...


對於CSS的white-space屬性,我想大部分人應該和我差不多,最常用的就是nowrap屬性,最多用來做超長省略號顯示的時候會用到【hiahiahia~】

起因是這樣的:產品doggie策划了一個元旦活動,活動主頁最下邊需要顯示配置的活動規則,註意,是配置的活動規則,所以,免不了運營小妹要在後臺配置一個活動規則,肯定不指望她們能配置html文本的呀,對吧,於是她們配置的是這樣的:

    1、封墊蘇菲房間都是克拉夫;
    2、對方薩芬的刷分放大;
    3、粉打發打發打發

這樣色的,於是,取數據的時候,那隱藏的換行符免不了就被帶走了~走了~了,它就變成了一個真正的,換行符。就像word文檔裡面看見的那樣

image

於是,頁面呈現與DOM結構就變成了這樣

image

顯然,這不是我們真實想要它呈現的效果,我們當然是想它能聰明的在該換行的時候換行呀,對吧,那麼問題來了,為什麼,它沒有換行呢?

換行符

阿望腦袋裡能記下來的換行符一共有4種

  1. \n:最初接觸\n,是學C語言換行的時候,釋義為:輸入完一行內容後,游標轉到下一行的起始位置
  2. \r\n:回車換行(回車:回車就是把水平位置複位,換行:換行就是往下一行,不改變水平位置,可以想象一下,在word文檔中點擊鍵盤迴車鍵,其實執行的是回車+換行的操作)
  3. <br />:這個換行符是HTML唯一能識別的換行標簽
  4. ↵:word文檔軟回車標記

當然,除了這幾種,不同的語言可能會有它們自己的換行符,比如C++的endl,VB的空格+下劃線

百度百科顯示,word換行符是一種換行符號,它的作用是換行顯示,但是它不是真正的段落標記,它的換行不是真正意義上的重起一段,因此被換行符分割的文字其實仍然還是一個段落中的,word中基於段落的所有操作都是不會識別換行符為段落結尾的,再加上在HTML中,只能識別br標簽來做基本的文本換行,所以,這也就是文章開頭說的,為什麼word軟回車換行符不能在HTML中正確回車顯示了

HTML中的換行

在HTML中,換行可以有以下幾種辦法

塊級元素包裹

這個就不多做解釋了,塊級元素最基本的定義就是一般都從新行開始,相鄰的塊級元素將會在不同行顯示,預設了它的換行行為

br 標簽

br 是HTML中預設的、唯一的可識別的換行元素,在要換行的地方加進去就行,它是一個自閉合標簽

pre 標簽

來,解釋一下上面才說了br 是HTML中預設的、唯一的可識別的換行元素,怎麼突然有冒了個pre標簽出來!

pre 元素可定義預格式化的文本,被包圍在 pre 元素中的文本通常會保留空格和換行符,而文本也會呈現為等寬字體,所以,並不是因為它被識別成了換行元素才導致換行,而是因為,它保留了文本節點最原始的格式,你給我什麼,我還你什麼,而不是像其他的元素,你給我充滿換行符合空格的文本,我給你被我壓縮壓縮再壓縮的瘦身版文本

友情提示:它不僅可以保留換行格式,還可以保留你的多個空格噢,因為pre元素預設帶有樣式 white-space: pre;

舉個慄子

    <pre>
        1、封墊蘇菲房間都     是克拉夫;
        2、對方薩芬的刷分放大;
        3、粉打發打發打發
    </pre>

    // 顯示
    1、封墊蘇菲房間都     是克拉夫;
    2、對方薩芬的刷分放大;
    3、粉打發打發打發

    <div>
        1、封墊蘇菲房間都     是克拉夫;
        2、對方薩芬的刷分放大;
        3、粉打發打發打發
    </div>

    // 顯示
    1、封墊蘇菲房間都 是克拉夫; 2、對方薩芬的刷分放大; 3、粉打發打發打發

鑒於對pre標簽的無知,在阿望還在做JSP的時候,遇到這種換行的需求通常都是正則表達式將換行符轉換成br標簽,然後通過HTML(vue的v-html)渲染成換行的DOM節點,相信也是大多數人的第一選擇

    '我的字元串1\r\n\r\n\r\n\r\n我的字元串2\r\n111'.replace(/\r\n/g, '<br />')

現在想來,當初那些前輩們教下來的也是這個辦法,估計,他們也沒想到,一行CSS代碼就能解決吧。。。

CSS屬性換行

我們假設有個超長的文本節點:"哈哈哈,congratulations",我們假設有個容器長度只能裝得下"哈哈哈,con"

word-break

word-break 屬性規定自動換行的處理方法,可以讓瀏覽器實現在任意位置的換行,它是CSS3推出的新屬性(有相容性問題),用來標明怎麼樣進行單詞內的斷句

什麼叫單詞內的斷句呢?簡單點來說,就是當文本節點"哈哈哈,congratulations"在容器中顯示成了"哈哈哈,con[假設這裡換了行]gratulations"的時候,就產生了單詞內斷句。瀏覽器預設的時候,"哈哈哈,congratulations"在容器中會顯示成"哈哈哈,[假設這裡換了行]congratulations",即:如果有一個單詞很長,導致一行中剩下的空間已經放不下它時,則瀏覽器會把這個單詞挪到下一行去

word-break一共有三個屬性值

normal 瀏覽器預設的換行規則

"哈哈哈,congratulations"在容器中會顯示成"哈哈哈,[假設這裡換了行]congratulations"

break-all 允許在單詞內換行(單詞是指non-CJK (CJK 指中文/日文/韓文) 文本)

"哈哈哈,congratulations"在容器中會顯示成"哈哈哈,con[假設這裡換了行]gratulations"

keep-all 只能在半形空格或連字元處換行

CJK 文本不斷行, Non-CJK 文本表現同 normal

word-wrap

word-wrap 屬性允許長單詞或 URL 地址換行到下一行

word-break一共有兩個屬性值

normal 只在允許的斷字點換行(瀏覽器保持預設處理)

break-word 在長單詞或 URL 地址內部進行換行

那麼它與word-break的區別是什麼呢?

首先看我們的前提條件:有個超長的文本節點:"哈哈哈,congratulations",我們假設有個容器長度只能裝得下"哈哈哈,con",那麼意味著,不添加word-break與word-wrap屬性的時候,該文本節點在容器內顯示為"哈哈哈,[假設這裡換了行]congratulations",且單詞congratulations肯定是衝出了容器邊界的,超級難看。這個時候word-wrap就能派上用場了,給這段文字加上word-wrap: break-word之後,文本節點就會顯示成"哈哈哈,[假設這裡換了行]congratula[假設這裡換了行]tions",這樣,為了防止長單詞溢出,就在它的內部斷句了

那既然有word-wrap,又為什麼要有word-break屬性呢?簡單來說,當設置word-break:break-all; word-wrap:break-word,我們的超長文本"哈哈哈,congratulations"就會顯示成"哈哈哈,con[假設這裡換了行]gratulatio[假設這裡換了行]ns",它的用處就是:節省空間!是的,你沒有看錯!

word-wrap 是用來決定允不允許單詞內斷句的,如果不允許的話長單詞就會溢出。最重要的一點是它還是會首先嘗試挪到下一行,看看下一行的寬度夠不夠,不夠的話就進行單詞內的斷句

image

word-break:break-all則更粗暴,直接進行單詞內的斷句

white-space

white-space 屬性設置如何處理元素內的空白,這個屬性聲明建立佈局過程中如何處理元素中的空白符,實際上會對列表溢出換行和文字溢出進行處理

空白符

空白符是指在屏幕不會顯示出來的字元(如空格,製表符tab,回車換行等),HTML預設已經把所有空白符合併成一個空格

white-space一共有五個屬性值

normal 預設,空白符會被瀏覽器忽略

多個空格合併成1個空格,換行符被忽略,在容器寬度內自調整換行

image

pre 空白會被瀏覽器保留,其行為方式類似 HTML 中的 pre 標簽

多個空格被保留,換行符被保留,不會在容器寬度內自調整換行,直到遇到 br 標簽為止

image

nowrap 文本不會換行,文本會在在同一行上繼續,直到遇到 br 標簽為止

多個空格合併成1個空格,換行符被忽略,不會在容器寬度內自調整換行,這是它與預設行為不一樣的地方

image

pre-wrap 保留空白符序列,但是正常地進行換行

多個空格被保留,換行符被保留,在容器寬度內自調整換行

image

pre-line 合併空白符序列,但是保留換行符

多個空格合併成1個空格,換行符被保留,在容器寬度內自調整換行

image

inherit 規定應該從父元素繼承 white-space 屬性的值

以上,可根據實際情況選擇自己想要的屬性值

另:若換行處想添加連字元,將congratulations換行顯示為con-gratulatio-ns的話,可使用屬性hyphens:auto;在適當的位置自動插入連字元換行


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • border屬性介紹 屬性設置元素邊框。 邊框 個要素如:粗細、線型、顏色。 邊框線型屬性值說明表如: 屬性指| 描述 | none |定義無邊框。 hidden |與 "none" 相同。不過應用於表時除外,對於表,hidden 用於解決邊框衝突。 dotted |定義點狀邊框。在大多數瀏覽器中呈 ...
  • 上面代碼通過實例化子類和父類,分別調用toString()實現了繼承的關係。 這個時候有這樣的需求;不實例化父類,直接通過子類完完整整的調用父類的方法或屬性。 實現代碼如下 通過面簡單的三行紅色代碼就實現了子類訪問父類成員的需求。 本來想模仿java的使用super訪問父類,後來想想super是ja ...
  • 案例:圖片跟著滑鼠飛的最終版本 換了個好看的糖果照片,想給博客首頁加上,但是加上後,應該是overwrite原來的html,所以光有滑鼠跟著飛的效果,原來的功能都不能用了 放入common.js <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
  • // 本地存儲 setStorage(name, data){ let dataType = typeof data; // json對象 if(dataType === 'object'){ window.localStorage.setItem(name, JSON.stringify(data... ...
  • JavaScript是一種屬於網路的腳本語言,已經被廣泛用於Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。 JavaScript的三大組成部分是: 1、ECMAScript:JavaScrip ...
  • offset系列:獲取元素的寬,高,left,top, offsetParent offsetWidth:元素的寬,有邊框 offsetHeight:元素的高,有邊框 offsetLeft:元素距離左邊位置的值 offsetTop:元素距離上面位置的值 scroll系列:卷曲出去的值 scrollL ...
  • 1.引入方式不同 query要用path來引入 this.$router.push({ path: 'test', query: { type: 2, detail: '哈哈' } }) params要用name來引入 params要用name來引入 this.$router.push({ name ...
  • var map = {}; map['key1']=value1; map['key2']=value2; map['key3']=value3; map['key4']=value4; map['key5']=value5; 問題解決! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...