垂直水平居中即垂直與水平方向上都要居中,也就是視覺效果中的,處於視圖的正中間。下面,咱們來說講幾個css中經常使用的垂直水平居中的解決方案css
一、把外層的div的顯示方式設置爲table
,即display: table;
html
二、把內層的div的顯示方式設置爲table-ceil
,即display: table-ceil;
瀏覽器
這樣一來,咱們就能夠把這格html結構當作表格和表格中的一個小格。因爲表格中只有一個ceil,因此它會自動撐開整個表格,給它設置寬高是無效的,它的寬高是wrapper的寬高。ceil中的內容content就能夠自動垂直居中了。app
其中:佈局
vertical-align: middle;
text-align: center;
具體代碼以下:flex
<div class="wrapper"> <div class="ceil"> <div class="content">Hello world!</div> </div> </div>
css代碼:spa
.wrapper { display: table; width: 400px; height: 200px; background-color: red; } .ceil { display: table-cell; vertical-align: middle; background-color: blue; text-align: center; }
效果以下:
.net
接着咱們把content中的內容加長看看效果:
code
從上面能夠看到,wrapper原本應該是紅色背景的,可是如今整個ceil撐開了整個表格,因此把wrapper的背景覆蓋了,呈現出藍色。orm
優勢:
缺點:
絕對定位法。
一、咱們把須要垂直水平居中的position設置爲absolute。
二、設置top爲0, left爲0,margin爲寬高一半的負值。即把盒先一種偏中間的地方,而後再進行微調:
<div class="container"> <div class="content">Hello World!</div> </div>
.container{ position: relative; width: 400px; height: 300px; background-color: red; } .content{ position: absolute; width: 100px; height: 100px; background-color: blue; top: 50%; left: 50%; margin-top: -50px; // 高的一半,視實際狀況而定 margin-left: -50px; // 寬的一半,視實際狀況而定 }
注意:絕對定位absolute
,是相對於最近非static
的祖先元素進行定位的,因此咱們要在其相對定位的元素上定義display
屬性。
一樣當文字溢出的時候:
優勢:
缺點:
content
會溢出,這時咱們能夠設置:overflow:auto;
這時當溢出的時候就會出現滾動條。在方法2的基礎上進行改動,把margin負值改成transform
和 translate
.container{ position: relative; width: 400px; height: 300px; background-color: red; } .content{ position: absolute; background-color: blue; top: 50%; left: 50%; transform: translate(-50%, -50%); }
優勢,不須要定義寬高,靈活性高缺點:仍要注意截斷問題
這個方法使用了 position:absolute,有固定寬度和高度的 div。這個 div 被設置爲 top:0; bottom:0;。可是由於它有固定高度,其實並不能和上下都間距爲 0,所以 margin:auto; 會使它居中。使用 margin:auto;使塊級元素垂直居中是很簡單的。
<div class="content"> Content here</div>
.content { position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; height: 240px; width: 70%; }
優勢:
缺點:
最經常使用的單行文本居中
這個方法只能將單行文本居中。
一、把 line-height
設置爲那個對象的 height
值使文本垂直居中
二、把 text-align
設置爲center,使文本水平居中
<div id="content">Hello world!</div>
.content { height: 100px; line-height: 100px; text-align: center; }
優勢:
缺點:
這個方法在小元素上很是有用,例如使按鈕文本或者單行文本居中。
完美居中方案 —— flex佈局
.parent{ display : flex; width : 300px; height : 300px; background-color : red; } .child{ width : 100px; height : 50px; margin : auto; background-color: green; }
關鍵點:
一、display:flex;
二、margin:auto;
參考資料:
css實現垂直居中的5種方法