CSS中實現(xiàn)垂直居中, 水平居中方式

垂直居中

1. 使用 padding

CSS 中有很多方式可以實現(xiàn)垂直居中對齊悼院。 一個簡單的方式就是頭部頂部使用 padding:

. parent {
    padding: 70px 0;
    border: 3px solid green;
}

2. 使用 flexbox

使用 flexbox 布局是實現(xiàn)垂直居中最常用的方法之一四啰。在父容器上設(shè)置 display: flexalign-items: center,可以將子元素在垂直方向上居中溜畅。

.parent {
  display: flex;
  align-items: center; /* 在垂直方向上居中 */
}

或者

.parent { 
  display: flex;
}
. child {
   align-self: center;
}

或者

.parent { 
  display: flex;
}
. child {
   margin: auto 0;
}

顯示效果是在同一行, 即使子元素是塊級(block)元素,

3. 使用 table-cell

使用 table-cell 布局也是一種常見的垂直居中方法。在父容器上設(shè)置 display: table-cellvertical-align: middle 和一個固定的高度铝耻,可以使子元素在垂直方向上居中。

.parent {
  display: table-cell;
  vertical-align: middle; /* 在垂直方向上居中 */
  height: 200px; /* 固定高度 */
}

4. 使用 line-height

使用 line-height 屬性也可以實現(xiàn)垂直居中。將父元素的line-height 值設(shè)置為和父元素高度相等的值瓢捉,然后將子元素的 display 屬性設(shè)置為 inline-block频丘,就可以使子元素在垂直方向上居中。對于單行文字/行內(nèi)元素/行內(nèi)塊級元素都是適用的

.parent {
  height: 200px; /* 父元素高度 */
  line-height: 200px; /* 父元素高度 */
}
.child {
  display: inline-block;
  vertical-align: middle; /* 在垂直方向上居中 */
}

5. transform

使用 transform 也可以實現(xiàn)垂直居中泡态。將子元素的 position 屬性設(shè)置為 absolute搂漠,然后將topleft 屬性設(shè)置為 50%,最后使用 translate 函數(shù)將子元素向上和左移動自身高度和寬度的一半某弦,就可以實現(xiàn)垂直居中桐汤。具體代碼如下:

.parent {
  position: relative; /* 父元素設(shè)置為相對定位 */
}
.child {
  position: absolute; /* 子元素設(shè)置為絕對定位 */
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%); /* 將子元素向上和左移動自身高度和寬度的一半 */
}

在使用 transform 實現(xiàn)垂直居中時,需要將父元素的position 屬性設(shè)置為relativeabsolute靶壮,否則子元素?zé)o法正確定位怔毛。


水平居中

1. text-align

使用text-align 屬性可以將文本或行內(nèi)元素水平居中芝发。將父元素的 text-align 屬性設(shè)置為center贿肩,就可以實現(xiàn)其內(nèi)部文本或行內(nèi)元素水平居中滚澜。

.parent {
  text-align: center; /* 水平居中 */
}

2. margin

使用 margin 屬性可以將塊級元素水平居中跛溉。將元素的左右 margin 值設(shè)置為auto决采,就可以將元素水平居中赐劣。

.element {
  margin: 0 auto; /* 水平居中 */
}

3. flexbox

使用flexbox 布局也可以實現(xiàn)元素水平居中定页。將父元素的 display 屬性設(shè)置為flex迅耘,再將 justify-content屬性設(shè)置為 center奸晴,就可以將子元素水平居中

.parent {
  display: flex;
  justify-content: center; /* 水平居中 */
}

4. grid

使用grid 布局也可以實現(xiàn)元素水平居中冤馏。將父元素的display 屬性設(shè)置為grid,再將 justify-content 屬性設(shè)置為 center蚁滋,就可以將子元素水平居中

.parent {
  display: grid;
  justify-content: center; /* 水平居中 */
}


中心位置

1. 使用padding和text-align

如果要水平和垂直都居中宿接,可以使用 paddingtext-align: center:

