垂直居中一個元素的方法

方法一

使用絕對定位和負(fù)外邊距對塊級元素進(jìn)行垂直居中

#parent {
    position: relative;
}
#child {
    width: 150px;
    height: 100px;
    position: absolute;
    top: 50%;
    margin: -50px 0 0 0;
}

上面的方法優(yōu)點(diǎn)是兼容性不錯迈嘹,缺點(diǎn)是必須知道被居中塊級元素的尺寸瞳秽,否則無法實(shí)現(xiàn)

方法二

使用絕對定位和transform

#parent {
    position: relative;
}
#child {
    position: absolute;
    top: 50%;
    transform: translate(0, -50%);
    /* 也可以transform: translateY(-50%) */
}

上面方法優(yōu)點(diǎn)是不需要知道被居中元素的尺寸,因?yàn)?code>transform中的translate屬性的百分比是相對于元素自身尺寸的

方法三

使用絕對定位和負(fù)外邊距

#parent {
    position: relative;
}
#child {
    height: 30%;
    position: absolute;
    top: 50%;
    margin: -15% 0 0 0;
}

上面的方法其實(shí)和第一種方法差不多寿桨,只是涉及到一個margin的百分比參數(shù),這個值規(guī)定了該元素基于父元素尺寸的百分比,可以根據(jù)實(shí)際應(yīng)用場景決定是使用百分比還是使用具體的數(shù)值鸯旁。

方法四

絕對定位結(jié)合margin:auto

#parent {
    position: relative;
}
#child {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 0;
    bottom: 0;
    margin: auto;
    /* 如果設(shè)置了left:0;right:0;那么子元素將會水平垂直居中 */
}

上面方法的實(shí)現(xiàn)要求:要把垂直居中的元素相對父元素絕對定位,top量蕊、bottom設(shè)為相等的值上面的例子里設(shè)成了0铺罢,實(shí)際上只要設(shè)置為相等的值就可以實(shí)現(xiàn)居中,后面再設(shè)置元素的marginauto残炮。
被居中的寬高也可以不設(shè)置韭赘,但是不設(shè)置的話必須是圖片這種自身就包含尺寸的元素,否則無法實(shí)現(xiàn)势就。

方法五

使用padding實(shí)現(xiàn)子元素垂直居中

#parent {
    width: 300px;
    height: 300px;
    padding: 100px 0;
}
#child {
    width: 200px;
    height: 100px;
}

這種實(shí)現(xiàn)方式非常簡單泉瞻,就是給父元素設(shè)置相等的上下內(nèi)邊距,則子元素自然是垂直居中的苞冯,當(dāng)然這時候父元素是不能設(shè)置高度的袖牙,要讓它自動被填充起來,除非設(shè)置了一個正好等于上內(nèi)邊距+子元素高度+下內(nèi)邊距的值舅锄,否則無法精確的垂直居中鞭达。這種方式看似沒有什么技術(shù)含量,但其實(shí)在某些場景下也是非常好用的。

方法六

設(shè)置第三方基準(zhǔn)

<div id="parent">
    <div id="base"></div>
    <div id="child">被垂直居中的元素</div>
</div>
#parent {
    width: 300px;
    height: 300px;
    background: #ddd;
}
#base {
    height: 50%;
    background: #AF9BD3;
}
#child {
    height: 100px;
    background: rgba(131, 224, 245, 0.6);
    margin-top: -50px;
}

這種方式也非常簡單畴蹭,首先設(shè)置一個高度等于父元素高度一半的第三方基準(zhǔn)元素烘贴,那么此時該基準(zhǔn)元素的底邊線自然就是父元素縱向上的中分線,做完這些之后再給要垂直居中的元素設(shè)置一個margin-top撮胧,值的大小是它自身高度的一半取負(fù)桨踪,則實(shí)現(xiàn)垂直居中。

方法七

使用flex布局

<div id="box">我是被垂直居中的文本</div>
#parent {
    width: 300px;
    height: 300px;
    display: flex;
    align-items: center;
}

這種方式同樣適用于塊級元素芹啥,flex布局還是很強(qiáng)大的
點(diǎn)我進(jìn)入阮一峰老師的flex教程

方法八

使用彈性布局的方式

<div id="parent">
    <div id="child">
        我是被居中的文本
    </div>
</div>
#parent {
    width: 300px;
    height: 300px;
    background: #ddd;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
#child {
    width: 300px;
    height: 100px;
    background: #08BC67;
    line-height: 100px;
}

這種方式也是首先給父元素設(shè)置display:flex锻离,設(shè)置好之后改變主軸的方向flex-direction: column,該屬性可能的取值有四個墓怀,分別如下:
  row(該值為默認(rèn)值):主軸為水平方向汽纠,起點(diǎn)在左端;
  row-reverse:主軸為水平方向傀履,起點(diǎn)在右端虱朵;
  column:主軸為垂直方向,起點(diǎn)在上沿钓账;
  column-reverse:主軸為垂直方向碴犬,起點(diǎn)在下沿。
