isplay的屬性值inline-block是讓元素在一行顯示,html元素默認上下排列的,所以中間有換行符,于是并排顯示就有了換行符帶來的空隙。這些空隙在大多數網頁布局中并不合適,那么如何解決呢?
方案一:將html標簽要display:inline-block 的元素寫在一行。缺點:代碼可讀性差。
方案二:給父元素設置font-size:0,缺點是子元素如果里面有文字,文字會消失不見,所以又要給子元素設置font-size:0,增加了代碼量。
方案三:給元素設置float:left,缺點高度塌陷,要清楚浮動。
方案四:設置子元素的margin-left為負值,但是元素之間的間隙大小是根據上下文的字體大小確定的,而每個瀏覽器的換行空隙大小不同,如果font-szie:16px,chrome空隙為8px,火狐空隙為4px.所以這個方法不通用。
方案五:設置父元素 display:table;word-spacing:-1em;目前這個方法可以完美解決,且兼容其他瀏覽器。
使用Vue開發(fā)前端頁面的時候,難免會遇到接收的字符串過長,需要讓字符串換行。以往在HTML頁面開發(fā)中,常用的方法是word-wrap:break-word;添加上這行代碼后,在塊元素定義的寬度不夠時輸出的文本內容就會換行。但是在vue中使用word-wrap屬性就不起作用,網上查找資料說使用white-space:pre-line;就可以實現換行。本文就簡單介紹下white-space的使用。
因為我沒有系統(tǒng)的學過前端,就是遇到一點問題學習一點前端知識。當我在這次實現換行效果的過程中就學習使用了white-space的用法。
首先按照網上的資料,直接添加white-space:pre-line; 是實現了換行,但是換行卻是從第二行中間開始的。具體效果大概如下圖:
為什嗎會有這個效果呢?第一反應是有空格產生了,哪里來的空格呢?那就是接收的后端傳遞的字符串中有空格,于是就想辦法去處理接收的變量,嘗試了以下兩種方法:
(1)添加一層盒子嵌套,父盒子font-size:0,子盒子font-size:12px;
.tabBox_tit {
border: 1px solid red;
width: 175px;
height: 50px;
white-space: pre-line;
font-size: 0;
margin: 0 2px 0 10px;
letter-spacing: 1px;
box-sizing: border-box;
}
.tabBox_tit span {
font-size: 16px; /* 根據需求設置具體的字體大小 */
}
/*說明如下:
將 white-space 屬性的值從 pre-wrap 修改為 pre-line,這樣文本可以從第一行第一個字符輸出并且可以自動換行。
將 font-size 屬性的值設為 0,以去除在HTML中的空格(空格、回車等),避免產生不必要的空隙。
將 .tabBox_tit 框架內的文字大小設為 0 ,因為前面已經有了一個全局修改,
并通過 .tabBox_tit span 選擇器來單獨指定文字的大小,這樣可以避免子元素繼承父元素的字體大小。
*/
復制代碼
(2)使用flex布局讓內容居中
.tabBox_tit {
border: 1px solid red;
width: 175px;
height: 50px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
font-size: 16px; /* 根據需求設置具體的字體大小 */
margin: 0 2px 0 10px;
letter-spacing: 1px;
box-sizing: border-box;
}
/*
說明如下:
將 white-space 屬性去掉,因為使用 flex 屬性后不需要再用這個屬性來控制文本輸出。
添加 display: flex 屬性,并設置 flex-direction: column,這樣會將容器中的元素按列排列。
添加 justify-content: center 和 align-items: flex-start 屬性,這樣可以使文字垂直居中并從左側對齊。
*/
復制代碼
經過以上兩種方式的設置,文本輸出樣式還是和上面的截圖一樣,從第二行中間開始輸出。這樣嘗試的時候,沒有實現效果,導致我懷疑自己flex布局的知識點沒有學好,又去重新溫習了一遍flex布局的文檔。改來改去一個小時就過去了。內心有點失敗的挫折感。這個時候,是不是就說明換行符號不是從變量里面?zhèn)鬟f過來的呢?
于是,再去查看代碼,發(fā)現了代碼被編輯器格式話之后換行了,在網上查找資料也終于瞅到有人說到這一點了。于是嘗試了修改VUE的模板代碼,代碼如下:
<!--修改后-->
<span class="tabBox_tit line1">
<span class="font-color-red" v-if="val.cart_info.is_gift">贈品</span>{{ val.cart_info.productInfo.store_name + ' | ' }}{{val.cart_info.productInfo.attrInfo?val.cart_info.productInfo.attrInfo.suk: ''}}
</span>
<!--修改前 -->
<span class="tabBox_tit line1">
<span class="font-color-red" v-if="val.cart_info.is_gift">贈品</span>
{{ val.cart_info.productInfo.store_name + ' | ' }}
{{val.cart_info.productInfo.attrInfo?val.cart_info.productInfo.attrInfo.suk: ''}}
</span>
復制代碼
讓后,讓后我想要的功能就實現了。到這里不得不感慨前端的水真的很深,原來代碼格式化也并不是所有的代碼都可以使用的。
基于以上的折騰分析,總結一下,Vue實現輸出文本自動換行的效果:要做到以下兩點:1.HTML代碼塊不能格式化換行,2.使用white-space:pre-line; 這樣就可以了。
正常情況下到這里都應該寫完了。但是我又有點強迫癥,總覺得不能格式化的代碼不好看,或者以后不小心格式化了,文本輸出這里又出現問題豈不是很不美。于是去查下white-space這個屬性的定義,通過菜鳥教程學習到了更好的解決方法,附菜鳥截圖:
根據教程,知道了想實現換行效果又可以格式化代碼使用:white-space:normal;就可以了。
以上就是前端white-space屬性學習的痛苦經過。希望能幫助到你
作者:沐道PHP
鏈接:https://juejin.cn/post/7221341862116540471
來源:稀土掘金
著作權歸作者所有。商業(yè)轉載請聯系作者獲得授權,非商業(yè)轉載請注明出處。
我自己是一名從事了多年開發(fā)的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年我花了一個月整理了一份最適合2020年學習的web前端學習干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關注我的頭條號并在后臺私信我:前端,即可免費獲取。
使用demo
div { -ms-transform: rotate(0); -webkit-transform: rotate(0); -moz-transform: rotate(0); -o-transform: rotate(0); transform: rotate(0);}
CSS前綴自動補全:autoprefixer
已知: margin:20px; border:10px; padding:10px; width:200px; height:50px;

