[翻譯]關(guān)于Vertical-Align你需要知道的事情
來源:易賢網(wǎng) 閱讀:1090 次 日期:2015-08-24 14:17:25
溫馨提示:易賢網(wǎng)小編為您整理了“[翻譯]關(guān)于Vertical-Align你需要知道的事情”,方便廣大網(wǎng)友查閱!

寫在前面的話

開始學(xué)習(xí)前端以來,在CSS相關(guān)知識當(dāng)中困擾我最多的就是Vertical-Align這個(gè)屬性。在stackoverflow上查找相關(guān)問題的時(shí)候看到了這篇文章,于是將它翻譯出來,作為自己的一次學(xué)習(xí)筆記吧。

正文

在遇到將元素在垂直方向上對齊的需求時(shí),CSS提供了多種方法,有時(shí)候我用float解決,有時(shí)候我使用position:absolute解決,還有時(shí)候采用的方法是手動(dòng)調(diào)整margin和padding。

其實(shí)我并不喜歡這些解決方法,float會讓元素的頂端對齊而且需要手動(dòng)清楚浮動(dòng)。絕對定位讓元素脫離了正常流,這樣這些元素就不會再影響到周圍的元素。在元素的padding和margin固定的情況下,一點(diǎn)小的改變也很有可能對布局造成影響。

接下來登場的就是本文的主角了:Vertical-align。通常來說使用這個(gè)屬性進(jìn)行布局是一種hack行為,因?yàn)樗緛聿⒉皇潜挥糜谶@個(gè)目的。它用在文本和與文本相鄰元素的垂直方向上的對齊問題。然而,你也可以使用Vertical-align在不同的上下文中對元素進(jìn)行靈活的,細(xì)粒度的排布。元素的尺寸無需知曉,元素任然處于正常流當(dāng)中,因此元素的變化會影響到周圍的元素,這使得Vertical-align是非常有價(jià)值的排布方案的選擇。

Vertical-align的奇特之處

Vertical-align有時(shí)候會變的面目猙獰。它似乎有一些謎一樣的規(guī)則。舉例來說,有時(shí)候你改變了Vertical-align的值,但是該元素垂直方向上沒有發(fā)生改變反而別的元素改變了位置。

一些資料在談到Vertical-align這個(gè)問題的時(shí)候深入程度不夠,特別是當(dāng)人們想使用這個(gè)屬性布局的時(shí)候。這些資料更多的將精力集中在了一個(gè)誤區(qū)上,就是嘗試將元素內(nèi)的一切都垂直對齊。他們給出了一下在簡單情況下的例子來解釋Vertical-align這個(gè)屬性而忽略了一些復(fù)雜奇怪的方面。

使用Vertical-align的要求

Vertical-align被用于垂直對齊inline元素,也就是display值為inline和inline-block的元素。inline-table的元素不在本文的討論范圍內(nèi)。

inline元素基本上值得就是文本

inline-block元素就像它的名字一樣,同時(shí)具備inline元素和block元素的特點(diǎn),這樣的元素有padding,margin,border,width,height。其中高度有可能是由元素的內(nèi)容決定的。

inline元素一個(gè)挨著一個(gè)的擺放在行內(nèi),當(dāng)行內(nèi)元素太多的情況下,一個(gè)新行會被創(chuàng)建出來,這些行也叫做line--box。它將行內(nèi)的所有內(nèi)容都包裹了起來。根據(jù)行內(nèi)內(nèi)容的不同,line-box的尺寸也會不同,在接下來的圖里面,紅線代表了line-box的上下

名單

從左到右的三幅圖片都是inline-block元素,不同的是,左面包含著沒有脫離正常流的內(nèi)容c,中間的除了沒有脫離正常流的內(nèi)容以外還加了overflow:hidden,右面的沒有內(nèi)容但是內(nèi)容區(qū)還有高度。紅線代表了margin-box的邊界。黃色代表的是border,綠色的是padding,藍(lán)色的是content,藍(lán)色的線代表的還是baseline。

inline-block元素的外邊緣就是margin-box的邊緣。

inline-block元素的baseline的位置要看該元素有沒有處于正常流之內(nèi)的內(nèi)容。

(1)在有處于正常流內(nèi)容的情況下,inline-block元素的baseline就是最后一個(gè)作為內(nèi)容存在的元素的baseline,這個(gè)元素的baseline的確定就要根據(jù)他自身來確定了。

(2)在overflow屬性不為visible的情況下,baseline就是margin-box的下邊界了。

(3)第三種情況下baseline還是margin-box的下邊界。

line-box

名單

原因就是左面的文字根本就沒有發(fā)生對齊行為,它還是對齊于line-box的baseline。而vertical-align對齊的點(diǎn)是baseline加上半個(gè)x的距離(half of the x-height)。因此文字的最高點(diǎn)超過了icon的高度。

而右面的例子,文字與icon都對齊于一個(gè)中點(diǎn),文字的baseline稍微下移,位于line-box的baseline的下方。結(jié)果是很好的達(dá)到了icon與文字對齊的效果。

line-box的baseline的移動(dòng)問題

這是一個(gè)Vertical-align的坑,line-box中的所有元素都會影響到baseline的位置。假設(shè),一個(gè)元素按某種方式垂直對齊了,但是這種對齊方式會引起baseline的移動(dòng),又因?yàn)榇蟛糠值拇怪睂R方式(除了top和bottom)和baseline有關(guān),因此這個(gè)元素的垂直方向?qū)R的行為會引起該line-box內(nèi)其他元素位置的調(diào)整。

下面還是一些例子

一個(gè)很高的元素,其高度占滿了整個(gè)line-box,那么vertical-align對其實(shí)沒有影響的,在它的top和bottom之外沒有空間讓其移動(dòng)。但是為了滿足它的vertical-align的值,line-box的baseline會發(fā)生移動(dòng),左面的高元素的取值為text-bottom,矮元素的取值為baseline。右面的高元素的取值為text-top,你會看到baseline跳上去了

名單

<!-- left mark-up --> <span class="tall-box text-bottom"></span> <span class="tall-box text-top"></span> <!-- mark-up in the middle --> <span class="tall-box text-bottom"></span> <span class="tall-box text-top"></span> <span class="tall-box middle"></span> <!-- right mark-up --> <span class="tall-box text-bottom"></span> <span class="tall-box text-top"></span> <span class="tall-box text-100up"></span> <style type="text/css"> .tall-box { display: inline-block; /* size, color, etc. */ } .middle { vertical-align: middle; } .text-top { vertical-align: text-top; } .text-bottom { vertical-align: text-bottom; } .text-100up { vertical-align: 100%; } </style>

inline元素下方可能會有一點(diǎn)空隙

下面給出一個(gè)例子,如果嘗試將li元素在垂直方向上進(jìn)行對齊的話在,這個(gè)現(xiàn)象非常常見。

名單

更多信息請查看IT技術(shù)專欄

更多信息請查看技術(shù)文章
易賢網(wǎng)手機(jī)網(wǎng)站地址:[翻譯]關(guān)于Vertical-Align你需要知道的事情
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)