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

2021-08-08 19:28:19 字數 2457 閱讀 8621

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

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

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

使用text-align水平居中

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

div.center

div.center

img這種方案沒有使垂直居中:你需要給div新增padding或者給內容新增margin-topmargin-bottom使容器與內容之間有一定的距離。

使用margin: auto居中

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

div

.center

div.center

img

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

使用table-cell居中

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

class="center-aligned">

class="center-core">

div>

div>

css:

.center-aligned

.center-core

.center-core

img

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

使用absolute定位居中

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

.absolute-aligned

.absolute-aligned

img

使用translate居中使用css translate同樣支援水平居中和垂直居中:

.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: clac(50% - (40%/

2));

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

.center

img

這種方案和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...