css 垂直對(duì)齊 css中vertical-align屬性(垂直對(duì)齊)的使用說明

這兩天寫個(gè)頁(yè)面css的時(shí)候用到了vertical-align屬性,使用過程中踩到了坑,所以總結(jié)如下:
1.vertical-align的語法
vertical-align屬性的具體定義列表如下:
語法: vertical-align : baseline | sub | super | top | text- top | middle | bottom | text-bottom | <百分比> | <長(zhǎng)度> | inherit
說明: 設(shè)置元素內(nèi)容的垂直對(duì)齊方式
值: baseline:基線對(duì)齊;sub:下標(biāo);super:上標(biāo);top:頂端對(duì)齊;text-top:與文本的頂端對(duì)齊;middle:中部對(duì)齊;bottom:底端對(duì)齊;
text-bottom:文本的底端對(duì)齊;
百分比和長(zhǎng)度:CSS2,可為負(fù)數(shù)。
初始值: baseline
繼承性: 不繼承
適用于: 行內(nèi)元素和單元格(table-cell)元素
媒體: 視覺
計(jì)算值: 百分比和長(zhǎng)度值為絕對(duì)長(zhǎng)度;其他同指定值
特別提醒:vertical-align只對(duì)行內(nèi)元素有效,對(duì)塊級(jí)元素?zé)o效。
關(guān)于使用的詳細(xì)介紹可以參考逍遙嘆的《垂直對(duì)齊:vertical-align屬性(轉(zhuǎn))》。
2.關(guān)于vertical-align:middle的問題
middle的時(shí)候,是該元素的中心對(duì)齊周圍元素的中心。這里“中心”的定義是:圖片當(dāng)然就是height的一半的位置,而文字應(yīng)該是基于baseline往上移動(dòng)0.5ex。但是很多瀏覽器往往把ex這個(gè)單位定義為0.5em,以至于其實(shí)不一定是文字的正中心。
所以在使用middle的時(shí)候要特別注意,要在不同瀏覽器中調(diào)試。
3.我遇到的問題
頁(yè)面局部html代碼:
<ul class="gclearfix">
<li>
<em class="num top">1</em>
<a href="#">我這段長(zhǎng)長(zhǎng)的文字只是來測(cè)試行內(nèi)高度的的的的的的的的的的。。。。。。。。。。。。。</a>
<a class="detail" href="#"></a>
</li>
</ul>
相關(guān)樣式表css代碼:
#hot-sou ul li{overflow: hidden;padding: 2px 0 3px;vertical-align: middle;}
#hot-sou ul li .num{width: 15px;height: 15px;margin-top: 3px;background-color: #CCC;line-height: 15px;text-align: center;color: #FFF;display:inline-block;}
#hot-sou ul li .top{background-color: #F6872C;}
#hot-sou ul li a{width: 192px;display: inline-block;margin-left: 5px;overflow:hidden;height:18px;white-space:nowrap;}
#hot-sou ul li .detail{width: 17px;height: 17px;line-height: 17px;background:url(http://p0.qhimg.com/t01a607b2b834b26673.gif) no-repeat;margin-left:10px;margin-top:2px;}
注意上圖中的代碼我在li中使用了vertical-align:middle;li是塊級(jí)元素。
(by guorui-20120920)
根據(jù)上面的介紹我們可以推斷這樣使用是不正確的,vertical-align不繼承,所以li中a的vertical-align都按照瀏覽器的默認(rèn)來取值。因此表現(xiàn)也會(huì)有差異。
chrome下的表現(xiàn):
IE9下的表現(xiàn): IE7下的表現(xiàn):
IE6下的表現(xiàn):
從上面的圖中可以看出,li中的vertical-align:middle(它本身就沒有這個(gè)屬性);并沒有“遺傳”給它里面的em和a(em和a被瀏覽器“潛規(guī)則”了)。
解決的辦法是把vertical-align:middle;正確的寫入到li中的em和a里面。
#hot-sou ul li{overflow: hidden;padding: 2px 0 3px;}
#hot-sou ul li .num{width: 15px;height: 15px;margin-top: 3px;background-color: #CCC;line-height: 15px;text-align: center;color: #FFF;display:inline-block;vertical-align: middle;}
#hot-sou ul li .top{background-color: #F6872C;}
#hot-sou ul li a{width: 192px;display: inline-block;margin-left: 5px;overflow:hidden;height:18px;white-space:nowrap;vertical-align: middle;}
#hot-sou ul li .detail{width: 17px;height: 17px;line-height: 17px;background:url(http://p0.qhimg.com/t01a607b2b834b26673.gif) no-repeat;margin-left:10px;margin-top:2px;}
#hot-sou ul li .detail:hover{background-position:0 -30px;}
更新代碼后。。。
chrome下的表現(xiàn):
IE9下的表現(xiàn): IE7下的表現(xiàn):
IE6下的表現(xiàn):
通過上面的比較發(fā)現(xiàn),還是沒有對(duì)齊,但是這是代碼中的邊距、行高等影響了我們,現(xiàn)在我們把他們統(tǒng)一起來。
#hot-sou ul li{overflow: hidden;padding: 2px 0 3px;}
#hot-sou ul li .num{width: 15px;height: 15px;background-color: #CCC;line-height: 15px;text-align: center;color: #FFF;display:inline-block;vertical-align: middle;}
#hot-sou ul li .top{background-color: #F6872C;}
#hot-sou ul li a{width: 192px;display: inline-block;margin-left: 5px;overflow:hidden;height:15px;line-height:15px;white-space:nowrap;vertical-align: middle;}
#hot-sou ul li .detail{width: 15px;height: 15px;line-height: 15px;background:url(http://p0.qhimg.com/t01a607b2b834b26673.gif) no-repeat;margin-left:10px;}
#hot-sou ul li .detail:hover{background-position:0 -30px;}
更新代碼后。。。
chrome下的表現(xiàn):IE9下的表現(xiàn):


