使用CSS完成元素居中的七種方法

2021-08-07 21:38:56 字數 2446 閱讀 7834

在網頁上使 html 元素居中看似一件很簡單的事情. 至少在某些情況下是這樣的,但是複雜的布局往往使一些解決方案不能很好的發揮作用。

在網頁布局中元素水平居中比元素垂直居中要簡單不少,同時實現水平居中和垂直居中往往是最難的。現在是響應式設計的時代,我們很難確切的知道元素的準確高度和寬度,所以一些方案不大適用。據我所知, 在css中至少有六種實現居中的方法。我將使用下面的html結構從簡單到複雜開始講解:

鞋子會改變,但是他們都會保持500pxx500px的大小。 hsl colors 用於使背景顏色保持一致。

使用text-align水平居中

有時顯而易見的方案是最佳的選擇:

div.center 

div.center img

這種方案沒有使垂直居中:你需要給新增 padding 或者給內容新增

margin-top

margin-bottom使容器與內容之間有一定的距離。

使用 margin: auto 居中

這種方式實現水平居中和上面使用text-align的方法有相同侷限性。

div.center 

div.center img

注意: 必須使用display: block使margin: 0 auto對img元素生效。

使用table-cell居中

使用display: table-cell, 而不是使用table標籤; 可以實現水平居中和垂直居中,但是這種方法需要新增額外的元素作為外部容器。

css

.center-aligned 

.center-core

.center-core img

注意:為了使div 不摺疊必須加上width: 100%,外部容器元素也需要加上一定高度使得內容垂直居中。給html和body設定高度後,也可以使元素在body垂直居中。此方法在ie8+瀏覽器上生效。

使用absolute定位居中

這種 方案 有非常好的跨瀏覽器支援。有乙個缺點就是必須顯式宣告外部容器元素的height:

.absolute-aligned 

.absolute-aligned img

stephen在他的 部落格 中演示了這種方案的幾種變化。

使用translate居中

chris coiyer 提出了乙個使用 css transforms 的新方案。 同樣支援水平居中和垂直居中:

.center 

.center img

但是有以下幾種缺點:

使用flexbox居中

當新舊語法差異和瀏覽器字首消失時,這種方法會成為主流的居中方案。

.center 

.center img

在很多方面 flexbox 是一種簡單的方案, 但是它有新舊兩種語法以及早期版本的ie缺乏支援 (儘管可以使用display: table-cell作為降級方案)。

現在規範已經最終確定,現代瀏覽器也大都支援,我寫了一篇詳細的教程。

使用calc居中

在某些情況下比flexbox更全面:

.center 

.center img

很簡單,calc 允許你基於當前的頁面布局計算尺寸。在上面的簡單計算中, 50% 是容器元素的中心點,但是如果只設定50%會使的左上角對齊div的中心位置。 我們需要把向左和向上各移動寬高的一半。計算公式為:

top

:calc(50

%-(40

%/ 2));

left: calc(50% - (40% /

2));

在現在的瀏覽其中你會發現,這種方法更適用於當內容的寬高為固定尺寸:

.center img
我在 這篇文章 中詳細講解了calc。

這種方案和flex一樣有許多相同的缺點: 雖然在現代瀏覽器中有良好的支援,但是在較早的版本中仍然需要瀏覽器字首,並且不支援ie8。

.center img
當然還有 其他更多的方案。理解這七種方案之後,web開發人員在面對元素居中的時候會有更多的選擇。

譯者:王瘦子

譯文:原文:

使用CSS完成元素居中的七種方法

在網頁上使 html 元素居中看似一件很簡單的事情.至少在某些情況下是這樣的,但是複雜的布局往往使一些解決方案不能很好的發揮作用。在網頁布局中元素水平居中比元素垂直居中要簡單不少,同時實現水平居中和垂直居中往往是最難的。現在是響應式設計的時代,我們很難確切的知道元素的準確高度和寬度,所以一些方案不大...

使用CSS完成元素居中的七種方法

在網頁上使html元素居中看似一件很簡單的事情,至少在某些情況下是這樣的,但是複雜的布局往往使一些解決方案不能很好的發揮作用。在網頁布局中元素水平居中比元素垂直居中要簡單不少,同時實現水平居中和垂直居中往往是最難的。現在是響應式設計的時代,我們很難確切的知道元素的準確高度和寬度,所以一些方案不大適用...

盒子垂直水平居中的七種方法

lang en charset utf 8 name viewport content width device width,initial scale 1.0 documenttitle parent child 居中關鍵 必須知道內外盒子的大小 center style head class p...