【css系列】六種實現元素水平居中方法

1、前言javascript

居中效果在CSS中非常普通的效果,平時你們所看到的居中效果主要分爲三大類:水平居中、垂直居中和水平垂直居中。而其中水平居中相對於後二者來講要簡單得多。使用了css3的flexbox的屬性輕鬆實現多行文本水平垂直居中的方法。固然你們有可能認爲這些方法對於瀏覽嘎嘎的兼容性處理太麻煩了。css

 

2、六種方法html

常見的居中是固定寬度,加上margin: 0 auto。可是若是寬度不明確,咱們也要嘗試一下。java

咱們來實現一個分頁容器css3

html瀏覽器

<div class="pagination"> <ul> <li><a href="#">Prev</a></li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><a href="#">Next</a></li> </ul> </div>

css佈局

.pagination li{
    line-height: 25px; list-style: none; display: inline; float: left; } .pagination a{ text-decoration: none; display: block; color: #000; padding: 0 10px; border-radius: 2px; border: 1px solid #F2F2F2; background: #333; } .pagination a:hover{ background: orange; }

展現:flex

 

一、方法一:margin和width實現flexbox

這個是最多見的方案:在容器上定義一個固定的寬度,而後配合margin左右的值爲auto。spa

css

.pagination{
    width: 340px; margin: 0 auto;
}
.pagination li{
    line-height: 25px; list-style: none; display: inline; float: left; } .pagination a{ text-decoration: none; display: block; color: #000; padding: 0 10px; border-radius: 2px; border: 1px solid #F2F2F2; background: #333; } .pagination a:hover{ background: orange; }

展現

效果實現了,擴展性不強,由於寬度沒法肯定,也就沒法肯定容器寬度。

優勢:實現簡單,瀏覽器兼容性強

缺點:擴展性差,沒法自適應未知狀況。

 

二、方法二:inline-block和父元素text-align

僅inline-block屬性是沒法讓元素水平居中,他的關鍵之處要在元素的父容器中設置text-align的屬性爲「center」,這樣才能達到效果:

body{
    background: #000; text-align: center; } .pagination{ margin-top: 50px; display: inline-block; } .pagination li{ line-height: 25px; list-style: none; display: inline; float: left; } .pagination a{ text-decoration: none; display: block; color: #000; padding: 0 10px; border-radius: 2px; border: 1px solid #F2F2F2; background: #333; } .pagination a:hover{ background: orange; }

顯示

這個方法也是比較簡單易懂,inline-block解決了水平居中的問題,可是又有一個新的問題--空白間距,因此須要解決inline-block帶來的間距。

優勢:簡單易懂,擴展性強

缺點:須要額外處理inline-block的瀏覽器兼容性問題

 

三、方法三:浮動實現水平居中

感到很意外,元素都浮動了,他還能水平居中?你們都知道,浮動要麼靠左、要麼靠右,還真少見有居中的。其實略加處理就有了。

body{
    background: #000; } .pagination{ margin-top: 50px;  float: left; width: 100%; } .pagination ul{ position: relative; float: left; left: 50%; } .pagination li{ line-height: 25px; list-style: none; display: inline;float: left;  position: relative; right: 50%; } .pagination a{ text-decoration: none; display: block; color: #000; padding: 0 10px; border-radius: 2px; border: 1px solid #F2F2F2; background: #333; } .pagination a:hover{ background: orange; }

展現:

 

沒有浮動的div:你們都知道div是一個塊元素,其默認的寬度就是100%,如圖所示:

若是div設置了浮動以後,他的內容有多寬度就會撐開有多大的容器(除顯式設置元素寬度值以外),這也是咱們實現讓分頁導航居中的關鍵所在:

接下來使用傳統的製做方法,咱們會讓導航浮動到左邊,並且每一個分頁項也進行浮動,就以下圖所示同樣:

如今要想的辦法是讓分頁導航居中的效果了,在這裏是經過「position:relative」屬性實現,首先在列表項「ul」上向右移動50%(left:50%;),看到以下圖所示:

整個分頁向右移動了50%的距離,緊接着咱們在「li」上也定義「position:relative」屬性,但其移動的方向和列表「ul」移動的方向恰好是反方向,而其移動的值保持一致:

這樣一來就實現了float浮動居中的效果。

優勢:兼容性強,擴展性強。

缺點:實現原理比較複雜

 

四、方法四:絕對定位實現

絕對定位實現水平居中,我想你們也很是的熟悉了,而且用得必定很多。

.ele {
	position: absolute;
	width: 寬度值;
	left: 50%; margin-left: -(寬度值/2); } 

但這種實現咱們有一個難題,我並不知道元素的寬度是多少,這樣也就存在如方法一所說的難題,但咱們能夠藉助方法三作一點變通:

body{
    background: #000; margin-top: 50px; } .pagination ul{  position: absolute; left: 50%; } .pagination li{ line-height: 25px; list-style: none; display: inline; float: left; position: relative; right: 50%; } .pagination a{ text-decoration: none; display: block; color: #000; padding: 0 10px; border-radius: 2px; border: 1px solid #F2F2F2; background: #333; } .pagination a:hover{ background: orange; }

展現:

優勢:擴展性強,兼容性強;

缺點:理解性難。

 

五、方法五:css3的flex實現

能讓咱們的佈局變得更加靈活與方便,惟一的就是目前瀏覽器的兼容性較差。那麼第五種方法,咱們就使用flex來實現。

body{
    background: #000; margin-top: 50px; } .pagination{  display: flex; justify-content: center; } .pagination li{ line-height: 25px; list-style: none; display: inline; float: left; } .pagination a{ text-decoration: none; display: block; color: #000; padding: 0 10px; border-radius: 2px; border: 1px solid #F2F2F2; background: #333; } .pagination a:hover{ background: orange; }

展現:

優勢:實現簡單,擴展性強

缺點:兼容性差

 

六、方法六:css3的fit-content

「fit-content」是CSS中給「width」屬性新加的一個屬性值,他配合margin可讓我輕鬆的實現水平居中的效果:

body{
    background: #000; margin-top: 50px; } .pagination{  width: fit-content; margin: 0 auto; } .pagination li{ line-height: 25px; list-style: none; display: inline; float: left; } .pagination a{ text-decoration: none; display: block; color: #000; padding: 0 10px; border-radius: 2px; border: 1px solid #F2F2F2; background: #333; } .pagination a:hover{ background: orange; }

展現:

優勢:簡單易懂,擴展性強

缺點:瀏覽器兼容性差

 

3、參考

一、http://www.w3cplus.com/css/elements-horizontally-center-with-css.html

相關文章
相關標籤/搜索