How to align Bootstrap modal vertically center
Topic: Bootstrap / SassPrev|Next
Answer: Use the CSS margin-top
Property
By default, Bootstrap modal window is aligned to the top of page with some margin. But you can align it in the middle of the page vertically using a simple JavaScript trick as described in the example below. This solution will dynamically adjust the alignment of the modal and always keep it in the center of the page even if the user resizes the browser window.
<!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");
// Applying the top margin on modal to align it vertically center
modalDialog.css("margin-top", Math.max(0, ($(window).height() - modalDialog.height()) / 2));
}
// Align modal when it is displayed
$(".modal").on("shown.bs.modal", alignModal);
// Align modal when user resize the window
$(window).on("resize", function(){
$(".modal:visible").each(alignModal);
});
});
</script>
</head>
<body>
<div class="m-4">
<!-- Button HTML (to Trigger Modal) -->
<a href="#myModal" class="btn btn-primary btn-lg" data-toggle="modal">Launch Demo Modal</a>
<!-- Modal 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>
The function alignModal()
in the example above align the Bootstrap modal by simply applying the top margin on the .modal-dialog
element when modal is shown to the user using the shown.bs.modal
event. The value of the margin-top
property is obtained by subtracting the height of modal dialog from the height of the browser window divided by 2.
Before applying the top margin we've passed the obtained value along with the 0 to JavaScript Math.max()
function that returns the largest number from given numbers.
This is necessary because if a user resize the browser window in such a way that the height of the browser window becomes lower than the modal height then the result of the margin calculation becomes negative, in such situation Math.max()
function return 0 and prevents from applying the negative margin. We're also calling the alignModal()
function every time when browser window is resized so that modal will always be in center of the page.
Related FAQ
Here are some more FAQ related to this topic: