在網頁上使html元素居中看似一件很簡單的事情,至少在某些情況下是這樣的,但是複雜的布局往往使一些解決方案不能很好的發揮作用。
在網頁布局中元素水平居中比元素垂直居中要簡單不少,同時實現水平居中和垂直居中往往是最難的。現在是響應式設計的時代,我們很難確切的知道元素的準確高度和寬度,所以一些方案不大適用。據我所知,在css中至少有6種實現居中的方法。我將使用下面的html結構從簡單到複雜開始講解:
div>鞋子會改變,但是它們都會保持 500px x 500px 的大小。hsl colors用於使背景顏色保持一致。
使用text-align水平居中
有時顯而易見的方案是最佳的選擇:
div.center
div.center
img這種方案沒有使垂直居中:你需要給div
新增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
標籤;可以實現水平居中和垂直居中,但是這種方法需要新增額外的元素作為外部容器。
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...