定位和居中对齐

133 阅读1分钟

定位和居中对齐

定位

相对定位

  • 属性值:relative
  • 元素相对于它在文档流中的位置的起始点进行移动。有一点要注意, 在使用相对定位时, 就算元素被偏移了,但是他仍然占据着它没偏移前的空间。
#box_relative {
  position: relative;
  left: 30px;
  top: 20px;
}

效果如下:

1643201770733.png

绝对定位

  • 属性值:absolute
  • 绝对定位使元素的位置与文档流无关,因此不占据空间。 生成绝对定位的元素,相对于 static 定位以外的第一个父元素(body)进行定位。
#box_absolute {
  position: absolute;
  left: 30px;
  top: 20px;
}

效果如下:

1643201906408.png

居中对齐

水平居中对齐

实现方式:

  1. text-align: center;
  2. margin: auto;,注意margin需要有width才能生效
  3. position: absolute;+left: 50%;+margin-left
  4. display: flex;+justify-content: 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>
    .container {
      border: 1px solid #ccc;
      margin: 10px;
      padding: 10px;
      width: 500px;
    }
    .item {
      background-color: #eee;
    }
    .div1 .item {
      text-align: center;
    }
    .div2 .item {
      width: 200px;
      margin: auto;
      text-align: center;
    }
    .div3 {
      position: relative;
      height: 20px;
    }
    .div3 .item {
      width: 200px;
      position: absolute;
      left: 50%;
      margin-left: -100px;
      text-align: center;
    }
    .div4 {
      display: flex;
      justify-content: center;
    }
  </style>
</head>
<body>
  <!-- 1 -->
  <div class="container div1">
    <div class="item">this is a text</div>
  </div>
  <!-- 2 -->
  <div class="container div2">
    <div class="item">this is a block text</div>
  </div>
  <!-- 3 -->
  <div class="container div3">
    <div class="item">this is a absolute text</div>
  </div>
  <!-- 4 -->
  <div class="container div4">
    <div class="item">this is a absolute text</div>
  </div>
</body>
</html>

实现效果:

1643204327167.png

垂直居中对齐

实现方式:

  1. line-height和元素高度一样
  2. position: absolute;+top: 50%;+margin-top
  3. position: absolute;+top: 50%;+transform: translate(-50%, -50%);
  4. display: flex;+align-items: center;
  5. position: absolute;+top、left、bottom、right为0+margin: auto;

具体实现:

<!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>
    .container {
      border: 1px solid #ccc;
      margin: 10px;
      padding: 10px;
      width: 500px;
      height: 80px;
    }
    .item {
      background-color: #eee;
    }
    .div1 .item {
      text-align: center;
      line-height: 80px;
    }
    .div2 {
      position: relative;
    }
    .div2 .item {
      width: 200px;
      height: 20px;
      text-align: center;
      position: absolute;
      top: 50%;
      margin-top: -10px;
      left: 50%;
      margin-left: -100px;
    }
    .div3 {
      position: relative;
    }
    .div3 .item {
      width: 200px;
      position: absolute;
      text-align: center;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
    .div4 {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .div5 {
      position: relative;
    }
    .div5 .item {
      width: 200px;
      height: 20px;
      text-align: center;
      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
      margin: auto;
    }
  </style>
</head>
<body>
  <!-- 1 -->
  <div class="container div1">
    <div class="item">this is a text</div>
  </div>
  <!-- 2 -->
  <div class="container div2">
    <div class="item">this is a absolute text</div>
  </div>
  <!-- 3 -->
  <div class="container div3">
    <div class="item">this is a absolute text</div>
  </div>
  <!-- 4 -->
  <div class="container div4">
    <div class="item">this is a absolute text</div>
  </div>
  <!-- 5 -->
  <div class="container div5">
    <div class="item">this is a absolute text</div>
  </div>
</body>
</html>

1643204614953.png