小小程序员~博客第五篇
居中的方法有好多,不过呢,这里举一些常见的例子啦,有不对的地方,请大佬指出哈
在开始讲解水平居中之前,想给大家讲一个属性,text-align 这个属性如果理解透了 大部分的居中有思路 我们透过现象看本质,为什么有时候加了text-align,没反应,有时候就可以,我想,如果能懂它的用法,对居中大部分都可以懂啦
只在块元素中使用,直接用在行内元素上不生效。会对块元素中的所有行内元素内容对齐。会对块元素中包含的文本内容生效。在其内的块元素也会对齐是因为子块元素继承父块元素的text-align的属性。也就是说,这个属性是只能用在块元素上的,如果你是span这种行元素的话,是需要把它变成block的,或者是把它的父元素变成块元素,这样一看,问题就好办啦。下面,我们从行元素和块元素,分别来讨论如何显示水平居中
第一中情况
<span class="test-horizontally"> 11 </span> .test-horizontally { display: block; width: 200px; height: 200px; border: 1px solid; text-align: center; }这种情况,如果你不加block,变成块元素,text-align根本不会生效噢,因为上面说过,text-align不能直接作用在行内元素。
第二种
<div class="test-horizontally"> <span>11</span> </div> .test-horizontally { width: 200px; height: 200px; border: 1px solid; text-align: center; }因为span的父元素是块元素,所以直接在父元素加text-align就好了,因为text-align会对块元素中的所有行内元素内容对齐。效果图如上所示
第三种
<span class="test-horizontally"> <span>11</span> </span>这时候只有把span变成block才行,道理如上
.test-horizontally { display: block; width: 200px; height: 200px; border: 1px solid; text-align: center; }都是块元素的话,这时候要想清楚了,text-align只对块元素中的行内元素和文本居中噢,这个里面是块元素的话,分两种情况讨论
子元素有宽度
.test-horizontally { width: 200px; height: 200px; border: 1px solid; } .test-horizontally div { width: 100px; height: 100px; margin: 0 auto; }有宽度是时候,需要用到margin属性,没有宽度它是不会理你的,因为有宽度才可以通过margin设置
子元素没有宽度 没有宽度,只能把子元素的display改成inline-block或者inline,对应上面的功能,才能使用text-align
.test-horizontally { width: 200px; height: 200px; border: 1px solid; text-align: center; } .test-horizontally div { display: inline; }如果子元素宽度已知,那
.test-horizontally { width: 600px; height: 600px; border: 1px solid; text-align: center; position: relative; } .test-horizontally div { width: 200px; height: 200px; border: 1px solid; position: absolute; left: 50%; margin-left: -100px; }首先设置left为50%,让它偏离,不过它都是以它左上角为基准的,所以图形会过来一点 所以让它偏左一点,就加个margin-left 负的一半子元素的宽度即可,如下
如果子元素的宽度不知道,就可以借助css3属性,transform:translateX(-50%)
.test-horizontally { width: 600px; height: 600px; border: 1px solid; text-align: center; position: relative; } .test-horizontally div { width: 200px; height: 200px; border: 1px solid; position: absolute; left: 50%; transform:translateX(-50%); }这样就可以啦,把margin替换成transform就可以了,不过我这里有点偏差,因为我用的是border边框,左右加起来共占据了两个像素,因此会有点偏移噢
不管你子元素有没有宽度,在它的父元素加上
display: flex; justify-content: center;
.test-horizontally { width: 600px; height: 600px; border: 1px solid; display: flex; justify-content: center; }效果如上图所示,完美实现居中
说到垂直居中,我觉得,还是从行元素和块元素开始讲起
在span上,加上line-height等于父元素的高度即可
.test-horizontally span { line-height: 300px; }当然,你可以把子元素改成行元素,然后加上line-height,但是我们往往需要它是块元素
这个是有高度的情况,如果高度不知道的话,可以把margin-top换成transform:translateY(-50%)
只要要父元素加上
display: flex; align-items: center;
.test-horizontally { width: 500px; height: 500px; border: 1px solid; display: flex; align-items: center; } .test-horizontally div { width: 100px; height: 100px; border: 1px solid; }同样能达到效果。
其实 ,我觉得这个就是前面两个的结合版,如果你一路看下来的话,就可以看的很清楚啦
如果高度和宽度都不知道的情况下,就把 margin-top------>transform:translateY(-50%), margin-left------>transform:translateX(-50%)
这是其中一种方法噢,还有一种比较奇妙的方法,不过需要固定的宽高
.test-horizontally { width: 500px; height: 500px; border: 1px solid; position: relative; } .test-horizontally div { width: 100px; height: 100px; border: 1px solid; position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; }以上这种方法也可以实现垂直居中呀
只要在父元素那里加上
display: flex; justify-content: center; align-items: center;
.test-horizontally { width: 500px; height: 500px; border: 1px solid; display: flex; justify-content: center; align-items: center; } .test-horizontally div { width: 100px; height: 100px; border: 1px solid; }就可以实现效果啦,以上就是常见的方法啦,以后会有其他方法的更新噢,这次暂时就整理一些常用的。
喜欢的老铁点个关注,下次找我不迷路,嘿嘿