当前位置: 首页 > Web前端 > HTML5

CSS水平或垂直居中技巧

时间:2023-04-05 19:03:01 HTML5

前言CSS水平和垂直居中是一个永恒的话题,经常出现在漂亮的网页和各大前端面试中。说来惭愧,两年前面试的时候,横竖都不知道怎么居中,场面更尴尬(ps:想找个地洞钻进去)。..时隔两年,对这个问题有了一些了解,现在做一个小小的整理,也算是对自己学习的一个总结。注:文中示例中未指定html代码时,采用如下结构:超级好用,超级放心在线图片压缩完成后可以压缩

只有类名会与众不同。1、Line-height适用场景:单行文本(垂直居中)原理:单行文本设置行高后,文本位于行高的垂直中间位置。html:Loremipsam.
css:.example{width:400px;背景:#afddf3;line-height:50px;}作用:2.line-height+inline-block的原理:把多个元素或者多行元素当成一个行元素,所以我们必须把这些数据再打包一层,设置为inline-堵塞。由于inline-block在不同的浏览器中会有空隙,设置父元素font-size:0消除,从而达到完美的垂直居中。CSS:.example2{宽度:400px;边框:1px实心#dcdcdc;行高:100px;font-size:0;}.example2.con{display:inline-block;行高:2;垂直对齐:中间;宽度:300px;字体大小:15px;背景:#afddf3;}3.:before+inline-block原理::before伪类元素带有inline-block属性的写法应该是很传统的垂直居中技术,这种方式的好处是子元素的高度无需特殊设置即可居中。我们将使用:before伪类元素设置100%inline-block的高度,然后将需要居中的子元素设置为inline-block。block属性后可以使用vertical-align:middle来达到垂直居中的目的。这个方法在以往其实是一个很好的垂直居中解决方案,但是需要专门处理inline-block元素之间的4-5px不要怕空间小的缺陷,设置父元素font-size即可:0和子元素字体大小:15px。css:.example3{margin-top:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example3::before{content:'';高度:100%;宽度:0;vertical-align:middle;}.example.con{width:300px;字体大小:15px;背景:#afddf3;显示:内联块;vertical-align:middle;}4、table+margin适用场景:单对象(水平居中)原理:设置子元素为块级表格,然后设置水平居中。css:.example4{margin-top:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example.con{display:table;;字体大小:15px;background:#afddf3;}5.table+table-cell+vertical-align:middle适用场景:多个对象(垂直居中)html:超级好用使用超级放心图片在线压缩压缩后可以打包下载
CSS-TRICKScss:.example5{显示:表格;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example.con{display:table-cell;垂直对齐:中间;宽度:300px;字体大小:15px;background:#afddf3;}6.absolute+margin负值原理:设置绝对定位,top:50%;之后,设置负值一半的高度来实现。毕竟,这只是一道简单的数学题。缺陷:需要设置居中元素的高度。优点:没有浏览器兼容性问题css:.example6{position:relative;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example6.con{position:absolute;顶部:50%;高度:80px;边距顶部:-40px;宽度:300px;字体大小:15px;background:#afddf3;}7.absolute+marginauto原理:当元素设置为绝对定位最后,如果不能捕获整体可用空间,margin:auto会失效,但是当你设置top:0;bottom:0;,绝对定位的元素将捕获可用空间。当您的margin:auto生效时。缺陷:定位元素必须有固定的宽高(百分比也算)。css:.example7{位置:相对;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example7.con{position:absolute;顶部:0;底部:0;左:0;右:0;保证金:自动;高度:80px;宽度:300px;字体大小:15px;background:#afddf3;}8.absolute+translate原则:当使用绝对定位时,top和Right将元素的top和left设置为50%,然后使用transform:translate(-50%,-50%);将居中的元素移动自身宽高的50%,达到居中的目的。缺陷:translate是css3属性,低版本浏览器不支持。显着优势:无需固定定位元素的宽度和高度。css:.example8{位置:相对;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example8.con{position:absolute;左:50%;顶部:50%;转换:翻译(-50%,-50%);字体大小:15px;background:#afddf3;}9.flex+align-items适用场景:多行文本(垂直居中)原理:对于弹性布局,align-items定义了flex项目在横轴(纵轴)方向的对齐方式flex容器的当前行。参考CSS-TRICKS缺陷:css3属性,低版本浏览器不支持。显着优点:无需固定定位元素的宽高,代码干净利落。css:.example9{显示:flex;对齐项目:居中;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example9.con{font-size:15px;background:#afddf3;}10.flex+justify-content适用场景:多行文本(水平居中)原理:灵活布局,justify-content设置或获取灵活框元素在主轴方向的位置(横轴)对齐参考CSS-TRICKS缺陷:css3属性,低版本浏览器不支持。显着优点:无需固定定位元素的宽高,代码干净利落。css:.example10{显示:flex;证明内容:居中;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example.con{height:80px;字体大小:15px;background:#afddf3;}11.flex+:before+flex-grow适用场景:多行文本(垂直居中)原理:灵活布局,flex-direction:column;垂直显示项目,就像一列。弹性增长:[数字];指定项目相对于其他灵活项目的扩展量。参考CSS-TRICKS缺陷:css3属性,低版本浏览器不支持,难度稍大。一般不会想到这个方法。显着优势:无需固定定位元素的宽度和高度css:.example11{display:flex;弹性方向:列;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example11:before{content:'';flex-grow:.5;}.example11.con{字体大小:15px;background:#afddf3;}12.flex+margin缺陷:css3属性,低版本浏览器不支持。css:.example12{显示:flex;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example12.con{margin:auto;宽度:300px;字体大小:15px;background:#afddf3;}13.flex+align-self原理:align-self单独定义了flexitem在横轴(纵轴)方向的对齐方式。缺陷:css3属性,低版本浏览器不支持。css:.example13{显示:flex;证明内容:居中;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;border:1pxsolid#dcdcdc;}.example13.con{alignself:center;宽度:300px;字体大小:15px;background:#afddf3;}14.flex+align-content原理:align-content当elastic容器中的item没有占据容器内的横轴上的所有可用空间时对齐(垂直),flexitems有多个itemfor这个属性工作。缺陷:css3属性,低版本浏览器不支持。css:.example14{显示:flex;对齐内容:居中;弹性包装:包装;顶部边距:10px;宽度:400px;高度:150px;字体大小:0;边框:1px实心#dcdcdc;}。example14:before,.example14:after{内容:“”;显示:块;宽度:100%;}.example14.con{高度:80px;宽度:300px;字体大小:15px;background:#afddf3;}below是一个比较常见的例子,往往不想扭曲图片而不管大小都会显示在容器的中心(下面的例子适用第8条)。html:css:.imgbox-box{显示:flex;证明内容:居中;margin-bottom:40px;}.imgbox{宽度:200px;高度:200px;位置:相对;背景:#ebf8ed;溢出:隐藏;}。imgboximg{位置:绝对;左:50%;顶部:50%;转换:翻译(-50%,-50%);最大宽度:100%;max-height:100%;}结论:有的是水平居中,有的是垂直居中,有的两种可以结合起来实现水平和垂直居中。但我相信肯定不止这些方法,还有其他方法值得我们去探索。文中如有错误,请指正,谢谢!