CSS垂直水平居中汇总
发布日期:2021-10-10 04:25:56 浏览次数:2 分类:技术文章

本文共 5717 字,大约阅读时间需要 19 分钟。

1.块级元素水平居中

方法解读:

  • 块级元素水平居中是指块级元素相对于自己的包含块水平居中,方法为对块级元素设置margin:0 auto;
  • 如果块级元素变成float或者absolute的话,那么这个方法失效。
  • 代码写为margin:auto;在这种场景下等价于margin:0 auto;

div#wrap{            width:300px;            height: 300px;            background-color: pink;        }        div#test{            width:100px;            height: 100px;            background-color: deeppink;            margin: 0 auto;        }

2.行内元素的水平居中

直接用text-align属性的center值即可搞定,text-align属性的含义就是块级元素中的行内内容的对齐方式

3.块级元素的垂直水平居中

三种方法,都是基于绝对定位

(1)方法1:已知宽度和高度 + left:50% + top:50% + margin-left:自身border-box宽度一半的负值 + margin-top:自身border-box高度一半的负值

(2)方法2:left:50% + top:50% + transform(-50%,-50%,0)

(3)【推荐】方法3: 已知宽度和高度 + left:0 + right:0 +top:0 + bottom:0 + margin:auto

  • 方法1 :需已知尺寸

#wrap{            position: relative;            width:400px;            height: 300px;            background-color: pink;       }        #test{            position: absolute;            left:50%;/*包含块宽度的百分比*/            top:50%;/*包含块高度的百分比*/            margin-left:-50px;/*元素自身宽度的一半*/            margin-top:-50px;/*元素自身高度的一半*/            width:100px;            height: 100px;            background-color: deeppink;        }
  • 方法2 :无需尺寸,适合尺寸不固定的场景,比如多行文本

这是一段文本啊啊啊
这是一段文本啊啊啊
这是一段文本啊啊啊
这是一段文本啊啊啊
这是一段文本啊啊啊
这是一段文本啊啊啊
#wrap{            position: relative;            width:400px;            height: 300px;            background-color: pink;        }        #test{            position: absolute;            left:50%;/*包含块宽度的百分比*/            top:50%;/*包含块高度的百分比*/            transform: translate3d(-50%,-50%,0);/*宽度和高度不固定*/            background-color: deeppink;        }
  • 方法3:需已知尺寸

       原理是如下公式:

           left+margin+border+padding+width+right = 占据包含块(元素padding box)的宽度

           top+margin+border+padding+height+bottom = 占据包含块(元素padding box)的高度

#wrap{            position: relative;            width:400px;            height: 300px;            background-color: pink;        }        #test{            position: absolute;            left:0;            right: 0;            top:0;            bottom: 0;            margin:auto;            width:100px;            height: 100px;            background-color: deeppink;        }

4.图片垂直水平居中(inline-block元素垂直水平居中)

方法解读:由于图片是inline-block元素,所以水平居中使用text-align:center;即可,关键是垂直居中,但是肯定会涉及到vertical-align:middle。方法是利用vertical-align:middle。

代码

  • 图片设置为vertical-align:middle;
#wrap{            width:300px;            height: 300px;            border:1px solid;            margin:0 auto;            text-align: center;        }             #wrap img{            vertical-align: middle;        }
  • 给图片的包含块元素添加一个:after伪元素,伪元素的特点有5个,也就是5条规则
#wrap:after{            content:"";            height: 100%;/*相对于#wrap*/            width:0;            background-color:pink;            display: inline-block;/*与图片成为兄弟行内元素*/            vertical-align: middle;        }

5.单行文本垂直居中

一般指的是一个块级元素比如<div>或者<p>等元素的内容为一个单行文本,方法为让块级元素的line-height与height相等,更优雅的方式是只给块级元素设置line-height而不设置height,这样也能实现效果,因为height此时会被其中的内容默认撑开。

下面的效果是单行文本垂直居中+水平居中

这是一段单行文本
div#wrap{            line-height: 60px;/*也可以加上height:60px;*/            background-color: pink;            width: 200px;            text-align: center;/*块级元素中的行内内容的水平对齐方式*/        }

6.多行文本垂直居中

其实这个问题需要看承装多行文本的元素的display:

  • (1)如果是block元素,那么就用块级元素的垂直水平居中的第二种方法,也就是尺寸不固定时的块级元素的垂直水平居中。
  • (2)如果是inline-block元素,那么就参考图片的垂直水平居中方法
  • (3)如果是inline元素,那么就将其转化为inline-block或者block咯
  • (4)建议把block元素转化为inline-block元素,然后用(2),也就是无论是什么类型的元素,都建议用(2)

(1)如果是block元素

这是一段文本

这是一段文本
这是一段文本
这是一段文本
这是一段文本

 

div#wrap{            position: relative;            width:300px;            height: 300px;            background-color: pink;        }        p#test{            position: absolute;            left:50%;            top:50%;            transform: translate3d(-50%,-50%,0);            background-color: deeppink;        }

(3)如果是inline元素

这是一段文本
这是一段文本
这是一段文本
这是一段文本
这是一段文本
div#wrap{            width:300px;            height: 300px;            background-color: pink;        }                span#test{            display: inline-block;            background-color: deeppink;            vertical-align: middle;        }        div#wrap:after{            content: "";            display: inline-block;            height: 100%;            width:0;            vertical-align: middle;        }        div#wrap{            text-align: center;/*让整个span在#wrap中水平居中*/        }

(4)把block元素转化为inline-block

这是一段文本

这是一段文本
这是一段文本
这是一段文本
这是一段文本

div#wrap{            width:300px;            height: 300px;            background-color: pink;        }        p#test{            display: inline-block;            background-color: deeppink;            vertical-align: middle;        }        div#wrap:after{            content: "";            display: inline-block;            height: 100%;            width:0;            vertical-align: middle;        }        div#wrap{            text-align: center;        }

 

7.总结

        上述不同场景的垂直水平居中其实会有重合的地方,但是每个场景总会有最适合自己的方案,一般来说,能不提升层级就不提升层级,也就是尽量少使用float和position:absolute。如果是在面试中,那么不同的场景的考察点是不同的,比如图片垂直水平居中的考察点是vertical-align的应用,单行文本垂直居中的考察点是line-height的应用,多行文本垂直居中最好的方案也是转化为inline-block从而利用和图片一样的方案,而块级元素垂直水平居中就是绝对定位和margin的应用。水平居中就比较简单了,块级元素的水平居中使用margin:0 auto;而行内元素(inline、inline-block)的水平居中就是其父级块元素的text-align:center;。此外还要掌握不同的盒模型的特点:浮动盒模型、绝对定位盒模型和普通盒模型,它们的包含块分别是什么,以及它们的层级,是否具有包裹性等等特点。

 

 

 

 

 

 

 

转载地址:https://blog.csdn.net/qq_21428081/article/details/92094115 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:CSS背景总结
下一篇:Vue API学习——指令

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月18日 23时30分36秒