這是比較經常使用的方法。經過line-hight來設置行間距是實現垂直居中的關鍵web
.wrap{ width: 500px; heidth: 200px; line-height:200px; background: #80ff80; text-align:center; fontsize: 20px }
經過background-clip設置爲center-box,將背景裁剪到內容區外沿,再利用padding設爲外div減去內div的差的一一半來實現瀏覽器
.parent{ margin: 0 auto; width: 250px; heidth: 250px; background: #80ff80; } .child img { width: 150px; heidth: 150px; padding 50px; background-clip: center-box; }
其百分比計算不是以父元素爲基準,而是以本身爲基準,適用於沒固定大小的內容,min-width、max-width、overflow:scroll等。使用這個屬性時,沒必要定義子容器的高度,其會根據內容來自適應高度。可是IE8如下的瀏覽器不支持,並且屬性須要寫瀏覽器廠商的名字,還有可能會干擾其餘transform的效果。佈局
.parent{ width:300px; height: 300px; margin: 0 auto; background: #89ff89; position: relative; } .child{ position: absolute; left: 50%; top: 50%; -webkit-transform:translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); text-align: center }
這是一個兼容性比較好的可以實現垂直居中的方法。
能夠經過設置內容元素:position: fixed
,z-index: 999
成爲視口居中,
更改百分比寬高、最大最小寬度使其可以實現響應,
只要 margin:auto
,內容塊將垂直居中,使用top、left、button、right能夠設置偏移
居中內容比父容器高時,加overflow:auto
可防止內容溢出
可是惟一的肯定就是父容器的高度必須是可知的。flex
.parent{ width:400px; min-height: 400px; margin: 0 auto; background: #89ff89; position: relative; } .child{ width:100%; height:80%; overflow:auto; margin:auto; position: absolute; left: 0; top: 0; bottom: 0; right: 0; text-align: center }
這是比較流行的一種方法,當塊元素尺寸已知,外邊距margin取負數,大小爲 (width/heigth + pdding)/2,加上top和left各爲50%,這個方法兼容IE6以上的IE瀏覽器,代碼量也比較少。可是不能自適應,不支持百分比尺寸和 min-/max- 屬性設置,內容可能會溢出容器,須要計算margin的取值flexbox
.child{ width:200px; height:300px; padding:20px; position: absolute; left: 50%; top: 50%; margin-left: -120px; margin-top: -170px; text-align: center }
其內容塊高度能夠隨着實際內容的高度而變化,內容溢出時父元素會本身撐開,在瀏覽器中的兼容性也比較好,可是須要三層元素才能使最內層的元素居中 spa
.wrap .is-table { display: table; } .is-table .table-cell{ display:table-cell; vertical-align: middle; max-width:500px; min-height: 400px; background: #0ff80 } .table-cell .box{ width: 80%; margin: 0 auto; text-align: center;000008 }
使用flexbox實現垂直居中很方便並且代碼簡潔, align-items 使元素水平居中, justify-content 是元素垂直居中
可是其兼容性不是很好,對於IE只能兼容10以上,可是隨着IE一些比較低的版本逐漸退出市場,flexbox的佈局也將成爲趨勢code
.parent{ display: flex; align-items: center; justify-content:center; width:400px; background: #89ff89; } .child{ text-align: center; padding: 10px; }