水平居中:
(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
前端小白,有哪些不足的地方,希望大家多多指教