framework/less/common/Modal.less

209 lines
3.5 KiB
Plaintext

// ------------------------------------
// Modals
// Kill the scroll on the body
.modal-open {
overflow: hidden;
}
// Modal background
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: var(--zindex-modal-background);
background-color: var(--overlay-bg);
opacity: 0;
transition: opacity 0.2s;
&.in {
opacity: 1;
}
}
// Container that the modal scrolls within
.ModalManager {
display: none;
overflow: hidden;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: var(--zindex-modal);
-webkit-overflow-scrolling: touch;
// When fading in the modal, animate it to slide down
.Modal {
transform: scale(0.9);
transition: transform 0.2s ease-out;
}
&.in .Modal {
transform: scale(1);
}
}
.modal-open .ModalManager {
overflow-x: hidden;
overflow-y: auto;
}
// Shell div to position the modal with bottom padding
.Modal {
position: relative;
width: auto;
margin: 10px;
max-width: 600px;
}
// Actual modal
.Modal-content {
position: relative;
background-color: var(--body-bg);
background-clip: padding-box;
margin: 0 auto;
overflow: hidden;
}
// Measure scrollbar width for padding body during modal show/hide
.modal-scrollbar-measure {
position: absolute;
top: -9999px;
width: 50px;
height: 50px;
overflow: scroll;
}
.Modal-alert {
text-align: center;
.Alert {
border-radius: 0;
}
.Alert-controls {
margin: 0;
display: block;
}
}
.Modal-body {
background-color: var(--control-bg);
padding: 25px 30px;
color: var(--control-color);
.FormControl {
background-color: var(--body-bg);
color: var(--text-color);
}
.Form--centered {
.helpText {
font-size: 14px;
line-height: 1.5em;
margin-bottom: 25px;
text-align: left;
}
}
.off.Checkbox--switch .Checkbox-display {
background: var(--muted-more-color);
}
}
.Modal-footer {
border: 0;
padding: 20px;
text-align: center;
color: var(--muted-color);
}
.Modal--inverted {
.Modal-header {
background-color: var(--control-bg);
color: var(--control-color);
}
.Modal-body {
background-color: transparent;
color: unset;
}
}
@media @phone {
.ModalManager.fade {
opacity: 1;
}
.ModalManager {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
overflow: auto;
transition: transform 0.2s ease-out;
transform: translate(0, 100vh);
&.in {
-webkit-transform: none !important;
transform: none !important;
}
&:before {
content: " ";
.header-background();
position: absolute;
}
}
.Modal {
max-width: 100%;
margin: 0;
-webkit-transform: none !important;
transform: none !important;
}
.Modal-content {
border-radius: 0;
border: 0;
min-height: 100vh;
padding-top: var(--header-height-phone);
box-shadow: none;
}
.Modal-header {
padding: 0;
border: 0;
min-height: 0;
}
}
@media @tablet-up {
.Modal {
margin: 120px auto;
}
.Modal-close {
position: absolute;
right: 10px;
top: 10px;
z-index: 1;
}
.Modal-content {
border: 0;
border-radius: var(--border-radius);
box-shadow: 0 7px 15px var(--shadow-color);
}
.Modal--small {
max-width: 375px;
}
.Modal--large {
max-width: 800px;
}
.Modal-header {
text-align: center;
border: 0;
padding: 25px;
& h3 {
font-size: 20px;
font-weight: normal;
margin: 0;
}
}
}