CSS居中對齊終極指南

本文首發於個人公衆號:前端新世界
歡迎關注css

本文將討論可用於居中對齊元素的6種CSS技術(按照最佳實踐排序),以及每一種技術最適合應用的場景。這裏,居中對齊指的是將元素放置在其父元素的水平和垂直中心。前端

.center類表明要居中對齊的元素flex

.parent類表明其父元素。flexbox

1. 使用變換(Transform)

何時用:插件

  • 當元素的寬度和高度未知時;
  • 卡片式彈出框中有多個子元素,其中一個焦點元素位於中心。

這個思路是使用絕對定位——topleft 50%,而後應用負變換。topleft中使用的值根據父元素的尺寸解析,而translate方法中的值根據元素自己的尺寸解析。code

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

2. 使用Flex

何時用:orm

  • 當有一個或多個元素要居中時;
  • 當子元素是動態的而且大小未知時;
  • 當有一行項目須要像頁腳同樣居中時。

這個思路是使父容器成爲flexbox並使用flex屬性將元素沿水平和垂直方向居中,以下所示。排序

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

當有多個元素須要一個在另外一個元素上方堆疊,並使該元素堆疊在其中心時,咱們只需添加如下代碼行:教程

flex-direction: column;

3. 使用負邊距

何時用:開發

  • 當元素的高度和寬度已知時。

這個思路是再次使用相似於變換技術的絕對定位,但應用的是元素寬度和高度一半的負邊距而不是平移。

$w: 200px; /* SCSS 變量 */
$h: 100px; /* SCSS 變量 */
.center {
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -50px -100px; /* Negative margin of half the 
                          width and heigh */t

}

爲了使這段代碼更通用,咱們使用calc()屬性,以下所示:

(#{$h} / 2) - 一半高度

(#{$h} / 2) * -1) - 一半高度的負值

這樣就能夠:

margin: calc((#{$h} / 2) * -1) calc((#{$w} / 2) * -1);

4. 使用網格(Grid)

何時用:

  • 當只有一個子元素須要居中時。

這個思路是建立一個網格容器並將邊距設置爲auto。在非網格容器中,當margin設置爲auto時,margin-topbottom取值爲0。

可是,在網格容器中,margin-topbottom平均分配可用空間,從而使元素居中。

.parent {
  display: grid;
}
.center {
  margin: auto;
}

另外一種使用網格來實現居中的方法是:

.parent {
  display: grid;
  place-items: center;
}

5. 使用填充(Padding)

不建議將此技術用於中心對齊,但它也是可行的。

何時用:

  • 當父元素的高度已知或者固定時;
  • 當中心元素的高度爲彈性可變時。

這個思路是爲已知固定高度的容器設置固定的垂直填充,並容許子元素佔據最大高度和自動邊距。

.parent {
  height: 600px; //Fixed height
  padding: 200px 0; //Fixed vertical padding
}
.center{
  margin: 0 auto;
  height: 100%; // Child takes max height
}

6. 使用表格單元格

這個技術如今用得比較少,可是也值得借鑑。而且,它確實也是可行的。

這個思路是使用display強制父級表現得像一個表格單元格。而後使用vertical align屬性進行垂直居中,使用margin auto進行水平居中。

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

以上總結了居中對齊元素的6種方法。

另外咱們再講一講——水平居中

水平居中一般用於標題樣式和頁腳,並結合均勻的填充或邊距。

使用文本對齊

何時用:

  • 當中心元素爲文本內容或者inline-*類型元素時;
  • linline-*包括inlineinline-blockinline-flexinline-table等。
.parent {
   text-align: center;
}

它還能夠居中塊類型子元素,但咱們不推薦這麼作。

使用邊距

何時用:

  • 當中心元素是塊元素時
.center {
    margin: 0 auto;
}

感謝閱讀!

每日分享前端插件和前端開發教程,歡迎掃碼關注個人公衆號:前端新世界

相關文章
相關標籤/搜索