在網頁上使 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...