說到布局除了浮動以及定位外還有一個不得不提的點,那就是居中,居中問題我們在網頁布局當中經常遇到,那么以下就是分為兩部分來講,一部分是傳統的居中,另一種則是flex居中,每個部分又通過分為水平垂直居中來講。
一、傳統居中方式
1.1水平居中
1.1.1 inline
對于inline元素以及純文本只需要為父元素設置
text-align: center;
適用于
inline, inline-block, inline-table, inline-flex
1.1.2 block
對于block元素則需要為想要居中的block設置
margin: 0 auto;
1.1.3 more-block:
多個塊級元素直接居中同單個塊級居中一樣,但是如果要在單行內居中,需要先通過
display: inline-block
將塊級元素轉化為行內塊元素再按照行內元素為父元素添加
text-align: center
的居中方式居中。


1.2垂直居中
1.2.1 inline
單行情況下,可以為父元素設置相同的上下padding實現居中
如果只是單行文字也可以設置行高等于父元素高度實現居中
如果設置上下相同padding沒有用的話,可能該元素是表格,可以使用
vertical-align: middle
設定對齊基線為middle實現居中。
1.2.2 block
要居中的元素高度固定的情況下,可以使用position來定位,設置top為50%,但是因為top是盒子上邊界的定位距離,所以還要通過負值的margin-top往回拉寬度的一半。
(以下只寫核心代碼,其他寬度高度border自己加)
.parent {position: relative;
}
.child {position: absolute;top: 50%;height: 100px;margin-top: -50px;
}
但是如果高度不固定的話則可使用變換來替換margin負值達到動態高度的一半
// 只需要替換上面的margin-top: -50px; height可以直接去掉了
transform: translateY(-50%);
1.3水平垂直都居中
1.3.1 固定寬高
固定寬高下,同垂直居中方法一樣,也是絕對定位50%然后通過margin負值拉回去
.parent {position: relative;
}
.child {position: absolute;top: 50%;left: 50%; margin: -50px 0 0 -50px; // 寬高為100px
}
?
此為還有一種方法也可以實現已知寬高時候的居中
// 此處如果是不定寬高的話就會child鋪滿整個父元素
.child {position: absolute;top:0;bottom:0;left:0;right:0;margin:auto;
}
1.3.2 不固定寬高
// 同樣是替換margin負值
transform: translate(-50%, -50%);
?
二、Flex居中方式
Flex的出現解決了傳統居中方式難以實現的麻煩,僅需要幾行代碼就可以實現居中,Flex布局不僅能用于居中,在其他布局當中也相當的有效。想要啟動Flex只要在父元素設置
display: flex
,內聯元素的話則是
display: inline-flex
.
2.1 水平居中
.parent {display: flex;justify-content: center;
}
2.2 垂直居中
.parent {display: flex;align-items: center;
}
2.3 水平垂直居中
.parent {display: flex;justify-content: center;align-items: center;
}
此外,如果想要實現豎著排列flex實現也很容易,僅需要換一下主軸方向,多添加一行就行了。
.parent {flex-direction: column;
}
?
參考
?
學習CSS布局
?
視覺格式化模型
?
css-tricks:居中詳解
本文轉載于:猿2048?https://www.mk2048.com/blog/blog.php?id=1akc1jb&title=布局中常見的居中問題