IE7下的表現(xiàn): IE6下的表現(xiàn):
通過上面的比較,我們發(fā)現(xiàn)這樣統(tǒng)一設(shè)置行高后,li中子元素的基線一致了,垂直居中也就獲得了比較滿意的結(jié)果。
總結(jié):這次遇到的問題主要是vertical-align正確使用的問題,通過研究了解到如何規(guī)范使用,特別是有些屬性在塊級(jí)元素和行內(nèi)元素使用上的差別。同時(shí)不同瀏覽器對(duì)于屬性默認(rèn)值的解析也是測(cè)試時(shí)需要注意的問題。如果開發(fā)中使用的是height與line-height相同的取值,會(huì)大大減少不同瀏覽器出現(xiàn)差別的情況,所以這也是開發(fā)中需要注意的地方。
相關(guān)文章
深入理解CSS中的vertical-align屬性和基線問題
這篇文章主要介紹了深入理解CSS中的vertical-align屬性和基線問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考2020-04-03- 本文向大家介紹一下CSS vertical-align 屬性的用法,該屬性定義行內(nèi)元素的基線相對(duì)于該元素所在行的基線的垂直對(duì)齊。2014-10-22
css中圖片于文本的基線對(duì)齊與vertical-align屬性設(shè)置
默認(rèn)的情況是圖片頂對(duì)齊而文字底對(duì)齊,通過設(shè)置css屬性可以使得圖片與文字對(duì)齊,接下來為大家詳細(xì)介紹下設(shè)置各對(duì)象的vertical-align屬性,感興趣的朋友可以參考下哈2013-04-02CSS實(shí)例:vertical-align屬性讓網(wǎng)頁(yè)層居中
網(wǎng)頁(yè)制作Webjx文章簡(jiǎn)介:CSS實(shí)例:vertical-align屬性讓網(wǎng)頁(yè)層居中. vertical-align屬性使網(wǎng)頁(yè)層居中 網(wǎng)頁(yè)源代碼如下: <html> <2009-04-02css vertical-align屬性詳細(xì)圖解分析
vertical-align屬性詳細(xì)分析 最近幾天仔細(xì)研究了一下vertical-align這個(gè)屬性,結(jié)果讓我大吃一驚,這個(gè)很“資深”的CSS標(biāo)準(zhǔn)竟然在各個(gè)瀏覽器里面的表現(xiàn)都各不相同2009-02-10- CSS中的vertical-align用于設(shè)置行內(nèi)塊或者行內(nèi)元素行內(nèi)元素的對(duì)齊方式,使用過程中的坑很多,本文就詳細(xì)的介紹一下vertical-align屬性的具體使用方法,感興趣的可以了解一2023-05-11