前言
記得有次找工作面試的時候,一面試官問了一個CSS方面的問題:如何讓元素在瀏覽器窗口中上下左右居中。我記得當時給了個答案是,先用JS獲取瀏覽器窗口高度,然后給body設置line-height為窗口高度并設置text-align:center, 接著再設置該元素display:inline-block和vertical-align:middle。唉,現在想想自己都覺得累。
難道就一定要用到JS嗎?就不能有一種只用CSS方法就能實現元素居中的方法嗎?答案是,有!而且方法遠不止一種!
一、line-height居中法
父元素:
text-align: center; line-height:600px; font-size: 0;子元素:
display: inline-block; vertical-align: middle;注:600px必須為父元素的高度,這里還需注意的一點是font-size需設為零,若未寫該屬性將導致元素并不能精確垂直居中。該方法即為我面試時所答的方法,缺點很明顯,父元素高度須確定。(兼容IE8+)
二、table-cell居中法
父元素:
display: table-cell; text-align: center; vertical-align: middle;子元素:
display: inline-block;注:兼容IE8+
三、上下左右定位+margin居中法
父元素:
position: relative;子元素:
position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto;注:兼容IE8+
四、50%定位+margin居中法
父元素:
position: relative;子元素:
position: absolute; left: 50%; top: 50%; margin: -200px 0 0 -200px;注:200px須為該子元素的寬高的一半。例如該子元素寬為100px,高為50px,那么margin取值為-25px 0 0 -50px。該方法缺點是須確定子元素寬高。(兼容IE8+)
五、50%定位+translate居中法
父元素:
position: relative;子元素:
position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%);注:該方法使用了CSS3 transform屬性,適合用于移動端。(兼容IE9+)
六、Flexbox居中法
父元素:
display: flex; justify-content: center; align-items: center;注:該方法使用了Flexbox彈性布局,移動端兼容性也存在很大問題。(兼容IE10+)
七、Flexbox+margin居中法
新聞熱點
疑難解答