前端基礎問題:CSS居中的幾種方式

Du9191發表於2021-05-08

水平居中:

(1)內聯元素:

text-align: center;

利用 text-align: center ;可以實現在塊級元素內部的內聯元素水平居中

如果一行中有多個塊級元素,可以通過設定塊級元素的顯示型別為inline-block和父容器的text-align屬性從而使多塊級元素水平居中。

注意:此方法對內聯(inline), 內聯塊(inline-block),內聯表(inline-table), 內聯塊級彈性盒(inline-flex)元素水平居中都有效。

(2)塊級元素:

margin: 0 auto;

注意當塊級元素的度固定時,可通過margin: 0 auto;使塊級元素水平居中。(未定寬度,居中無效)

(3)絕對定位+2D平移:

position: absolute;

left:50%;

transform: translateX(-50%);

注意塊級元素的寬度不固定時,可通過絕對定位配合2D平移(平移相對於自身寬高的百分比),使塊級元素水平居中。

(4)彈性盒子使用justify-content屬性:

display: flex;

justify-content: center;

注意需將父盒子設定為彈性盒子,利用justify-content 屬性(用於設定彈性盒子元素在主軸(橫軸)方向上的對齊方式)實現水平居中。

垂直居中:

(1)內聯元素:

vertical-align:middle;

vertical-align是用來指定內聯元素或者表格單元格元素的垂直對齊方式。

可被用於:使內聯元素盒模型與其內聯元素容器垂直對齊。用於垂直對齊一行文字的內的圖片,垂直對齊表格單元內容。

注意:使用vertical-align要清楚基線、邊界的概念

vertical-align只對內聯元素(inline、inline-block、inline-table)、表格單元格元素(table-cell)生效。不能用它垂直對齊塊級元素。

(2)行高與高度一致:

line-height: **px;
height:
**px;

內聯元素的高度(height)和行高(line-height)相等時,元素垂直居中。

(3)塊級元素:

position: absolute;

top: 50%;

height: 100px;

margin-top: -50px;

注意:當塊級元素的高度固定時,通過絕對定位元素距離頂部50%,並設定margin-top向上偏移元素高度的一半,使塊級元素垂直居中。

(4)絕對定位+2D平移:

position: absolute;

top: 50%;

transform: translateY(-50%);

注意:當塊級元素的高度不固定時,可通過絕對定位配合2D平移(平移相對於自身寬高的百分比),使塊級元素垂直居中。部分瀏覽器存在相容性的問題。

(5)彈性盒子使用 align-items屬性:

display: flex;

align-items: center;

注意:需將父盒子設定為彈性盒子,利用align-items 屬性(用於設定彈性盒子元素在側軸(縱軸)方向上的對齊方式)實現垂直居中。

(6)利用表佈局(table)

display:table;

display:table-cell;

注意:父容器設為display:table讓他成為一個塊級表格元素,子元素display:table-cell使子元素成為表格單元格,

然後就像在表格裡一樣,給子元素加個vertical-align: middle就行了,多行文字垂直居中。(常規的登入及註冊頁面都需要用到)

(7)精靈元素(ghost element)技術

.ghost-center {
    position: relative;
}
.ghost-center::before {
    content: " ";
display: inline
-block; height: 100%; width: 1%; vertical-align: middle; } .ghost-center p { display: inline-block; vertical-align: middle; width: 20rem; }

在父容器內放一個100%高度的偽元素,讓文字和偽元素垂直對齊,從而達到垂直居中的目的。個人認為本質就是第(1)種方法。

水平垂直居中:

(1)固定寬高

.parent {
    position: relative;
}

.child {
    position: absolute;

    top: 50%;

    left: 50%;

    margin: -50px 0 0 -50px;
    width: 100px;
    height: 100px;
}

(2)不定寬高

.parent {
    position: relative;
}

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

(3)利用flex佈局

.parent {
    display: flex;

    justify-content: center;

    align-items: center;
}

(4)利用grid佈局(相容性較差,不推薦)

.parent {
  height: 140px;
display: grid; } .child { margin: auto; }

(5)利用表佈局(table)

.outer {
    display: table;
position: absolute; height:
100%; width: 100%; } .middle { display: table-cell; vertical-align: middle; } .inner { margin-left: auto; margin-right: auto; width: 400px; }

————————————————
資料參考:

CSDN博主「微個日光日」
原文連結:https://blog.csdn.net/xiebaochun/article/details/89838522

 簡書博主「Iam_Bling
 原文連結:https://www.jianshu.com/p/ce7e4a997a2c

 

  前端小白,有哪些不足的地方,希望大家多多指教

相關文章