HTML:css
<body> <div class="maxbox"> <div class="minbox align-center"></div> </div></body>
父元素web
.maxbox{ position: relative; width: 500px; height: 500px; margin: 5px; box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8), -1px -1px 1px rgba(0, 0, 0, 0.8);}
子元素:佈局
.minbox{ width: 200px; height: 200px; box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8), -1px -1px 1px rgba(0, 0, 0, 0.8);}
效果圖(下面幾種方法效果圖同樣):
flex
第一種: CSS絕對定位
主要利用絕對定位,再用margin設置爲auto
水平垂直居中對齊:spa
.align-center{ position: absolute; top: 0; left: 0; bottom: 0; right: 0; margin: auto;}
第二種: CSS絕對定位
主要利用絕對定位,再用margin調整到中間位置。code
水平垂直居中對齊:orm
.align-center{ position: absolute; left: 50%; top: 50%; margin-left: -100px; /*width/-2*/ margin-top: -100px; /*height/-2*/}
第三種: CSS絕對定位 + Javascript/JQuery
主要利用絕對定位,再用Javascript/JQuery調整到中間位置。相比第一種方法,此方法提升了class的靈活性。圖片
水平垂直居中對齊:ip
.align-center{ position: absolute; left: 50%; top: 50%;}
JQuery:it
$(function(){ $(".align-center").css( { "margin-left": ($(".align-center").width()/-2), "margin-top": ($(".align-center").height()/-2) } );});
第四種: CSS3絕對定位 + 位移
使用絕對定位與CSS3的 transform: translate一樣也能夠達到效果。
水平垂直居中對齊:
.align-center{ position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); transform: translate(-50%, -50%); /*向左向上位移*/}
第五種: Flexbox: [伸縮佈局盒模型]
要讓元素水平垂直,對於Flexbox模型來講太容易了。
這裏得改變一下HTML:
<div class="maxbox align-center"> <div class="minbox"></div></div>
水平垂直居中對齊:
.align-center{ display: flex; display: -webkit-flex; /*兼容問題*/ justify-content: center; align-items: center; }
幾種方法的比較:
第一種:使用CSS絕對定位margin設置爲auto,兼容性很好,應該是一種最好的方法了。
第二種:使用CSS絕對定位margin調整,兼容性很好可是欠缺靈活性。若是有不少box裏須要水平垂直居中,因其width,height不一樣而須要寫不一樣的 .align-center 。
第三種:使用腳本語言,兼容性很好且彌補了第一種的缺點。不因width,height的改變而影響水平垂直居中的效果。
第四種:使用CSS3的一些新的屬性,兼容IE10, Chrome, Firefox, 和 Opera。兼容性不太很好,不因width,height的改變而影響水平垂直居中的效果。
第五種:使用Flexbox模型,兼容Firefox、Opera 和 Chrome,IE全軍覆沒。也是不因width,height的改變而影響水平垂直居中的效果。