Demo
Modal Heading
Lorem ipsum dolor sit amet consectetur adipisicing elit. Aspernatur itaque necessitatibus modi quod est quidem sequi. Debitis earum voluptatem eum cupiditate eveniet, vitae expedita enim rem temporibus? Libero, ullam impedit?
xxxxxxxxxx
1
<button class="button modal-button" type="button">Open Modal</button>
2
<div class="modal">
3
<div class="modal__inner">
4
<button class="modal__close" aria-label="Close modal"></button>
5
<h2 class="modal__heading">Modal Heading</h2>
6
<div class="modal__body">Lorem ipsum dolor sit amet consectetur adipisicing elit. Aspernatur itaque necessitatibus modi quod est quidem sequi. Debitis earum voluptatem eum cupiditate eveniet, vitae expedita enim rem temporibus? Libero, ullam impedit?</div>
7
</div>
8
</div>
xxxxxxxxxx
1
/* ==================================================================
2
BASE MODAL
3
================================================================== */
4
5
.modal {
6
align-items: center;
7
background: var(--overlay-color);
8
block-size: 100vh;
9
display: none;
10
inline-size: 100vw;
11
inset: 0;
12
justify-content: center;
13
position: fixed;
14
z-index: 10;
15
16
&--visible {
17
display: flex !important;
18
}
19
20
&__heading {
21
margin-block-end: 0.5rem;
22
}
23
24
&__body {
25
font-size: 0.95rem;
26
line-height: 1.5;
27
text-align: start;
28
}
29
30
&__inner {
31
margin: 0 auto;
32
max-block-size: 90vh;
33
max-inline-size: 80vw;
34
padding: 2rem 1rem 1rem 1rem;
35
position: relative;
36
}
37
38
&__close {
39
@include close-icon;
40
background: transparent !important;
41
border: 0;
42
cursor: pointer;
43
display: block;
44
inset-block-start: 0.5rem;
45
inset-inline-end: 0.5rem;
46
position: absolute!important;
47
}
48
}
49
50
@media (min-width: $lg) {
51
.modal {
52
&__inner {
53
max-inline-size: 40.625rem;
54
padding: 2rem;
55
}
56
57
&__body {
58
font-size: 1rem;
59
}
60
}
61
}
62
63
.hide-overflow {
64
// to be used on the body level of the document to prevent scrolling while modal is visible
65
overflow: hidden;
66
}
67
68
/* ==================================================================
69
MODAL THEME OVERRIDES
70
================================================================== */
71
72
.modal {
73
&__inner {
74
border-radius: var(--border-radius);
75
box-shadow: 0px 3px 6px #00000029;
76
background: #f4f1ed;
77
}
78
}
xxxxxxxxxx
1
// Modal component
2
const modal = document.querySelector('.modal');
3
4
if (modal) {
5
function toggleModal() {
6
const modalButton = document.querySelector('.modal-button');
7
const modalClose = document.querySelector('.modal__close');
8
const body = document.querySelector('body');
9
10
modalButton.addEventListener('click', function() {
11
modal.classList.toggle('modal--visible');
12
body.classList.toggle('hide-overflow');
13
});
14
15
modalClose.addEventListener('click', function() {
16
modal.classList.remove('modal--visible');
17
});
18
} toggleModal();
19
}
Anatomy
- Modal
- Modal Inner
- Modal Heading
- Modal Body
- Modal Close
