欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CSS之“绝对定位”的盒子使用margin:0px auto;不能实现水平居中的解决方案

程序员文章站 2023-12-25 20:28:15
...

在盒子实现水平居中的布局中,我们经常直接使用margin:0px auto;来实现居中,在很多时候的确可以一句这样的代码就实现了,但在绝对定位的盒子中,这是不起作用的。

1.根据代码测试是否真如上面所说:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>水平居中</title>
    <style>
      * {
        margin: 0px;
        padding: 0px;
      }
      .container {
        position: absolute;
        width: 200px;
        height: 200px;
        background-color: pink;
        margin: 0px auto;
      }
    </style>
  </head>
  <body>
    <div class="container"></div>
  </body>
</html>

效果图:
CSS之“绝对定位”的盒子使用margin:0px auto;不能实现水平居中的解决方案

2.那我再来试试相对定位是否可行:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>水平居中</title>
    <style>
      * {
        margin: 0px;
        padding: 0px;
      }
      .container {
        position: relative;
        width: 200px;
        height: 200px;
        background-color: pink;
        margin: 0px auto;
      }
    </style>
  </head>
  <body>
    <div class="container"></div>
  </body>
</html>

CSS之“绝对定位”的盒子使用margin:0px auto;不能实现水平居中的解决方案
嗯,没错,只有在绝对定位时,我们使用margin:0px auto;才不能起作用。

3.既然绝对定位不能使用margin:0px auto;实现水平居中,那我们使用什么方法呢?

  • left:50%: 让绝对定位盒子向右移动父元素(必需带定位)宽度的一半
  • margin-left: 让绝对定位盒子再向左移动自身宽度一半

没错,我们用这两句代码代替margin:0px auto;即可实现绝对定位盒子水平居中。

第一步:left:50%;

CSS之“绝对定位”的盒子使用margin:0px auto;不能实现水平居中的解决方案
第二步:margin-left:-100px;

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>水平居中</title>
    <style>
      * {
        margin: 0px;
        padding: 0px;
      }
      .container {
        position: absolute;
        width: 200px;
        height: 200px;
        background-color: pink;
        left: 50%;
        margin-left: -100px;
      }
    </style>
  </head>
  <body>
    <div class="container"></div>
  </body>
</html>

实现了居中。
CSS之“绝对定位”的盒子使用margin:0px auto;不能实现水平居中的解决方案

为什么我那里使用的是margin-left:-100px呢?负号是往相反方向移动,而100px是因为我设置的盒子宽度是200px,取一半。

其实第二句代码可以用其它代码代替:transform:translate(-50%);它的优点就是不用计算自身宽度的一半。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>水平居中</title>
    <style>
      * {
        margin: 0px;
        padding: 0px;
      }
      .container {
        position: absolute;
        width: 200px;
        height: 200px;
        background-color: pink;
        left: 50%;
        transform: translate(-50%, 0);
      }
    </style>
  </head>
  <body>
    <div class="container"></div>
  </body>
</html>

效果:
CSS之“绝对定位”的盒子使用margin:0px auto;不能实现水平居中的解决方案

小结:我们这里两种方法实现水平居中都是利用了同样的思想

先将盒子向右移动带有定位的父元素宽度的一半,再往回移动自身宽度的一半

相关标签: 布局效果

上一篇:

下一篇: