如何将 Bootstrap 模态垂直居中对齐
答案:使用 CSS margin-top
属性
默认情况下,Bootstrap 模态窗口与页面顶部对齐,并留有一些边距。 但是您可以使用一个简单的 JavaScript 技巧将其垂直对齐在页面中间,如下面的示例中所述。 此解决方案将动态调整模态框的对齐方式,并始终将其保持在页面的中心,即使用户调整浏览器窗口的大小也是如此。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Vertical Center Alignment of Bootstrap Modal Dialog</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<script src="js/jquery-3.5.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script>
$(document).ready(function(){
function alignModal(){
var modalDialog = $(this).find(".modal-dialog");
// 在模态框上应用上边距以使其垂直居中对齐
modalDialog.css("margin-top", Math.max(0, ($(window).height() - modalDialog.height()) / 2));
}
// 显示时对齐模态
$(".modal").on("shown.bs.modal", alignModal);
// 用户调整窗口大小时对齐模式
$(window).on("resize", function(){
$(".modal:visible").each(alignModal);
});
});
</script>
</head>
<body>
<div class="m-4">
<!-- 按钮 HTML(触发模态) -->
<a href="#myModal" class="btn btn-primary btn-lg" data-toggle="modal">Launch Demo Modal</a>
<!-- 模态 HTML -->
<div id="myModal" class="modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Confirmation</h5>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<p>Do you want to save changes you made to document before closing?</p>
<p class="text-warning"><small>If you don't save, your changes will be lost.</small></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
当使用 shown.bs.modal
事件向用户显示模态时,上面示例中的函数 alignModal()
通过简单地在 .modal-dialog
元素上应用上边距来对齐 Bootstrap 模态。 margin-top
属性的值是浏览器窗口的高度除以 2 减去模态对话框的高度。
在应用上边距之前,我们已经将获得的值与 0 一起传递给 JavaScript Math.max()
函数,该函数返回给定数字中的最大数字。
这是必要的,因为如果用户调整浏览器窗口的大小使得浏览器窗口的高度低于模态高度,则边距计算的结果为负,在这种情况下 Math.max()
函数返回 0 并阻止应用 负边距。 每次调整浏览器窗口大小时,我们都会调用 alignModal()
函数,以便模态框始终位于页面中心。
FAQ 相关问题解答
以下是与此主题相关的更多常见问题解答:
Advertisements