標準盒模型:1\. 占用寬:margin*2+padding*2+border*2+width=20*2+10*2+10*2+200=2802\. 占用高:margin*2+padding*2+border*2+height=20*2+10*2+10*2+50=1303\. 盒子實際寬度:padding*2+border*2+width=10*2+10*2+200=2404\. 盒子實際高度padding*2+border*2+height=10*2+10*2+50=90

怪異盒模型:1\. 占用寬:margin*2+width=20*2+200=2402\. 占用高:margin*2+height=20*2+50=903\. 盒子實際寬度:width=2004\. 盒子實際高度height=50
IE8及更早版本不兼容問題解決方案:在HTML頁面聲明
BFC(塊狀格式化上下文,獨立的盒子,布局不受外部影響,但是如果同一個BFC中,同級塊狀元素的margin-top和margin-bottom會重疊)
只要元素滿足下面的任一條件,都會觸發(fā)BFC特征。
解決問題:
元素被當成行內元素排版時,元素直接的空白符會被瀏覽器處理,根據white-spack的處理方式(默認是normal,合并多余空白),Html代碼在回車換行時被轉成一個空白符,在字體不為0的情況下,空白符占據一定寬度,所以inline-block元素之間就出現了空隙。
復現<ul> <li>首頁</li> <li>登陸</li> <li>資源</li> <li>社區(qū)</li> <li>幫助</li></ul>

解決辦法:

優(yōu)先級相同時會發(fā)生什么? 樣式被覆蓋
normalize.css是一個css reset的替代方案。
ul>li:nth-child(2n+1) { background-color: red; }ul>li:nth-child(2n) { background-color: yellow;}
ul>li:first-child { border-top: none; }
有夢想的人,眼睛會發(fā)光。
希望屏幕前的你,能夠關注我一波。接下來,我會分享前端各種干貨,以及編程中的趣事。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。