Сразу предупреждаю: способ хорош в случае, если высота модального окна < высоты экрана. Если высота модального окна > высоты экрана и сам контент страницы порождает скроллинг, то может вылезти 2 скроллинга. Этот момент можно пофиксить выставив overflow-y: hidden; у body в момент отображения модального окна.
Взято с хабра из комментов
Принцип такой:
- создаем заголовочный блок и ставим ему следующие стили:
.modal_overlay{
width: 100%;
height: 100%;
position: fixed;
text-align: center;
background: rgba(0, 0, 0, 0.8);
top: 0;
left: 0;
z-index: 9;
justify-content: center;
align-items: center;
display: flex;
overflow: auto;
}
- в этом блоке будет находится оверлей и устанавливаются правила позиционирования дочерних элементов — в данном случае самого модального окна
- у самого модального окна ставим:
.modal{
z-index: 10;
display: block;
background: #fff;
min-width: 500px;
min-height: 300px;
}
- По вёрстке получается следующее:
<div class="modal_overlay">
<div class="modal">content</div>
</div>
Рабочий пример можно посмотреть здесь: https://jsfiddle.net/ggfufa2a/1/