justify-content屬性定義了項(xiàng)目在主軸上的對齊方式梆暮,可能的取值有五個服协,分別如下(不過具體的對齊方式與主軸的方向有關(guān),以下的值都是假設(shè)主軸為從左到右的):
  flex-start(該值是默認(rèn)值):左對齊啦粹;
  flex-end:右對齊偿荷;
  center:居中對齊;
  space-between:兩端對齊唠椭,各個項(xiàng)目之間的間隔均相等跳纳;
  space-around:各個項(xiàng)目兩側(cè)的間隔相等。

方法九

還有一種在前面已經(jīng)見到過很多次的方式就是使用 line-height 對單行文本進(jìn)行垂直居中

<div id="parent">
    我是被居中的文本
</div>
#parent{
    width: 300px;
    height: 300px;
    line-height: 300px;
}

這里有一個小坑需要大家注意:line-height的值不能設(shè)為100%贪嫂,我們來看看官方文檔中給出的關(guān)于line-height取值為百分比時候的描述:基于當(dāng)前字體尺寸的百分比行間距寺庄。所以大家就明白了,這里的百分比并不是相對于父元素尺寸而言撩荣,而是相對于字體尺寸來講的铣揉。

方法十

使用line-heightvertical-align 對圖片進(jìn)行垂直居中

<div id="parent">
    <img >
</div>
#parent {
    width: 300px;
    height: 300px;
    line-height: 300px;
}
#parent img {
    vertical-align: middle;
}

方法十一

使用 display: tablevertical-align: middle對容器里的文字進(jìn)行垂直居中

<div id="parent">
    <div id="child">我需要垂直居中的文本</div>
</div>
#parent {
    width: 300px;
    height: 300px;
    display: table;
}
#child {
    display: table-cell;
    vertical-align: middle;
}

這里關(guān)于vertical-align啰嗦兩句:vertical-align屬性只對擁有valign特性的html元素起作用饶深,例如表格元素中的<td>餐曹、<th><img>等等敌厘,而像<div>台猴、<span>這樣的元素是不行的。
  valign屬性規(guī)定單元格中內(nèi)容的垂直排列方式,語法:<td valign="value">饱狂,value的可能取值有四種:
  top:對內(nèi)容進(jìn)行上對齊
  middle:對內(nèi)容進(jìn)行居中對齊
  bottom:對內(nèi)容進(jìn)行下對齊
  baseline:基線對齊
  關(guān)于baseline值:基線是一條虛構(gòu)的線曹步。在一行文本中,大多數(shù)字母以基線為基準(zhǔn)休讳。baseline 值設(shè)置行中的所有表格數(shù)據(jù)都分享相同的基線讲婚。該值的效果常常與 bottom 值相同。不過俊柔,如果文本的字號各不相同筹麸,那么 baseline 的效果會更好。

此文參考了呆里呆氣的文章雏婶,自己也做了一些修改物赶,如果有更好的意見和建議,歡迎下方留言留晚。謝謝酵紫!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市错维,隨后出現(xiàn)的幾起案子奖地,更是在濱河造成了極大的恐慌,老刑警劉巖赋焕,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹉动,死亡現(xiàn)場離奇詭異,居然都是意外死亡宏邮,警方通過查閱死者的電腦和手機(jī)泽示,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜜氨,“玉大人械筛,你說我怎么就攤上這事§祝” “怎么了埋哟?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長郎汪。 經(jīng)常有香客問我赤赊,道長,這世上最難降的妖魔是什么煞赢? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任抛计,我火速辦了婚禮,結(jié)果婚禮上照筑,老公的妹妹穿的比我還像新娘吹截。我一直安慰自己瘦陈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布波俄。 她就那樣靜靜地躺著晨逝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懦铺。 梳的紋絲不亂的頭發(fā)上捉貌,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音冬念,去河邊找鬼昏翰。 笑死,一個胖子當(dāng)著我的面吹牛刘急,可吹牛的內(nèi)容都是我干的棚菊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼叔汁,長吁一口氣:“原來是場噩夢啊……” “哼统求!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起据块,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤码邻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后另假,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體像屋,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年边篮,在試婚紗的時候發(fā)現(xiàn)自己被綠了己莺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡戈轿,死狀恐怖凌受,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情思杯,我是刑警寧澤胜蛉,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站色乾,受9級特大地震影響誊册,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜暖璧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一案怯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漆撞,春花似錦殴泰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至至会,卻和暖如春离咐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奉件。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工宵蛀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人县貌。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓术陶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親煤痕。 傳聞我的和親對象是個殘疾皇子梧宫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容