前言
對於使用CSS屬性使得元素水平垂直居中問題,基本是在前端面試問題中必問的一個問題。由於這個問題的回答要分好幾種情況,我也會寫幾篇文章分別講述。
今天這篇文章我們首先看看,只有一個元素的時候採用絕對定位如何實現水平垂直居中的。
我已經將代碼放到github上,感興趣的同學可以去看看。
https://github.com/zhouxiongking/article-pages/blob/master/articles/position-center/position-absolute-center.html
場景
我們假定頁面只有一個div元素,目的是通過CSS屬性控制該div元素的水平垂直居中。
因為這篇文章講述的是絕對定位方法,因此要將div的position設置為absolute。為了讓div的水平垂直居中看起來更形象,我們添加border屬性。
接下來我們看看兩種實現方法吧。
方法1
在方法1中,我們首先需要使用margin: auto;在普通內容流中,margin: auto;相當於margin-top:0;margin-bottom:0。
其次因為div已經被設置為absolute,脫離文檔流,因此可以方便設置left,top,right,bottom四個值。
將left,top,right,bottom四個之都設置為0,瀏覽器會重新分配一個邊界框,這樣整個元素就會填充body所有可用空間。
為了讓元素能呈現水平垂直居中的狀態,必須給div元素設置高度和寬度,添加height和width屬性。
通過以上描述,我們可以得到以下的CSS屬性。
通過在頁面上測試,我們可以得到以下的效果。而且不管瀏覽器窗口大小怎麼變化,這個div元素始終是水平垂直居中的狀態。
方法2
方法2更好理解一些,首先給div設定高度和寬度。
由於position設置為absolute;給div設定left和top屬性都為50%
最後將div的margin-left和margin-top設置為寬度和高度的一半。
通過以上描述,得到以下的CSS代碼。
通過在頁面上測試,我們可以得到以下效果圖。而且不管瀏覽器窗口大小怎麼變化,這個div元素始終是水平垂直居中的狀態。
方法優點
上述兩種方法的CSS屬性都未曾使用CSS3特性,因此不用擔心兼容性問題。
兩種方法均只需要這一個類,就可實現在任何內容塊的水平垂直居中。
是否設置padding值對居中效果沒有影響
方法缺點
元素必須設置高度和寬度,不設置的話將不會有任何效果。
由於必須設置高度,相當於定高,因此為了防止內容邊界溢出,一般需要設置overflow屬性。
方法的優點很明顯,效果也很容易達到;但是方法缺點也是很明顯的,因為有很多元素都未必是定高和定寬的。總的來說還是應該看看實際應用場景。
結束語
今天這篇文章只是講解了,使用絕對定位讓元素水平垂直居中。後面會繼續講解其他元素水平垂直居中的情況,敬請期待吧。