本文将介绍盒子水平居中和垂直居中的几种方式!

水平居中的方法:

①给需要水平居中的元素加margin:0 auto;使得左右外边距自适应

效果图:

image.png

代码:

CSS代码,用选择器给需要水平居中的元素加(常用于盒子居中,盒子显示类型为block)

width: 200px;
        height: 200px;
        /* 用左右外边距自适应来实现水平居中 */
        margin: 0 auto;
        background-color: orange;


②用display将需要居中的盒子转换成行内块级,然后给父元素加text-algin:center;

.box1 {
        height: 300px;
        width: 400px;
        background-color: pink;
        /* 给父元素设置text-align:center;使得子元素居中 */
        text-align: center;
      }
      .box2 {
        /* 将父元素转换成行内块级 */
        display: inline-block;
        width: 200px;
        height: 200px;
        background-color: orange;
      }

垂直和水平居中:

将讲解垂直和水平都居中,大家可以灵活使用,例如只需要水平的,或者只需要垂直居中的,则可以按需调整。

①手动计算(最不可取的方式,不推荐)

.box1 {
        height: 400px;
        width: 400px;
        background-color: pink;
      }
      .box2 {
        /* 手动计算,用父元素减去子元素的高宽,然后除二,得出距离上面和左边的距离,设置margin即可(此方法不可取) */
        margin-top: 100px;
        margin-left: 100px;
        width: 200px;
        height: 200px;
        background-color: orange;
      }


②用定位

.box1 {
        position: relative;
        height: 400px;
        width: 400px;
        background-color: pink;
      }
      .box2 {
        position: absolute;
        top: 50%;
        left: 50%;
        margin-left: -100px;
        margin-top: -100px;
        width: 200px;
        height: 200px;
        background-color: orange;
      }

利用子绝父相。给父元素加position:relative;绝对定位,然后给子元素设置绝对定位,left和top设置50%,手动计算一下子元素高度和宽度,然后除二,分别用margin去设置负数即可(不是很推荐,下面的方法最推荐)

③定位+变形偏移效果

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>宗波尘客-垂直和水平居中演示代码</title>
    <style>
      .box1 {
        position: relative;
        height: 400px;
        width: 400px;
        background-color: pink;
      }
      .box2 {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        width: 200px;
        height: 200px;
        background-color: orange;
      }
    </style>
  </head>
  <body>
    <div class="box1">
      <div class="box2"></div>
    </div>
  </body>
</html>

和上方的类似,但是子元素的宽度计算由transform:translate(-50%,-50%)实现自动计算,无需手动计算

关于盒子垂直水平居中注意事项:

①上方的代码中,类名为box1的是父元素,box2的是父元素里面的子元素

②由于元素涉及到脱离标准流的情况,所以每个不同的代码使用情况场景不一样,大家如果一种方式不适用有冲突,可以试另一种方式