拓展 实现盒子水平垂直居中的方法

304 阅读1分钟

实现方法有三种

方法一 利用 display:table-cell 设置单元格的属性

思路:

 先给父盒子设置table-cell 设置摆放位置   
 再设置 vertical-align: middle 摆放在中间
 然后给父盒子设置内联块属性display: inline-block
 最后父元素就可以用文字居中的属性来实现子盒子的水平居中
 就达成了盒子水平垂直居中了。

代码如下:

<!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>Document</title>
  <style>
    .parent {
      width: 500px;
      height: 500px;
      border: 1px solid red;
      /* 设置单元格 摆放位置 */
      display: table-cell;
      /*vertical是竖着的意思 
       竖着摆放在中间 */
      vertical-align: middle;
      /* 文字居中 */
      text-align: center;
    }

    .child {
      width: 100px;
      height: 100px;
      border: 1px solid #000;
      /* 文字居中 */
      /* display: inline-block 是内联块的意思
        子元素是内联块元素,父元素就可以用text-align属性
        设置子元素水平对齐方式。
      */
      display: inline-block;
    }
  </style>
</head>

<body>
  <div class="parent">
    <div class="child">子元素</div>
  </div>
</body>

</html>

如图所示:

image.png

方法二:利用 display:flex;flex布局 设置垂直水平居中

  flex布局 给弹性盒子设置  display: flex; 
  设置子元素的主轴  justify-content: center; 水平方向居中
  设置子元素的侧轴  align-items: center; 垂直方向居中
  

代码如下

<!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>Document</title>
  <style>
    .parent {
      margin: 100px auto;
      width: 500px;
      height: 500px;
      border: 5px solid pink;
      /* flex布局 给弹性盒子设置 */
      display: flex;
      /* 子元素默认是沿着主轴进行排列 而主轴默认是水平方向
       justify-content: center; 这个是设置子元素的水平方向居中
      */
      justify-content: center;
      /*  align-items: center; 
        这个是设置子元素的垂直居中
      */
      align-items: center;
    }

    .child {
      width: 100px;
      height: 100px;
      border: 5px solid skyblue;
      text-align: center;
    }
  </style>
</head>

<body>
  <div class="parent">
    <div class="child">子元素</div>
  </div>
</body>

</html>

如图所示:

image.png

方法三:计算父盒子与子盒子的空间距离(这跟方法一是一个道理)

<!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>Document</title>
  <style>
    .parent {
      margin: 100px auto;
      width: 500px;
      height: 500px;
      border: 5px solid yellow;

    }

    .child {
      width: 100px;
      height: 100px;
      border: 5px solid skyblue;
      text-align: center;
      margin-top: 200px;
      margin-left: 200px;
    }
  </style>
</head>

<body>
  <div class="parent">
    <div class="child">子元素</div>
  </div>
</body>

</html>

如图所示:

image.png