CSS之各種居中

jopen 8年前發布 | 9K 次閱讀 CSS 前端技術

本博客討論居中情況設定為 總寬度不定,內容寬度不定 的情況。(改變大小時,仍然居中)。

特別說明:在元素設置 position:absolute; 來設置居中效果時,除去博客下介紹的css3方法外,還可以使用負的 margin 來居中,這樣解決了兼容性的問題,但是只適用于寬高已知的情況(因為負的偏移量為元素寬高的一半)。寬高改變時,不再是居中效果。

在這些布局中的子元素,因為其屬性設置,都默認為內容寬度。

本博客所有居中的例子,只討論css的實現,html代碼統一如下:

<div class="parent">
    <div class="child">demo</div>
</div>

1. 水平居中

1.1 inline-block 配合 text-align

.parent{
    text-align: center;
}
.child{
    display: inline-block;
}

優點:兼容性非常好,只需要添加只需要在子元素的css中添加 *display:inline 和 *zoom:1 就可兼容到IE6、7;缺點:內部文字也會水平居中,需消除影響。

1.2 table 配合 margin

.child{
    display:table;
    margin: 0 auto;
}

優點:設置特別簡單,只需對子元素進行設置,支持IE8+,需支持IE6,7時,可更換子元素為表格結構。

1.3 abasolute 配合 transform

.parent{
    position:relative;
}
.child{
    position:absolute;
    left:50%;
    transform: translateX(-50%);
}

優點:居中元素不對其他元素產生影響。缺點:CSS3新屬性支持IE9+,低版本瀏覽器不支持。

2. 垂直居中

2.1 table-cell 配合 vertical-align

.parent{
    display: table-cell;
    vertical-align:middle;
}

優點:設置簡單,只需對父元素進行設置,兼容到IE8+,需兼容地版本瀏覽器時,可更換 div 為表格結構。

2.2 absolute 配合 tranform

.parent{
    position:relative;
}
.child{
    position:absolute;
    top: 50%;
    transform: translateY(-50%);
}

優點:居中元素不對其他元素產生影響。缺點:CSS3新屬性支持IE9+,低版本瀏覽器不支持。

3. 水平+垂直居中

3.1 inline-block 配合 text-align 加上 table-cell 配合 vertical-align

.parent{
    display: table-cell;
    vertical-align:middle;
    text-align:center;
}
.child{
    display: inline-block;
}

優點:綜合前兩中方法,兼容性好!支持IE8+,低版本瀏覽器也好兼容。缺點:設置較為復雜。

3.2 absolute 配合 transform

.parent{
    position: relative;
}
.child{
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
}

優點:居中元素不對其他元素產生影響。缺點:CSS3新屬性支持IE9+,低版本瀏覽器不支持。

4. 全能的 flex

css3新增布局屬性,布局簡單,強大,性能略差,只支持IE10+,在移動端使用較多。

4.1 水平居中

/*當父元素設置display: flex;時,子元素為flex-item,默認為內容寬度。*/
.parent{
    display: flex;
    justify-content: center;
}
/* 在設置子元素為margin: 0 auto;時,可刪除父元素的justify-content: center;同樣可以達到居中效果*/
/*  .child{
        margin: 0 auto; 
    }*/

4.2 垂直居中

.parent{
    display: flex;
    align-items: center;
}

4.3 水平垂直居中

.parent{
    display: flex;
    justify-content: center;
    align-items: center;
}
/*如同flex布局的第一部分一樣這里也可以對子元素進行下面的設置:同時刪除上面的除去display外的其他屬性*/
/*  .child{
        margin:auto;
    } */

來自: http://guowenfh.github.io/2016/01/06/css-position-middle/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!