一直有個想法要把各類居中的方法總結一下,但仍是一直沒有時間去整理。最近恰好在作樣式重構的項目,順便把一下本身有用過的或積累的居中方法給總結一下。
/* 行內元素 */ .parent4 { text-align: center; }
margin autocss
這是最經常使用到的塊級水平居中,利用margin:auto自動達到居中的效果,不過前提是子元素必須知道寬度css3
/* 必須設置子元素寬度 */ .child1 { width: 100px; height: 100px; margin: 0 auto; background: aqua; }
利用inline-block實現水平居中web
.parent2 { text-align: center; } /* 必須經過父元素 */ .child2 { display: inline-block; /*width: 100px; height: 100px;*/ background: aqua; }
不少狀況下咱們並不清楚一個元素的具體尺寸是多少,可是又要實現水平居中。這個時候咱們想起float,自動撐開寬高,可是惋惜的是float的脫離了文檔流並不能用margin:auto去實現元素的水平居中。inline-block又必須有個父級對其進行設置居中。css3新增長了width裏的屬性實現了元素相似於float,inline-block的包裹效果,而且可使用margin: auto進行居中。fit-content會根據你的內容去包裹你的元素。在此處不細說明,該興趣的小夥伴能夠看看張鑫旭老師對這幾個新增的屬性的講解wordpress
/* width的其餘屬性 */ .parent3 { width: fit-content; margin: 10px auto; background: aquamarine; }
/* 行內元素,當行文字垂直居中 */ .parent1 { height: 100px; line-height: 100px; background: wheat; }
margin負邊距實現性能
該方法使用絕對定位利用margin負值將其居中,前提是須要 提早知道尺寸flex
.parent2 { position: relative; background: rosybrown; height: 100px; } .child2 { background: blue; position: absolute; width: 80px; height: 40px; left: 50%; top: 50%; margin-top: -20px; margin-left: -40px; }
如何在不知道尺寸的狀況下垂直居中呢,CSS3——translate屬性的出現爲咱們提供了可能。該方法利用translate以自身的寬高爲基準來達到居中效果,至關於margin負值的做用,不過咱們不須要知道尺寸,translate幫咱們解決了。transform中translate偏移的百分比值是相對於自身大小的,code
/* 塊級元素: 絕對定位 + transform 優勢: 不須要提早知道尺寸 缺點: 兼容性很差*/ .parent3 { position: relative; background: antiquewhite; height: 200px; } .child3 { background: salmon; position: absolute; width: 80px; height: 40px; left: 50%; top: 50%; transform: translate(-50%,-50%); }
結合以上兩種,在介紹一個利用絕對定位的一個很好用的方法
這是從張鑫旭老師的博客搬運過來的詳情戳這裏。orm
優勢:不須要根據寬高去作相應的位移,自動幫你居中好了,兼容性好文檔
/* 塊級元素:絕對定位 + margin: auto; 優勢:不須要根據寬高去作相應的位移,兼容性好 */ .parent4 { position: relative; background: wheat; height: 200px; } .child4 { width: 80px; height: 40px; position: absolute; left: 0; top: 0; right: 0; bottom: 0; margin: auto; background: blue; }
display的table和table-cell通常狀況下用的很少,因此不多有人去關注它。這個實現的原理就是把其變成表格樣式,再利用表格的樣式來進行居中,在某些狀況下仍是很方便的。get
/* 塊級元素:display: table-cell */ .parent5 { width: 600px; height: 200px; border: 1px solid red; display: table; } .child5 { display: table-cell; text-align: center; vertical-align: middle; } /* 水平垂直居中 */ .parent7 { width: 400px; height: 300px; display: table-cell; vertical-align: middle; border: 1px solid red; } .child7 { display: inline-block; vertical-align: middle; background: blue; }
缺點: 兼容性差,須要計算,消耗性能,須要提早知道尺寸
.parent8 { width: 300px; height: 300px; border: 1px solid red; position: relative; } .child8 { top:-webkit-calc(50%-50px); top:-moz-calc(50%-50px); top:calc(50%-50px); left:-webkit-calc(50%-50px); left:-moz-calc(50%-50px); left:calc(50%-50px); width: 100px; height: 100px; background: blue; }
.parent9 { width: 300px; height: 300px; border: 1px solid red; text-align: center; } .child9 { background: blue; width: 100px; height: 40px; display: inline-block; vertical-align: middle; } .parent9::before { content: ''; height: 100%; display: inline-block; vertical-align: middle; }
缺點:在pc上兼容性很差
.parent10 { width: 600px; height: 200px; border: 1px solid red; display: flex; align-items: center; /*垂直居中*/ justify-content: center; /*水平居中*/ } .child10 { background: blue; }
以上是分別總結了水平居中和垂直居中經常使用的方法,要想實現水平垂直居中能夠本身組合搭配一下。方法目前總結了這幾種,以後有新的方法也會持續更新,未完待續連載中....