要让弹框水平居中和垂直居中,可以使用如下方法:
方法一(使用 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>
运行效果:
方法二(使用绝对定位)
使用绝对定位,将弹框的左上角定位于页面正中心,需要在其父元素上设置 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>
运行结果:
改变transform: translate的属性值为(50%, 50%)和两个图片块的位置(放到modal-container外面)
方法三(使用位移方式)
可以使用位移的方式实现弹框水平居中和垂直居中,但是需要明确弹框的宽度和高度,并且需要在样式中对它们进行硬编码。因此,如果弹框内容发生变化,可能需要重新计算样式。
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>
运行结果:
在这个例子中,我们将 .modal
元素的 position
属性设置为 fixed
,然后使用 top: 50%;
和 left: 50%;
将其定位在页面的水平和垂直中心。由于 .modal
元素的宽度和高度是硬编码的,我们可以使用 margin-top
和 margin-left
计算出相应的值,以将其居中。在这个例子中,我们将 .modal
元素的垂直位移设置为其高度的一半,即 -100px
,将其水平位移设置为其宽度的一半,即 -150px
。
虽然位移的方式可以实现弹框水平居中和垂直居中,但是需要对样式进行硬编码,不够灵活,不推荐使用。
小结
以上三种方法都可以实现弹框水平居中和垂直居中,可以根据具体情况选择适合自己的方法。