css字体间距 css文字水平垂直居中
admin
2023-12-08 11:35:27

那些年我总结的css水平垂直居中

前言

css水平垂直居中一直是一个亘古不变的话题,它常常出现在优美的网页上以及各大前端面试当中。说来惭愧,在两年前面试的时候,我完全不知道如何做到水平和垂直均居中的方法,那场面别提有多尴尬了(特想找个地洞钻进去)。现在都2022年了,这些技巧现在已经不是技巧了吧,只是好记性不如烂笔头,还是乖乖记下来吧,得把它玩透才行!

注:文中例子没写明html代码时,使用的是下面结构:

超级好用超级放心 在线压缩图片压缩完可以

只是类名会有所不同。

1、line-height

适用:单行文字(垂直居中)原理:将单行文字的行高设定后,文字会位于行高的垂直中间位置。

// html

Lorem ipsam.
// css.example{ width: 400px; background: #afddf3; line-height: 50px;}

效果:

那些年我总结的css水平垂直居中

2、line-height + inline-block

原理:将多个元素或多行元素当成一个行元素来看待,所以我们必须要将这些数据多包一层,并将其设定为 inline-block。由于inline-block在不同浏览器会有空隙产生,因此设定父元素font-size:0来消除,从而达到完美的垂直居中。

.example2{ width: 400px; border: 1px solid #dcdcdc; line-height: 100px; font-size: 0;}.example2 .con { display: inline-block; line-height: 2; vertical-align: middle; width: 300px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

3、:before + inline-block

原理::before 伪类元素搭配 inline-block 属性的写法应该是很传统的垂直居中的技巧了,此方式的好处在于子元素居中可以不需要特别设定高度,我们将利用:before伪类元素设定为100%高的inline-block,再搭配上将需要居中的子元素同样设置成inline-block性质后,就能使用vertical-align: middle来达到垂直居中的目的了,此方式在以往其实是个非常棒的垂直居中解决方案,唯独需要特别处理掉inline-block元素之间的4-5px空间这个小缺陷,不用怕,设置父元素font-size: 0,子元素font-size: 15px即可。

// css.example3 { margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example3::before { content: '; display: inline-block; height: 100%; width: 0; vertical-align: middle;}.example .con { width: 300px; font-size: 15px; background: #afddf3; display: inline-block; vertical-align: middle;}

效果:

那些年我总结的css水平垂直居中

4、table + margin

适用情景:单对象(水平居中)原理:将子元素设置块级表格,再设置水平居中。

.example4 { margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example .con { display: table; margin: 0 auto; width: 300px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

5、table + table-cell + vertical-align: middle

适用情景:多对象(垂直居中)

// html

超级好用超级放心 在线压缩图片压缩完可以打包下载哦
CSS-TRICKS
// css.example5 { display: table; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example .con { display: table-cell; vertical-align: middle; width: 300px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

6、absolute + margin 负值(推荐)

原理:设置绝对定位,top: 50%;后,再设置高度一半的负值实现。说来说去,这就是一道简单的数学题而已。缺陷:需要设置居中元素的高度。

.example6 { position: relative; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example6 .con { position: absolute; top: 50%; height: 80px; margin-top: -40px; width: 300px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

7、absolute + margin auto(推荐)

原理:当元素设置为绝对定位后,它就抓不到整体可运用的空间范围,所以margin: auto会失效,但当你设置了top:0;bottom:0;时,绝对定位元素就抓到了可运用的空间了,这时你的margin:auto就生效了。缺陷:定位元素必须有固定的宽高(百分比也算)。 tips:上下左右四个方向要设置成一样的值。

.example7 { position: relative; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example7 .con { position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; height: 80px; width: 300px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

8、absolute + translate(推荐)

原理:利用绝对定位时的top 与right设置元素的上方跟左方各为50%,再利用 transform: translate(-50%, -50%);位移居中元素自身宽与高的50%就能达成居中的目的了。显著优势:无需固定定位元素的宽高。

.example8 { position: relative; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example8 .con { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

9、Flex + align-items(推荐)

适用情景:多行文字(垂直居中)原理:弹性布局,align-items定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式,参考CSS-TRICKS

.example9 { display: flex; align-items: center; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example9 .con { font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

10、Flex + justify-content(推荐)

适用情景:多行文字(水平居中)原理:弹性布局,justify-content设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式,参考CSS-TRICKS

.example10 { display: flex; justify-content: center; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example .con { height: 80px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

11、Flex + :before + flex-grow

适用情景:多行文字(垂直居中)原理:弹性布局,Flex-direction:column;将项目垂直显示,正如一个列一样。flex-grow: [number];规定项目将相对于其他灵活的项目进行扩展的量,参考CSS-TRICKS

.example11 { display: flex; flex-direction: column; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example11:before { content: '; flex-grow: .5;}.example11 .con { font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

12、Flex + margin(推荐)

.example12 { display: flex; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example12 .con { margin: auto; width: 300px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

13、Flex + align-self

原理:align-self定义flex子项单独在侧轴(纵轴)方向上的对齐方式。

.example13 { display: flex; justify-content: center; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example13 .con { align-self: center; width: 300px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

14、Flex + align-content

原理:align-content在弹性容器内的各项没有占用交叉轴上所有可用的空间时对齐容器内的各项(垂直),弹性项目有多项此属性才会发挥作用。

.example14 { display: flex; align-content: center; flex-wrap: wrap; margin-top: 10px; width: 400px; height: 150px; font-size: 0; border: 1px solid #dcdcdc;}.example14:before, .example14:after { content: ""; display: block; width: 100%;}.example14 .con { height: 80px; width: 300px; font-size: 15px; background: #afddf3;}

效果:

那些年我总结的css水平垂直居中

以上就是我总结的css垂直或者水平居中技巧了。下面是一个比较常见的例子,往往是不想让图片发生变形并且不管尺寸大小均会显示在容器的正中央(以下例子应用的是第8条)。

.imgbox-box { display: flex; justify-content: center; margin-bottom: 40px;}.imgbox { width: 200px; height: 200px; position: relative; background: #ebf8ed; overflow: hidden;}.imgbox img { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); max-width: 100%; max-height: 100%;}

效果:

那些年我总结的css水平垂直居中

结语

上面例子中,有些是水平居中,有些是垂直居中,将它们某两个合在一起就能实现水平和垂直均居中。不过我相信肯定不止这些方法,还有其他的值得我们去探究。若文中有错,请大家指正,谢谢!

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...