当前位置: 首页 > 科技观察

【爆肝面试系列】CSS垂直居中打开的正确方法

时间:2023-03-12 08:07:24 科技观察

web-css-gaoji-jichu.jpeg前言:爆破锤面试官的神器-无论是在实际开发中还是在求职面试中CSS都是垂直居中的它往往是绕不开的话题。很多面试官在被多次击中两次之后,并没有很好的反击点。他们只是结合了之前的恩怨和痛苦,给大家一记重锤。面试官老板的机会。其实垂直居中主要分为两种:一种是居中元素的宽高已知,一种是居中元素的宽高未知,下面我们就结合这两种来一一举例。css垂直居中。png中居中元素的宽高已知1.absolute+marginauto顾名思义就是使用position:absolute;每个方向的距离设置为0,此时设置margin为auto,实现垂直居中显示;具体代码如下:.parent{position:relative;宽度:90vw;身高:90vh;边框:3px实心钢蓝色;}.child{背景:番茄;宽度:50vw;高度:50vh;/*核心代码*/position:absolute;顶部:0;底部:0;左:0;右:0;margin:auto;}复制代码具体效果如下:image-20210729232149048.png2。absolute+negativemargin是通过使用50%的绝对定位百分比来实现的,因为当前元素的百分比是基于相对定位(即父元素)进行定位的;然后使用负的margin-top和margin-left进行简单的位移,因为当前负的margin是根据自身的高度和宽度来进行位移的。具体代码如下:.parent{position:relative;宽度:90vw;身高:90vh;border:3pxsolidsteelblue;}.child{背景:番茄;宽度:100px;高度:100px;/*核心代码*/position:absolute;顶部:50%;左:50%;边距顶部:-50px;margin-left:-50px;}复制代码具体效果如下:image-20210729232317142.png3。absolute+calc使用CSS3的一个计算函数进行计算即可;方法同上,具体代码如下:.parent{width:90vw;身高:90vh;边框:3px实心钢蓝色;/*核心代码*/position:relative;}.child{background:tomato;宽度:200px;高度:200px;/*核心代码*/position:absolute;顶部:计算(50%-100px);left:calc(50%-100px);}复制代码,具体效果如下:image-20210729232434257.png居中元素宽高未知4.absolute+transform使用CSS3的新特性transform;因为如果transform的translate属性的值是一个百分比,那么这个百分比会根据自身的宽高来计算。具体代码如下:.parent{width:90vw;身高:90vh;边框:3px实心钢蓝色;/*核心代码*/position:relative;}.child{background:tomato;/*核心代码*/position:absolute;顶部:50%;左:50%;transform:translate(-50%,-50%);}复制代码具体效果如下:image-20210729232624466.png5。line-height+vertical-align将当前元素设置为行内元素,然后通过设置text-align:center实现水平居中;父元素;同时,通过设置vertical-align:middle实现垂直居中;当前元素的;最后设置行高:初始;当前元素的行继承父元素的行-height。具体代码如下:.parent{width:90vw;边框:3px实心钢蓝色;/*核心代码*/line-height:500px;文本对齐:居中;}.child{背景:番茄;/*核心代码*/display:inline-block;垂直对齐:中间;line-height:initial;}复制代码具体效果如下:image-20210729232748854.png6。table表格元素通过最经典的table元素实现水平居中和垂直居中,但是代码看起来很冗余,不推荐;具体代码如下:

.parent{宽度:90vw;身高:90vh;边框:3px实心钢蓝色;/*核心代码*/text-align:center;}.child{背景:番茄;/*核心代码*/display:inline-block;}复制代码具体效果如下:image-20210729233002861.png7。css-table表格样式如果你一定要用到table的特性,又不想写table元素,那么css-table非常适合你;具体代码如下:.parent{width:90vw;身高:90vh;边框:3px实心钢蓝色;/*核心代码*/display:table-cell;文本对齐:居中;垂直对齐:中间;}。孩子{背景:番茄;/*核心代码*/display:inline-block;}复制代码具体效果如下:image-20210729233055305.png8。Flex非它莫属,那我们就举个最常见的两种使用方式吧~直接在flex-container上用几行代码就可以优雅的实现了。具体代码如下:.parent{width:90vw;身高:90vh;边框:3px实心钢蓝色;/*核心代码*/display:flex;justify-content:center;align-items:center;}.child{background:tomato;}复制代码justify-content表示:设置或获取主轴(横轴)方向的灵活框元素;align-items意思是:定义flexitem在flex容器当前行的横轴(纵轴)方向的对齐方式。具体效果如下:image-20210729233155581.png9。2)在flex-item上更优雅实现的具体代码如下:.parent{width:90vw;身高:90vh;边框:3px实心钢蓝色;/*核心代码*/display:flex;}.child{background:tomato;/*核心代码*/margin:auto;}复制代码具体效果如下:image-20210729233243684.pngflex的两种方式使用trade-off,可以附上一张flex兼容图片image-20210725020146492.png10。grid网格布局(一)grid布局相信在实际项目中用的比较少,主要是布局过于超前,导致兼容性不是那么理想,但不可否认的是,grid的能力在css布局中绝对是一个素质飞过去。不熟悉的可以看阮一峰老师的详细入门教程[1]CSSGrid包含了几乎和Flexbox一样的对齐选项,所以我们可以优雅的在grid-container上实现。具体代码如下:.parent{width:90vw;高度:90vh;边框:3px实心钢蓝色;/*核心代码*/display:grid;对齐项目:居中;证明内容:中心;}.child{背景:番茄;PNG11。grid网格布局(二)类似的,我们可以像Flexbox一样在grid-item上优雅的实现。具体代码如下:.parent{width:90vw;身高:90vh;边框:3px实心钢蓝色;/*核心代码*/display:grid}.child{background:tomato;/*核心代码*/align-self:center;justify-self:center;}复制代码具体效果如下:image-20210729233458535.pngflex两种方式取舍取舍,随心所欲包含一张网格兼容图片image-20210725020025034.png总结学习后以上11种垂直居中布局方式,简单总结一下,如果你的项目对PC端有兼容性需求,且宽高固定,推荐使用绝对+负边距的方式;如果你的项目对PC端有兼容性需求,宽高不固定,推荐使用css-table;如果你的项目对PC端没有兼容性要求,建议使用flex实现居中,当然如果不考虑IE,grid也是不错的选择;如果你的项目是在移动端使用,那么推荐你使用flex,也可以使用grid作为备选。写在最后,上面其实是一种垂直居中的方法,但是比较常用。其实还有一些比较冷门的方法,比如伪类元素,grid-container的grid-template-rows等等,大家可以自己试试~