(参考原文https://css-tricks.com/centering-css-complete-guide/?utm_source=caibaojian.com)
平时做居中,拿过来就做,全靠运气。知道很多种可以居中的办法,每次应用也是哪个可以实现就用哪个,今天有时间整理一下居中问题,不要再瞎猫碰死耗子了,遇到什么情况直接找到对应的方法。高效直接找到不同情境下的居中实现方法不是更好么。大概可以分为三中居中:水平居中、垂直居中、水平垂直同时居中。
1.水平居中(基础初级)
①行内元素:父元素中添加text-align: center;
②单个块级元素:居中元素本身添加margin:0 auto;
③多个块级元素:父元素中添加display: flex;justify-content: center;
2.垂直居中(稍微有难度了)
一、行内
①单行文本
(1)父元素设置相同的上下padding;
(2)居中元素本身height=line-height
②多行文本
(1)过时了的table
1)包裹在table tr td中,内容自动垂直居中(过时了吧,老土的方法)
2)模拟table样式,父元素添加display: table;子元素添加display: table-cell;vertical-align: middle;
(2)父元素有高度:
父元素上设置display: flex;flex-direction: column;justify-content: center;
(3)父元素没高度:
父元素上设置position:absolute;父元素::before设置content: " "; display: inline-block; height: 100%; width: 1%; vertical-align: middle;子元素上设置display:inline-block;vertical-align:middle;
二、块级
①居中元素高度固定
父元素上设置position:relative;子元素:position: absolute; top: 50%; height: 100px; margin-top: -50px; /*有padding时,padding要另算,即(height+2*padding)/2*/
②居中元素高度不固定
父元素上设置position:relative;子元素:position: absolute; top: 50%;transform: translateY(-50%);(上周用这个做了个弹框,改成position:fixed就可以了)
③可以使用flexbox一切就变得简单多了
父元素上设置:display: flex; flex-direction: column; justify-content: center;
3.水平垂直同时居中(重头戏、终极boss)
①居中元素高度宽度都固定
父元素设置:position: relative;
子元素设置:width: 300px; height: 100px; padding: 20px; position: absolute; top: 50%; left: 50%; margin: -70px 0 0 -170px;
②居中元素高度宽度不固定
父元素设置:position: relative;
子元素设置:position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);}
③可以使用flexbox
父元素上设置:display: flex; justify-content: center; align-items: center;
小结:没有什么是不可以居中的