css实现水平居中 垂直居中 水平+垂直居中

css实现水平居中 垂直居中 水平+垂直居中

小小程序员~博客第五篇

居中的方法有好多,不过呢,这里举一些常见的例子啦,有不对的地方,请大佬指出哈

(一)水平居中

在这里插入图片描述
在开始讲解水平居中之前,想给大家讲一个属性,text-align 这个属性如果理解透了
大部分的居中有思路
我们透过现象看本质,为什么有时候加了text-align,没反应,有时候就可以,我想,如果能懂它的用法,对居中大部分都可以懂啦

  1. 只在块元素中使用,直接用在行内元素上不生效。
  2. 会对块元素中的所有行内元素内容对齐。
  3. 会对块元素中包含的文本内容生效。
  4. 在其内的块元素也会对齐是因为子块元素继承父块元素的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;
}

在这里插入图片描述

块元素

<div class="test-horizontally">
         <div>11</div>
 </div>

都是块元素的话,这时候要想清楚了,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;
} 

在这里插入图片描述

方案二,绝对定位

 <div class="test-horizontally">
         <div>11</div>
 </div>

如果子元素宽度已知,那

.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边框,左右加起来共占据了两个像素,因此会有点偏移噢

方案三,flex布局,简单粗暴

不管你子元素有没有宽度,在它的父元素加上

display: flex;
justify-content: center;

.test-horizontally {
    width: 600px;
    height: 600px;
    border: 1px solid;
    display: flex;
    justify-content: center;
}

效果如上图所示,完美实现居中

(二)垂直居中

在这里插入图片描述
说到垂直居中,我觉得,还是从行元素和块元素开始讲起

行元素

<div class="test-horizontally">
        <span>11</span>
 </div>

在span上,加上line-height等于父元素的高度即可

 .test-horizontally span {
    line-height: 300px;
} 

在这里插入图片描述

块元素

方案一,改成行元素(下策)

<div class="test-horizontally">
        <div>11</div>
</div>

当然,你可以把子元素改成行元素,然后加上line-height,但是我们往往需要它是块元素

方案二,绝对定位

<div class="test-horizontally">
        <div>11</div>
 </div>
.test-horizontally {
    width: 500px;
    height: 500px;
    border: 1px solid;
    position: relative;
}
 .test-horizontally div {
    width: 100px;
    height: 100px;
    border: 1px solid;
    position: absolute;
    top: 50%;
    margin-top: -50px;
} 

这个是有高度的情况,如果高度不知道的话,可以把margin-top换成transform:translateY(-50%)

方案三,flex布局,又开始了又开始了

只要要父元素加上

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; 
} 

在这里插入图片描述
同样能达到效果。

水平+垂直居中

其实 ,我觉得这个就是前面两个的结合版,如果你一路看下来的话,就可以看的很清楚啦
在这里插入图片描述

方案一,绝对定位

<div class="test-horizontally">
        <div>11</div>
 </div>
.test-horizontally {
    width: 500px;
    height: 500px;
    border: 1px solid;
    position: relative;
}
 .test-horizontally div {
    width: 100px;
    height: 100px;
    border: 1px solid; 
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -50px;
    margin-left: -50px;
} 

如果高度和宽度都不知道的情况下,就把
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;
} 

以上这种方法也可以实现垂直居中呀

方案二,flex布局

只要在父元素那里加上

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; 
} 

就可以实现效果啦,以上就是常见的方法啦,以后会有其他方法的更新噢,这次暂时就整理一些常用的。

喜欢的老铁点个关注,下次找我不迷路,嘿嘿

发布了17 篇原创文章 · 获赞 25 · 访问量 2035

猜你喜欢

转载自blog.csdn.net/weixin_44142985/article/details/101939527