如何让弹框水平垂直居中?

要让弹框水平居中和垂直居中,可以使用如下方法:

方法一(使用 flex 布局)

使用 flex 布局,将弹框的父元素设置为 display: flex,并在其子元素上使用 margin: auto 居中即可。

HTML 结构如下:

<div class="modal-container">
  <div class="modal">
    <!-- 弹框内容 -->
  </div>
</div>

CSS 样式如下:

.modal-container {
  display: flex;
  justify-content: center;
  align-items: center;
  /* 宽高根据需求设置 */
  width: 100%;
  height: 100%;
}

.modal {
  margin: auto;
  /* 宽高根据需求设置 */
  width: 300px;
  height: 200px;
}

测试用例:

<!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>
      /*方法一*/
      .modal-container {
        display: flex;
        justify-content: center;
        align-items: center;
        /* 宽高根据需求设置 */
        width: 100%;
        height: 100%;
      }

      .modal {
        margin: auto;
        /* 宽高根据需求设置 */
        width: 300px;
        height: 200px;
      }
    </style>
  </head>
  <body>
    <!-- 
      方法一:使用 flex 布局,将弹框的父元素设置为 display: flex,并在其子元素上使用 margin: auto 居中即可。
    -->
    <div>
      <img
        src="..\语录.assets\image-20230227094555439.png"
        alt=""
        style="width: 400px"
      />
    </div>
    <div class="modal-container">
      <div class="modal">
        <!-- 弹框内容 -->
        <img
          src="..\语录.assets\image-20230227094555439.png"
          alt=""
          style="width: 299px"
        />
      </div>
    </div>
    <div>
      <img
        src="..\语录.assets\image-20230227094555439.png"
        alt=""
        style="width: 400px"
      />
    </div>
  </body>
</html>

运行效果:

image.png

方法二(使用绝对定位)

使用绝对定位,将弹框的左上角定位于页面正中心,需要在其父元素上设置 position: relative,在弹框元素上设置 position: absolute 并使用 top: 50%; left: 50%; transform: translate(-50%, -50%); 居中。

HTML 结构如下:

<div class="modal-container">
  <div class="modal">
    <!-- 弹框内容 -->
  </div>
</div>

CSS 样式如下:

.modal-container {
  position: relative;
  /* 宽高根据需求设置 */
  width: 100%;
  height: 100%;
}

.modal {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  /* 宽高根据需求设置 */
  width: 300px;
  height: 200px;
}

测试用例:

<!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>
      /* 方法二 */
      .modal-container {
        position: relative;
        /* 宽高根据需求设置 */
        width: 100%;
        height: 100%;
        background-color: pink;
      }

      .modal {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        /* 宽高根据需求设置 */
        width: 300px;
        height: 200px;
        background-color: skyblue;
      }
    </style>
  </head>
  <body>
    <div class="modal-container">
      whatsup modal-container
      <div>
        <img
          src="..\语录.assets\image-20230227094555439.png"
          alt=""
          style="width: 400px"
        />
      </div>
      <div class="modal">
        <!-- 弹框内容 -->
        <img
          src="..\语录.assets\image-20230227094555439.png"
          alt=""
          style="width: 300px; padding: 33px 0"
        />
      </div>
      <div>
        <img
          src="..\语录.assets\image-20230227094555439.png"
          alt=""
          style="width: 400px"
        />
      </div>
      whatsup modal-container
    </div>
  </body>
</html>

运行结果:

image.png


改变transform: translate的属性值为(50%, 50%)和两个图片块的位置(放到modal-container外面)

image.png

方法三(使用位移方式)

可以使用位移的方式实现弹框水平居中和垂直居中,但是需要明确弹框的宽度和高度,并且需要在样式中对它们进行硬编码。因此,如果弹框内容发生变化,可能需要重新计算样式。

HTML 结构如下:

<div class="modal">
  <!-- 弹框内容 -->
</div>

CSS 样式如下:

.modal {
  position: fixed;
  top: 50%;
  left: 50%;
  /* 硬编码弹框的宽度和高度 */
  width: 300px;
  height: 200px;
  /* 计算出 margin-top 和 margin-left 的值 */
  margin-top: -100px;
  margin-left: -150px;
}

测试用例:

<!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>
      /*方法三*/
      .modal-container {
        background-color: pink;
      }

      .modal {
        position: fixed;
        top: 50%;
        left: 50%;
        /* 硬编码弹框的宽度和高度 */
        width: 300px;
        height: 200px;
        /* 计算出 margin-top 和 margin-left 的值 */
        margin-top: -130px;
        margin-left: -150px;
        background-color: skyblue;
      }
    </style>
  </head>
  <body>
    <div class="modal-container">
      whatsup modal-container
      <div>
        <img
          src="..\语录.assets\image-20230227094555439.png"
          alt=""
          style="width: 400px"
        />
      </div>
      <div class="modal">
        <!-- 弹框内容 -->
        <img
          src="..\语录.assets\image-20230227094555439.png"
          alt=""
          style="width: 300px; padding: 33px 0"
        />
      </div>
      <div>
        <img
          src="..\语录.assets\image-20230227094555439.png"
          alt=""
          style="width: 400px"
        />
      </div>
      whatsup modal-container
    </div>
  </body>
</html>

运行结果:

image.png

在这个例子中,我们将 .modal 元素的 position 属性设置为 fixed,然后使用 top: 50%;left: 50%; 将其定位在页面的水平和垂直中心。由于 .modal 元素的宽度和高度是硬编码的,我们可以使用 margin-topmargin-left 计算出相应的值,以将其居中。在这个例子中,我们将 .modal 元素的垂直位移设置为其高度的一半,即 -100px,将其水平位移设置为其宽度的一半,即 -150px

虽然位移的方式可以实现弹框水平居中和垂直居中,但是需要对样式进行硬编码,不够灵活,不推荐使用

小结

以上三种方法都可以实现弹框水平居中和垂直居中,可以根据具体情况选择适合自己的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值