元素設(shè)置inline-block添加文案后的元素塌陷問題(verticle-align屬性解析)

? ??????在了解可以通過設(shè)置display:inline-block會(huì)將塊級元素?fù)碛衖nline元素一行排列的特性,那么我們可能想要通過將li的display屬性設(shè)置為inline-block來實(shí)現(xiàn)塊級元素的行排列,這時(shí)候你可能說通過設(shè)置浮動(dòng)float就可以解決,不著急,float的原理和實(shí)現(xiàn)作為補(bǔ)充內(nèi)容會(huì)接著聊,那么接下來先通過效果圖來看一下問題所在

? ??????代碼展示(通過設(shè)置display將li元素行排列):

1

效果如下:


2

是不是感覺不可思議? 到底發(fā)生了什么呢?為什么加了文字后會(huì)出現(xiàn)塌陷和預(yù)期的不一樣?

一、解釋這種現(xiàn)象產(chǎn)生的原因


1.預(yù)備知識(display的屬性設(shè)置為inline-block、inline和block會(huì)有什么區(qū)別)



* inline?

1.inline元素不會(huì)獨(dú)占一行,多個(gè)相鄰的行內(nèi)元素會(huì)排列在同一行里,直到一行排列不下,才會(huì)新?lián)Q一行,其寬度隨元素的內(nèi)容而變化。

2.inline元素設(shè)置width,height屬性無效。

3.inline元素的margin和padding屬性。margin屬性不會(huì)生效。padding屬性會(huì)生效,但是會(huì)和其他兄弟元素發(fā)生邊距重疊。



*block

1.block元素會(huì)獨(dú)占一行,多個(gè)block元素會(huì)各自新起一行。默認(rèn)情況下,block元素寬度自動(dòng)填滿其父元素寬度。

2.block元素可以設(shè)置width,height屬性。塊級元素即使設(shè)置了寬度,仍然是獨(dú)占一行。

3.block元素可以設(shè)置margin和padding屬性。



*inline-block

1.簡單來說就是將對象呈現(xiàn)為inline對象,但是對象的內(nèi)容作為block對象呈現(xiàn)。之后的內(nèi)聯(lián)對象會(huì)被排列在同一行內(nèi)。比如我們可以給一個(gè)link(a元素)inline-block屬性值,使其既具有block的寬度高度特性又具有inline的同行特性。



2.預(yù)備知識(垂直對齊設(shè)置vertical-align)

????????這個(gè)屬性在前端領(lǐng)域出現(xiàn)得比較早,一開始以為是和text-align屬性相反的設(shè)置,text-align是設(shè)置文本水平對齊方案,那么vertical-align肯定就是設(shè)置文本垂直對齊的方案啦,emm,其實(shí)也差不多,那么我們來分析一下這個(gè)屬性:

*為當(dāng)前元素設(shè)置垂直對齊方式,那我們首先就要明確有多少種方式可以選擇(如果之前沒有接觸過vertical-align,看到這些選擇可能會(huì)是懵的,別著急,繼續(xù)往下看)

?*這里我希望你認(rèn)真看一下vertical-align的官方定義及使用標(biāo)注,你會(huì)發(fā)現(xiàn)特別說明只有inline和inline-block元素才能設(shè)置


3

????????解釋一下 top middle baseline bottom ,這個(gè)是張鑫旭的一張圖,想要通過我們小學(xué)的英文作業(yè)本來解釋這個(gè)線的劃分,暫時(shí)未發(fā)現(xiàn)更通俗易懂的解釋


4

????????對于inline-block元素來說,他的基線取決于元素本身的特性,在該元素中沒有行內(nèi)子元素(DOM樹的子元素,有塊子元素不算但是塊子元素中有行元素算)的時(shí)候或者overflow不為visible,該inline-block的基線為margin-bottom的下邊界。否則,以該元素中最后一個(gè)行框子元素的基線為該元素的基線

3.解釋上述問題中前兩個(gè)li元素會(huì)下移

????????這里先做一個(gè)聲明:說到底設(shè)置display為inline-block沒錯(cuò),錯(cuò)在瀏覽器的vertical-align的默認(rèn)值為baseline

????????由上面baseline的定義可知第一個(gè)li的baseline在哪 ,很明顯就是下面這條黑色的線(上面一條黑線畫失誤請忽略。。。),如果不是很明白請多理解上面baseline的定義,如果上面的知識點(diǎn)你都懂,那么你應(yīng)該明白了為什么第二個(gè)li會(huì)是那么排列


5

二.解決辦法

1.當(dāng)然很明顯的一個(gè)辦法是為li設(shè)置vertical-align為top

2.第二個(gè)方法是設(shè)置overflow設(shè)置為hidden

3.第三個(gè)方法是干脆不設(shè)置display,直接設(shè)置float為left

三.設(shè)置float和display-inline的不同

1.float是一種脫離文檔流的浮動(dòng),所以會(huì)對下面元素的布局產(chǎn)生影響

2.inline-block不會(huì)影響文檔柳,所以不會(huì)影響下面的元素的布局

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容