在 CSS 布局中,我們經(jīng)常會(huì)遇到一個(gè)問(wèn)題,讓某個(gè) DOM 垂直居中在它的父級(jí)元素中。這個(gè)問(wèn)題需要分一些情況,在不同的情況下采用的方案不一樣。
一、采用line-height屬性
這種方式很常見(jiàn),當(dāng) line-height 和 height 兩個(gè)屬性設(shè)置相同的高度時(shí),該元素內(nèi)部的文字將會(huì)居中。
#parent { height: 100px; line-height: 100px; border: solid 1px #333; }
優(yōu)缺點(diǎn):
[優(yōu)點(diǎn)]設(shè)置簡(jiǎn)單;
[缺點(diǎn)]只能對(duì)一行文字進(jìn)行垂直居中;
二、采用 display:table-cell 和 vertical-align:middle
這種現(xiàn)實(shí)方式可以讓標(biāo)簽元素以表格單元格的形式呈現(xiàn),標(biāo)簽就像 table 中的 td,這樣一來(lái)我們就可以通過(guò)vertical-align:middle這個(gè)樣式使得其內(nèi)部的元素居中顯示。
#parent { height: 100px; display: table-cell; vertical-align: middle; border: solid 1px #333; }
優(yōu)缺點(diǎn):
[優(yōu)點(diǎn)]設(shè)置多行文字居中;
[缺點(diǎn)]會(huì)被其它樣式破壞例如:float、position:absolute;
三、采用 position: absolute 和 margin-top。
通過(guò)絕對(duì)定位可以給元素設(shè)置距父元素上部top:50%,但是還沒(méi)結(jié)束該元素還需要做一定的偏移才行,偏移量為該元素的一半高度margint-top:-height/2。
#parent { height: 100px; position: relative; border: solid 1px #333; } #child { height: 20px; margin-top: -10px; position: absolute; top: 50%; }
優(yōu)缺點(diǎn):
[優(yōu)點(diǎn)]居中元素對(duì)其它同級(jí)元素沒(méi)有影響;
[缺點(diǎn)]子元素的高度需要固定;
四、采用 padding-top 和 padding-bottom
這種方式只需要將頂部和底部的padding設(shè)置同樣高度就行。
#parent { padding-top: 20px; padding-bottom: 20px; border: solid 1px #333; }
優(yōu)缺點(diǎn):
[優(yōu)點(diǎn)]父級(jí)元素高度可變;
[缺點(diǎn)]父級(jí)元素高度可變;