元素的垂直居中也是咱們平常網頁佈局中常常會遇到的問題,因此我在此提供一些解決方法,但願能夠給予有須要的人一些借鑑和參考.css
html代碼:html
<div class="parent"> <div class="child">Text here</div> </div>
既然設置子元素的垂直居中,那就要知道父元素的高度,才能知道這所謂的中在哪,對吧?就像你想在一段距離的中間位置站住,那你首先須要知道這段距離有多長,你才能知道中間位置在哪.
注意,我全部的百分比高寬,都是創建在html,body {width: 100%;height: 100%;}
這樣的設置的基礎之上的,若是你沒有這樣設置,.parent這個div的父元素又是body,body你又沒有設置寬高,你就可能看不到效果,.parent這個div的高寬比是相對於它的父元素的,因此你在使用的時候須要肯定.parent這個div的父元素設置了寬度和高度的.佈局
(1) 行內文本垂直居中測試
css代碼:flex
.parent { height: 100px; border: 1px solid #ccc; /*設置border是爲了方便查看效果*/ } .child { line-height: 100px; }
(2) 行內非文本垂直居中(以img爲例)code
html代碼:orm
<div class="parent"> <img src="image.png" alt="" /> </div>
css代碼htm
.parent { height: 100px; border: 1px solid #ccc; /*設置border是爲了方便查看效果*/ } .parent img { //注意此時應該保證圖片自身的高度或者你設置的高度小於父元素的200px的行高,否則你看不出來居中的效果. line-height: 100px; }
(3) 未知高度的塊級元素垂直居中
html代碼:圖片
<div class="parent"> <div class="child"> <!--.child的高度未知,父元素要有高度--> sddvsds dfvsdvds </div> </div>
第一種方法(不須要加padding):
css代碼:it
.parent { width: 100%; height: 100%; position: relative; /*display: table;*/ } .child { width: 500px; border: 1px solid #ccc; /*設置border是爲了方便查看效果*/ position: absolute; top: 50%; transform: translateY(-50%); }
第二種方法(不使用transform):
css代碼:
.parent { position: relative; width: 100%; height: 100%; } .child { width: 500px; border: 1px solid #ccc; position: absolute; top: 0; bottom: 0; left: 0; right: 0; height: 30%; margin: auto; }
第三種方法(須要加padding):
css代碼:
#parent { padding: 5% 0; } #child { padding: 10% 0; }
第四種方法:
(使用display: table,此種方法也適用於行內文本元素的居中):
css代碼:
.parent { width: 100%; height: 100%; display: table; } .child { display: table-cell; vertical-align: middle; }
第五種方法(flex佈局,這裏須要考慮兼容性奧!)
css 代碼:
.parent { width: 100%; height: 100%; /*這裏必定要寫高度奧!*/ display: flex; align-items: center; justify-content: center; }
(4) 已知高度的塊級元素垂直居中
html代碼:
<div class="parent"> <div class="child"> <!--.child的高度已知,父元素高度已知--> sddvsds dfvsdvds </div> </div>
css代碼:
#parent { height: 300px; } #child { height: 40px; margin-top: 130px; /*這個只爲父元素的高度減去這個元素的高度除以二計算獲得的*/ border: 1px solid #ccc; }
以上就是我目前發現並親自測試可行的一些方法,應該還有其餘的方法,若是大家有更好用的方法,歡迎私信或者留言給我,咱們的目的都是同樣的,幫助有須要的人,共同進步!若有錯誤,歡迎批評指正!若是以爲這篇文章對你有用,歡迎點贊和收藏奧!