CSS 實現(xiàn)垂直居中的 8 種方式

初始代碼:

<div class="container">
  <div class="content"></div>
</div>

.container {
  background-color: gray;
  height: 30rem; /* 高度可以隨意變化  */
}
.content {
  background-color: wheat;
  height: 10rem;
  width: 10rem;
}

最終效果:


css-center.png

1. 用margin: auto的方法

原理:

  • margin: auto 常用于設(shè)置水平居中孽查。它會為元素自動填充可用空間。
    但是對于以下情況不起作用:
元素 Position
內(nèi)聯(lián)元素 float
浮動元素 inline
塊級元素 absulute/fixed
  • 當我們通過通過 position:absolute 和 top:0 bottom:0 來給元素的垂直方向拓展設(shè)置可用空間故慈, 那么該元素可自動填充父級元素的可用尺寸。
  • 代碼實現(xiàn):
.container {
  position: relative; /* 設(shè)置父元素position為relative */
}
.content {
  position: absolute;
  top: 0; /* 設(shè)置四個方向是位置為0  */
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto; /* 利用margin: auto實現(xiàn)垂直居中  */
}

2. 用top: 50%; 加上 translateY(-50%)

  • 原理:
    這種方式實現(xiàn)起來比較簡單框全,但是前提是不需要做別的transform改動察绷。

  • 代碼實現(xiàn):

.container {
  position: relative; /* 設(shè)置父元素position為relative */
}
.content {
  position: absolute;
  top: 50%; /* 設(shè)置子元素的起始位置為父元素垂直方向50%的位置 */
  transform: translateY(-50%); /* 再往上平移子元素高度的50% */
  /* 這兩條可以同時實現(xiàn)水平居中
  transform: translate(-50%, -50%);
  left: 50% */
}

3. display: flex加上margin: auto

  • 原理:
    flex 容器中默認存在兩根軸:主軸和交叉軸。默認的主軸是水平軸津辩。通過控制子元素對這兩根軸的對齊方式拆撼。可以比較輕松地實現(xiàn)居中喘沿。
    將父元素設(shè)置為 flex 容器闸度,再加上margin: auto來同時實現(xiàn)水平和垂直居中。這個方法可以說是最簡單的蚜印。
  • 代碼實現(xiàn):
.container {
  display: flex; /* 設(shè)置父元素設(shè)置為flex容器 */
}
.content {
  margin: auto;
}

4. 通過設(shè)置 flex 容器的justify-contentalign-items兩個屬性來實現(xiàn)

  • 原理:
    flex 布局中的兩個屬性justify-content:定義了元素在主軸的對齊方式莺禁, align-items:定義了元素在交叉軸的對齊方式。
    通過把兩個對齊方式都設(shè)置為center,來實現(xiàn)居中對齊
  • 代碼實現(xiàn)
.container {
  display: flex;
  justify-content: center;
  align-items: center;
}

5. 通過設(shè)置 flex 中子元素的align-self屬性

  • 原理:

在 flex 布局中窄赋,可以通過設(shè)置子元素的align-self來單獨定義對齊方式哟冬。它和align-items的區(qū)別是:它是定義在子元素上楼熄,會覆蓋 flex 容器中定義的align-items屬性

  • 代碼實現(xiàn)
.container {
  display: flex; /* 設(shè)置父元素設(shè)置為flex容器 */
}
.content {
  align-self: center;
  margin: 0 auto; /* 實現(xiàn)水平居中,flex布局不支持justify-self */
}

6. grid 布局+margin:auto

  • 原理
    grid 網(wǎng)格布局,將元素分為行和列浩峡,是一種二維布局孝赫。它常用于實現(xiàn)我們現(xiàn)在流行的瀑布流顯示模式。
    在實現(xiàn)居中上红符,它和 flex 布局實現(xiàn)居中的原理很像青柄。先確認容器,然后再通過相應屬性來設(shè)置子元素的對齊方式预侯。

  • 代碼實現(xiàn)

.container {
  display: grid;
}
.content {
  margin: auto;
}

7. grid 布局致开,設(shè)置容器的align-contentjustify-items

  • 原理
    justify-content屬性設(shè)置整個內(nèi)容區(qū)域在容器里面的水平位置,align-content屬性設(shè)置整個內(nèi)容在容器的垂直位置萎馅。

  • 代碼實現(xiàn)

.container {
  display: grid;
  align-items: center;
  justify-content: center;
}

8. grid 布局双戳,單獨設(shè)置子元素的對齊方式

  • 代碼實現(xiàn)
.container {
  display: grid;
}
.content {
  justify-self: center; /*  設(shè)置子元素垂直居中 */
  align-self: center; /* 設(shè)置子元素水平居中*/
}

總結(jié):

無論是垂直居中或者水平居中,要點是:

  • 先確認參照物糜芳,比如說position:relative的父元素,flex 容器或者 grid 容器飒货,甚至還有我們這篇文章中沒有提到的 table 布局
  • 再根據(jù)參照物進行居中,一個是通過marin:auto來對可用空間的自動填充峭竣√粮ǎ或者是通過一些控制對齊的屬性來實現(xiàn)居中。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末皆撩,一起剝皮案震驚了整個濱河市扣墩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扛吞,老刑警劉巖呻惕,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異滥比,居然都是意外死亡亚脆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門盲泛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來濒持,“玉大人,你說我怎么就攤上這事查乒∶趾恚” “怎么了郁竟?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵玛迄,是天一觀的道長。 經(jīng)常有香客問我棚亩,道長蓖议,這世上最難降的妖魔是什么虏杰? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮勒虾,結(jié)果婚禮上纺阔,老公的妹妹穿的比我還像新娘。我一直安慰自己修然,他們只是感情好笛钝,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愕宋,像睡著了一般玻靡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上中贝,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天囤捻,我揣著相機與錄音,去河邊找鬼邻寿。 笑死蝎土,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绣否。 我是一名探鬼主播誊涯,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒜撮!你這毒婦竟也來了醋拧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤淀弹,失蹤者是張志新(化名)和其女友劉穎丹壕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薇溃,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡菌赖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沐序。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琉用。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖策幼,靈堂內(nèi)的尸體忽然破棺而出邑时,到底是詐尸還是另有隱情,我是刑警寧澤特姐,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布晶丘,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浅浮。R本人自食惡果不足惜沫浆,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滚秩。 院中可真熱鬧专执,春花似錦、人聲如沸郁油。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桐腌。三九已至痊末,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哩掺,已是汗流浹背凿叠。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嚼吞,地道東北人盒件。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像舱禽,于是被迫代替她去往敵國和親炒刁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

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