. parent {
    padding: 70px 0; /* 垂直居中 */
    border: 3px solid green;
    text-align: center; /* 水平居中 */
}

2. flexbox

將父元素的 display 屬性設(shè)置為flex,再將 justify-contentalign-items 屬性都設(shè)置為 center辕录,即可將子元素水平和垂直居中睦霎。

.parent {
  display: flex;
  justify-content: center;  /* 水平居中 */
  align-items: center;  /* 在垂直方向上居中 */
}

或者:

.parent {
  display: flex;
  place-items: center;
}

place-items是同時設(shè)置align-itemsjustify-items的快捷方式,
通過設(shè)置 center , 其實是設(shè)置align-items:center; justify-items:center

3. 使用絕對定位和 transform 屬性

將元素的 position 屬性設(shè)置為 absolute,再將 topleft 屬性設(shè)置為 50%走诞,再使用transform 屬性的 translate() 方法將元素向上和向左移動自身寬度和高度的一半即可實現(xiàn)垂直和水平居中副女。

.element {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

4. 使用 text-align 和 line-height

將父元素的 text-align 屬性設(shè)置為 center,然后將父元素的 line-height 屬性設(shè)置為和其高度相同的值蚣旱,即可將內(nèi)部文本或行內(nèi)元素水平和垂直居中

.parent {
  text-align: center;
  line-height: 100px; /* 與元素高度相同的值 */
}

5. transform 和 flexbox

將父元素的 display 屬性設(shè)置為 flex碑幅,再將 justify-contentalign-items 屬性都設(shè)置為 center,然后使用transform 屬性的translate()方法將子元素向上和向左移動自身寬度和高度的一半即可實現(xiàn)垂直和水平居中

.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}

.child {
  transform: translate(-50%, -50%);
}

5. table 和 table-cell

將父元素的display 屬性設(shè)置為 table塞绿,再將子元素的 display 屬性設(shè)置為table-cell沟涨,然后將子元素的 vertical-align 屬性和 text-align 屬性都設(shè)置為 middle,即可將子元素水平和垂直居中异吻。

.parent {
  display: table;
}

.child {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

6. grid

將父元素的 display 屬性設(shè)置為 grid裹赴,再將 justify-itemsalign-items屬性都設(shè)置為 center喜庞,即可將子元素水平和垂直居中。

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

更多布局可以查看: 常見布局實現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棋返,一起剝皮案震驚了整個濱河市延都,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睛竣,老刑警劉巖晰房,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異射沟,居然都是意外死亡殊者,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門躏惋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幽污,“玉大人嚷辅,你說我怎么就攤上這事簿姨。” “怎么了簸搞?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵扁位,是天一觀的道長。 經(jīng)常有香客問我趁俊,道長域仇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任寺擂,我火速辦了婚禮暇务,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怔软。我一直安慰自己垦细,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布挡逼。 她就那樣靜靜地躺著括改,像睡著了一般。 火紅的嫁衣襯著肌膚如雪家坎。 梳的紋絲不亂的頭發(fā)上嘱能,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音虱疏,去河邊找鬼惹骂。 笑死,一個胖子當(dāng)著我的面吹牛做瞪,可吹牛的內(nèi)容都是我干的对粪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衩侥!你這毒婦竟也來了国旷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤茫死,失蹤者是張志新(化名)和其女友劉穎跪但,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峦萎,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡屡久,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了爱榔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片被环。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖详幽,靈堂內(nèi)的尸體忽然破棺而出筛欢,到底是詐尸還是另有隱情,我是刑警寧澤唇聘,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布版姑,位于F島的核電站,受9級特大地震影響迟郎,放射性物質(zhì)發(fā)生泄漏剥险。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一宪肖、第九天 我趴在偏房一處隱蔽的房頂上張望表制。 院中可真熱鬧,春花似錦控乾、人聲如沸么介。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夭拌。三九已至,卻和暖如春衷咽,著一層夾襖步出監(jiān)牢的瞬間鸽扁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工镶骗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桶现,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓鼎姊,卻偏偏與公主長得像骡和,于是被迫代替她去往敵國和親相赁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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