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


一、前言

居中效果在CSS中很是普通的效果,平時大家所看到的居中效果主要分為三大類:水平居中、垂直居中和水平垂直居中。而其中水平居中相對於后兩者來說要簡單得多。使用了css3的flexbox的屬性輕松實現多行文本水平垂直居中的方法。當然大家有可能認為這些方法對於瀏覽嘎嘎的兼容性處理太麻煩了。

 

二、六種方法

常見的居中是固定寬度,加上margin: 0 auto。但是如果寬度不明確,我們也要嘗試一下。

我們來實現一個分頁容器

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; }

展示:

 

1、方法一:margin和width實現

這個是最常見的方案:在容器上定義一個固定的寬度,然后配合margin左右的值為auto。

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; }

展示

效果實現了,擴展性不強,因為寬度無法確定,也就無法確定容器寬度。

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

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

 

2、方法二: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的瀏覽器兼容性問題

 

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

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

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浮動居中的效果。

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

缺點:實現原理比較復雜

 

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

絕對定位實現水平居中,我想大家也非常的熟悉了,並且用得一定不少。

.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; }

展示:

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

缺點:理解性難。

 

5、方法五: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; }

展示:

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

缺點:兼容性差

 

6、方法六: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; }

展示:

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

缺點:瀏覽器兼容性差

 

三、參考

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM