居中布局


點擊查看居中演示示例居中演示
CSS中有一個很重要的概念-布局,而最常見的布局之一則是居中布局。那么,我們如何實現自適應寬高元素的居中布局呢?這里要談到兩個概念,內聯(inline)元素塊級(block-level)元素。html中一切元素要么是inline元素,要么是block-level元素。針對inline與block-level元素,CSS又有不同的布局方法。
例如對于inline元素,text-align:center;可以實現水平居中。vertical-align:middle;則實現垂直居中。對于block-level元素,我們可以使用margin: 0 auto;實現水平居中。當然實現居中還有其他方法,比如設置position:absolute;
我們的問題是實現自適應寬高元素水平垂直居中?我們可以將問題分解為三步:1、設置元素自適應寬高 2、實現水平居中 3、實現垂直居中。
如何設置元素自適應寬高?一般元素高度都是自適應的,那么,有哪些設置能夠使得元素自適應寬度,并且與居中布局相關?display: inline-block; position: absoute; display: flex; display: table; display: table-cell;.....上述這些設置都能使元素既有塊級元素的特性,又自適應寬度。
在此基礎上,如何實現元素水平居中?可以使用對塊級元素居中的方式,也可以賦給元素內聯特性,采用內聯居中的方式。我們可以有以下搭配組合1、inline-block+text-align; 2、position+transform; 3、flex+justify-content; 4、table+margin;
1、給父元素設置,text-align:center; 設置子元素display為inline-block;
2、設置子元素position為absolute;并設置left: 50%; 使該元素左上角居中,然后使用transform: translateX( -50%)將其相對父元素水平居中。
3、設置父元素display:flex;父元素子元素默認為flex-item,flex-item內容自適應寬高,然后在父元素上設置,justify-content: center;使得子元素居中。
4、設置子元素display:table;父元素寬高自適應并且具有塊級元素特性,然后使用margin: 0 auto;使其居中。
實現元素垂直居中的方法與水平居中類似,有如下搭配組合:
1、父元素:display: table-cell; vertical-align: middle;(vertical-align對inline,inline-block,table-cell元素有效)
2、absolute+transform
3、父元素:display: flex; align-items: center;
綜合上述,將設置自適應寬高元素居中的方法可以有如下組合:
1、父元素:text-align: center; display: table-cell; vertical-align: middle; 子元素:display: inline-block;
優點:兼容性好
不足:子元素繼承居中屬性,需額外代碼修復
2、父元素: position: relative; 子元素:position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
優點:absolute脫離文檔流,不影響其他元素
不足:不兼容ie6/7/8
3、父元素:display: flex; justify-content: center; align-items: center;
優點:只需設置父元素
不足:不兼容ie6/7/8
以上居中方法并將ie6/7/8的兼容性放在考慮之列。
參考:網易前端微專業網頁架構課程。

原文:http://www.huangruixuan.com/2016/03/29/%E5%B1%85%E4%B8%AD%E5%B8%83%E5%B1%80/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,809評論 1 92
  • 移動開發基本知識點 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,518評論 0 6
  • H5移動端知識點總結 閱讀目錄 移動開發基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,628評論 0 26
  • 1、水平居中(寬度未知) 例:有兩個div,大的div包裹著小的div,如何使小的div水平居中在大的div中? ...
    YM雨蒙閱讀 304評論 7 4
  • 我以為和人在囧途,泰囧,心花怒放一樣,可是看了才知道,不一樣。 從一開始律師就不應該幫偷獵者打贏那場官司,最終的結...
    noone2閱讀 229評論 0 1