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

CSS实现水平和垂直居中的1010种方式(史上最全)_0

时间:2023-03-30 22:23:25 CSS

划重点,这是面试必答题。很多面试官喜欢问这个问题。实现上图的效果看似很简单,其实暗藏玄机。本文总结了以下CSS实现水平和垂直居中的方法。这篇文章我将一一介绍只有居中的元素才具有固定的宽高。绝对+负保证金适用。绝对+保证金autoabsolute+计算。居中元素具有可变的宽度和高度。如下,一共两个元素,父元素和子元素123123

Web前端开发学习Q-Q-U-N:784783012,分享开发工具,零基础,进阶视频教程,希望新手少走弯路。wp是父元素的类名,box是子元素的类名。因为固定宽度和可变宽度是有区别的,这里用size来表示指定的宽度。以下是所有效果要用到的常用代码主要是设置颜色、宽高注意:此常用代码后面不再赘述,只给出相应的提示/*publiccode*/.wp{border:1px纯红色;宽度:300px;height:300px;}.box{背景:绿色;}.box.size{宽度:100px;height:100px;}/*常用代码*/绝对定位的百分比是相对于父元素的宽高,通过这个特性可以让子元素居中显示,但是绝对定位是基于子元素的左上角。想要的效果是子元素的中心显示在中心。为了纠正这个问题,可以使用margin的负值,它可以让元素向反方向移动定位,通过指定子元素的外边距为子元素宽度一半的负值-element,子元素可以居中,css代码如下/*这里是上面的公共代码*//*这里是上面的公共代码*//*定位代码*/.wp{position:relative;}.box{位置:绝对;;顶部:50%;左边:50%;左边距:-50px;margin-top:-50px;}这是我比较常用的方法。这种方式比较容易理解,兼容性好。缺点是需要知道子元素的宽高absolute+marginauto方法还要求居中元素的宽高必须固定。HTML代码如下123123
该方法设置每个方向的距离均为0。此时,如果margin设置为auto,它可以在所有方向上居中。*/.wp{位置:相对;}.box{位置:绝对;;顶部:0;左:0;右:0;底部:0;margin:auto;}这个方法也很兼容,但是缺点是需要知道子元素的宽高。absolute+calc这个方法也要求居中元素的宽高是固定的,所以我们给盒子加一个sizeclass。HTML代码如下123123感谢css3带来了计算属性,因为top的百分比是根据元素的左上角,那么减去一半宽度就够了,代码如下code*/.wp{position:relative;}.box{position:absolute;;顶部:计算(50%-50px);left:calc(50%-50px);}这个方法的兼容性取决于calc的兼容性。缺点是需要知道子元素的宽高。absolute+transform也就是绝对定位,但是这种方式不需要子元素固定宽高,所以不再需要size类,HTML代码如下解决绝对定位的问题,也可以使用css3新的transform,transform的translate属性也可以设置一个百分比,是相对于自身宽高的,所以可以说一下translate设置如果是-50%,可以居中,代码如下/*这里是参考上面的公开代码*//*这里是参考上面的公开代码*//*定位代码*/.wp{position:relative;}.box{position:absolute;顶部:50%;左:50%;transform:translate(-50%,-50%);}Web前端开发学习Q-Q-U-N:767273102,分享开发工具,零基础,进阶视频教程希望新手少走弯路。此方法的兼容性取决于translate2d的兼容性。lineheight也可以通过使用内联元素的centering属性水平和垂直居中。HTML代码如下123123将box设置为内联元素,可以通过text-align水平居中,但是很多同学可能不知道还可以通过vertical-align实现垂直居中。代码如下/*此处参考上面公开代码*//*这里参考上面公开代码*//*定位代码*/.wp{line-height:300px;文本对齐:居中;字体大小:0px;}.box{字体大小:16px;显示:内联块;垂直对齐:中间;行高:初始;文本对齐:左;重置为想要的效果writing-mode想必很多同学都和我一样对writing-mode属性一无所知。感谢张新旭老师的反馈。简单来说,writing-mode可以改变文字的显示方向。例如,您可以使用writing-mode让艺术字符显示变为垂直方向水平方向垂直方向.div2{writing-mode:vertical-lr;}显示效果如下:水平方向和垂直方向更神奇的是,所有水平方向的css属性都会变成垂直方向的属性,比如text-align,可以通过写-mode和text-align,稍微麻烦一点123123/*这里引用上面的公共代码*//*这里引用上面的公共代码*//*定位代码*/.wp{writing-mode:vertical-lr;text-align:center;}.wp-inner{书写模式:horizo??ntal-tb;显示:内联块;文本对齐:居中;宽度:100%;}.box{显示:内联块;保证金:自动;text-align:left;}这个方法的实现和理解看起来有点复杂。表格曾经用于页面布局。现在没人做,但是table也可以实现水平和垂直居中,但是会增加很多冗余代码。123123
中的内容表格单元格自然是它是垂直居中的,只需添加一个水平居中属性。wp{text-align:center;}.box{display:inline-block;}这个方法是代码太冗余了,也不是table的正确用法css-tablecss新的table属性可以让我们转将普通元素转化为逼真的表格元素效果。通过此功能,还可以实现水平和垂直居中。123123Web前端开发学习Q-q-u-n:784783012,分享开发工具,零基础,进阶视频教程,希望新手多多指教少走弯路。下面的css属性可以让div显示的和table.wp一样{display:table-cell;文本对齐:居中;vertical-align:middle;}.box{display:inline-block;}这个方法和table原理是一样的,但是没有那么多冗余代码,兼容性还不错。flexflex作为一种现代布局解决方案,颠覆了以往的体验。只需要几行代码就可以优雅的实现水平和垂直居中。123123.wp{显示:flex;证明内容:居中;align-items:center;}目前flex可以在移动端使用,PC端需要检查自己业务的兼容性。感谢@一直姐的反馈这个解决方案,css的新网格布局,由于兼容性不好一直没怎么关注。也可以通过grid123123.wp{display:grid;}.box{align-self:中心;justify-self:center;}代码量也少,但是兼容性不如fl例如,不建议使用。在下面的比较中总结每种方法的优缺点。肯定到了学生说怎么写字的时候了。简单总结就是PC端有兼容性需求,宽高是固定的。absolute+negativemarginPC端推荐有兼容性要求,宽高不固定,PC端推荐css-table,没有兼容性要求,移动端推荐flex,推荐使用柔性。固定PC兼容性移动兼容性absolute+negativemarginisie6+,chrome4+,firefox2+android2.3+,iOS6+absolute+marginautoisie6+,chrome4+,firefox2+android2.3+,iOS6+absolute+calcisie9+,chrome19+,firefox4+4.4+,iOS6+absolute+transform没有ie9+,chrome4+,firefox3.5+android3+,iOS6+writing-mode没有ie6+,chrome4+,firefox3.5+android2.3+,iOS5.1+lineheight没有ie6+,chrome4+,firefox2+Android2.3+,iOS6+table或ie6+,chrome4+,firefox2+android2.3+,iOS6+css-table或ie8+,chrome4+,firefox2+android2.3+,iOS6+flex或ie10+,chrome4+,firefox2+android2.3+,iOS6+grid或ie10+,chrome57+,firefox52+android6+,iOS10.3+最近发现很多同学对css关注不够,其实是不正确的。比如下面这么简单的问题,好多同学都不知道怎么回答,我也无语了123123.red{color:red}.blue{color:blue}Web前端开发学习Q-q-u-n:784783012,分享开发工具,零基础,进阶视频教程,希望新手少走弯路,求教什么是两个div的颜色,但是只有40%的同学能答对,这40%里还有很多同学不知道为什么,希望这些同学能好好辅导一下CSS的基础知识