问题
I have created a modal wherein i have made the body background to be blurred when a modal window is opened , Its working perfectly with a set of html codes but having issue with other html codes ( sounds quite weird to me when the css and JavaScript used are exactly same )
Issue is that when the modal window is opened (in non working html code ), both the modal window and background together goes blur and stays forever like that ...in the other HTML code code its working perfectly. Only the background goes blur once modal is opened and becomes normal when window is closed - all good there
So firstly i am attaching the codes working well together - Html , css and JavaScript
At bottom of post i will post link to a different html code in which this functionality doesn't seem to work well for some unknown reason ( So that anyone can easily compare and debug the issue )
JavaScript
let open_modals = [];
$(function() {
// Get the button that opens the modal
// read all the control of any type which has class as modal-button
var btn = document.querySelectorAll(".modal-button");
// All page modals
var modals = document.querySelectorAll('.modal');
// Get the <span> element that closes the modal
var spans = document.getElementsByClassName("close");
// When the user clicks the button, open the modal
for (var i = 0; i < btn.length; i++) {
btn[i].onclick = function(e) {
e.preventDefault();
modal = document.querySelector(e.target.getAttribute("href"));
modal.style.display = "block";
open_modals.push(modal.id);
document.body.style.overflow = "hidden";
if (this.parentElement.nodeName == 'BODY') {
document.body.classList.add("open");
} else {
this.parentElement.parentElement.parentElement.classList.add("open");
}
}
}
function checkRenableScroll() {
if (!open_modals.length) {
document.body.style.overflow = "scroll";
}
}
// When the user clicks on <span> (x), close the modal
for (var i = 0; i < spans.length; i++) {
spans[i].onclick = function() {
for (var index in modals) {
if (typeof modals[index].style !== 'undefined' && modals[index].id == open_modals[open_modals.length - 1]) {
modals[index].classList.add("modal-content-active");
var item = modals[index];
if (index > 0) {
spans[index - 1].parentElement.parentElement.classList.remove("open");
} else {
document.body.classList.remove("open");
}
setTimeout(function() {
item.classList.remove("modal-content-active");
item.style.display = "none";
open_modals.pop();
checkRenableScroll();
}, 400);
}
}
}
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target.classList.contains('modal')) {
for (var index in modals) {
if (typeof modals[index].style !== 'undefined' && modals[index].id == open_modals[open_modals.length - 1]) {
modals[index].classList.add("modal-content-active");
var item = modals[index];
if (index > 0) {
spans[index - 1].parentElement.parentElement.classList.remove("open");
} else {
document.body.classList.remove("open");
}
setTimeout(function() {
item.classList.remove("modal-content-active");
item.style.display = "none";
open_modals.pop();
checkRenableScroll();
}, 400);
}
}
}
}
})
CSS
@import url('https://fonts.googleapis.com/css?family=Quicksand&display=swap');
/* The Modal (background) */
.modal {
box-sizing: border-box;
font-family: 'Quicksand', sans-serif;
display: none;
/* Hidden by default */
position: fixed;
/* Stay in place */
z-index: 1;
/* Sit on top */
padding-top: 3.125rem;
/* Location of the box */
left: 0;
top: 0;
width: 100%;
/* Full width */
height: 100%;
/* Full height */
overflow: auto;
/* Enable scroll if needed */
background-color: rgb(0, 0, 0);
/* Fallback color */
background-color: rgba(0, 0, 0, 0.4);
/* Black w/ opacity */
}
/* Modal Content */
.modal-content {
color: white;
position: relative;
background-color: #171B20;
margin: auto;
padding: 0;
border: 0.0625rem solid #888;
width: 90%;
box-shadow: 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.2), 0 0.375rem 1.25rem 0 rgba(0, 0, 0, 0.19);
-webkit-animation-name: animatetop;
-webkit-animation-duration: 0.4s;
animation-name: animatetop;
animation-duration: 0.4s;
}
/* Add Animation */
@-webkit-keyframes animatetop {
from {
top: -300px;
opacity: 0;
}
to {
top: 0;
opacity: 1;
}
}
@keyframes animatetop {
from {
top: -300px;
opacity: 0;
}
to {
top: 0;
opacity: 1;
}
}
@-webkit-keyframes animateBottom {
from {
top: 0px;
opacity: 1;
}
to {
top: 500px;
opacity: 0;
}
}
@keyframes animateBottom {
from {
top: 0px;
opacity: 1;
}
to {
top: 300px;
opacity: 0;
}
}
.modal-content-active {
-webkit-animation-name: animateBottom;
-webkit-animation-duration: 0.4s;
animation-name: animateBottom;
animation-duration: 0.4s;
}
/* The Close Button */
.close {
color: #F0B823;
float: right;
font-size: 2.6rem;
font-weight: bold;
position: absolute;
right: 0.25rem;
top: -0.25rem;
}
.close:hover,
.close:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
}
.modal-header {
padding: 0.125rem 1rem;
background-color: #171B20;
color: #F0B823;
}
.modal-body {}
.modal-button {
font-family: 'Quicksand', sans-serif;
background-color: #171B20;
border: none;
color: white;
padding: 0.248em 0.496em;
text-align: left;
text-decoration: none;
display: inline-block;
font-size: 1.750rem;
margin: 0.124em 0.062em;
-webkit-transition-duration: 0;
/* Safari */
transition-duration: 0;
cursor: pointer;
width: auto;
}
.modal-button:hover {
background-color: #171B20;
color: #F0B823;
}
.pic {
margin: auto;
display: block;
height: auto;
width: 50vh;
}
.headertext {
font-family: 'Quicksand', sans-serif;
display: block;
text-align: center;
font-size: 2rem;
}
.bodytext {
font-size: 1.125rem;
font-family: 'Quicksand', sans-serif;
display: block;
padding: 0.625em 0.9375em;
line-height: 2rem;
}
p {
display: block;
margin: 0;
padding: 0;
}
.open > *{
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
}
.modal {
-webkit-filter: blur(0px);
-moz-filter: blur(0px);
-o-filter: blur(0px);
-ms-filter: blur(0px);
filter: blur(0px);
}
.modal .open{
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);
}
Working HTML Code
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- Trigger/Open The Modal -->
<a href="#myModal1" class="modal-button">• Click Me</a>
<!-- The Modal -->
<div id="myModal1" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Header
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
Your are viewing first modal<br>
<a href="#myModal2" class="modal-button">Click Here to Open Second Modal</a>
</div>
</div>
</div>
</div>
<!-- The Modal -->
<div id="myModal2" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Header
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
Your are currently viewing second modal
</div>
</div>
</div>
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque arcu est, lacinia ut posuere ut, lacinia quis ipsum. Quisque eleifend quam velit, nec accumsan ligula maximus eget. Praesent diam lorem, auctor quis justo sit amet, pretium molestie odio. Proin at est sed augue vestibulum malesuada at non lorem. Donec sit amet nisi dapibus, venenatis enim id, tristique enim. Maecenas vel sagittis arcu. Praesent et cursus tellus. Donec rhoncus blandit arcu, eu rhoncus dui semper vel. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque eu nulla luctus, consectetur leo id, ornare urna.
Integer id molestie libero, in pulvinar diam. Donec non massa metus. Integer ut velit nec turpis fermentum iaculis et sagittis dui. Vestibulum vel dignissim lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec ac luctus lacus, ac ultrices arcu. Curabitur dignissim arcu mauris, et eleifend lacus imperdiet nec.
Nullam eleifend massa metus, vitae sagittis erat egestas vel. Maecenas fringilla, risus ut maximus mattis, nibh lacus maximus quam, at elementum erat lectus ac urna. Aenean egestas eleifend neque, et egestas justo condimentum a. Fusce in dapibus ligula. Aliquam dui felis, vestibulum quis est a, facilisis auctor est. Vestibulum ac elit eu mauris gravida aliquam sed ut orci. Ut tincidunt lacus non gravida pharetra.
</p>
Now just try replacing above html code with this The blur functionality acts very weirdly
Hopefully someone can identify the cause of this issue
JSBIN with working html code here
JSBIN with non working html code here
Note that the JavaScript and css codes are exactly same , only difference in is html
回答1:
Your code applies the blur effect on all the direct children of the elements that has the class .open (.open > *).
However, the .modal has a special rule that will reset it to blur(0px), overriding the .open > * rule.
For it to work, you must have this .modal element be a direct child of the element that will receive the .open class.
It's what you have in your first snippet, but not in your second.
Since in the second it is not a direct child of this element, the .modal's parent will receive the filter. At this moment, it's already too late to remove it from your .modal element.
.open > * {
filter: blur(5px);
}
.modal {
filter: none;
}
<div class="open">
<div>
A direct Child, not .modal (and thus blurred).
<p> Some inner content, still not .modal </p>
</div>
<div>
A direct Child, not .modal (and thus blurred).
<p class="modal"> Some inner content. This time .modal but blurred by its parent anyway...</p>
</div>
<div class="modal">
A direct Child, .modal (and thus not blurred).
<p class="modal"> Some inner content. not blurred either</p>
</div>
</div>
So you have to keep this document structure where your .modal elements will be direct children of the .open element and to set the .open class on a common parent (e.g <body>).
One other change to apply is on the line this.parentElement.nodeName == 'BODY' since this is the <a> and that this <a> is now a child of <section>, you need to either change it to this.parentElement.nodeName == 'SECTION' or this.parentElement.nodeName == 'BODY':
let open_modals = [];
$(function() {
// Get the button that opens the modal
// read all the control of any type which has class as modal-button
var btn = document.querySelectorAll(".modal-button");
// All page modals
var modals = document.querySelectorAll('.modal');
// Get the <span> element that closes the modal
var spans = document.getElementsByClassName("close");
// When the user clicks the button, open the modal
for (var i = 0; i < btn.length; i++) {
btn[i].onclick = function(e) {
e.preventDefault();
modal = document.querySelector(e.target.getAttribute("href"));
modal.style.display = "block";
open_modals.push(modal.id);
document.body.style.overflow = "hidden";
if (this.parentElement.parentElement.nodeName == 'BODY') {
document.body.classList.add("open");
} else {
this.parentElement.parentElement.parentElement.classList.add("open");
}
}
}
function checkRenableScroll() {
if (!open_modals.length) {
document.body.style.overflow = "scroll";
}
}
// When the user clicks on <span> (x), close the modal
for (var i = 0; i < spans.length; i++) {
spans[i].onclick = function() {
for (var index in modals) {
if (typeof modals[index].style !== 'undefined' && modals[index].id == open_modals[open_modals.length - 1]) {
modals[index].classList.add("modal-content-active");
var item = modals[index];
if (index > 0) {
spans[index - 1].closest('.open').classList.remove("open");
} else {
document.body.classList.remove("open");
}
setTimeout(function() {
item.classList.remove("modal-content-active");
item.style.display = "none";
open_modals.pop();
checkRenableScroll();
}, 400);
}
}
}
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target.classList.contains('modal')) {
for (var index in modals) {
if (typeof modals[index].style !== 'undefined' && modals[index].id == open_modals[open_modals.length - 1]) {
modals[index].classList.add("modal-content-active");
var item = modals[index];
if (index > 0) {
spans[index - 1].closest('.open').classList.remove("open");
} else {
document.body.classList.remove("open");
}
setTimeout(function() {
item.classList.remove("modal-content-active");
item.style.display = "none";
open_modals.pop();
checkRenableScroll();
}, 400);
}
}
}
}
})
@import url('https://fonts.googleapis.com/css?family=Quicksand&display=swap');
/* The Modal (background) */
.modal {
box-sizing: border-box;
font-family: 'Quicksand', sans-serif;
display: none;
/* Hidden by default */
position: fixed;
/* Stay in place */
z-index: 1;
/* Sit on top */
padding-top: 3.125rem;
/* Location of the box */
left: 0;
top: 0;
width: 100%;
/* Full width */
height: 100%;
/* Full height */
overflow: auto;
/* Enable scroll if needed */
background-color: rgb(0, 0, 0);
/* Fallback color */
background-color: rgba(0, 0, 0, 0.4);
/* Black w/ opacity */
}
/* Modal Content */
.modal-content {
color: white;
position: relative;
background-color: #171B20;
margin: auto;
padding: 0;
border: 0.0625rem solid #888;
width: 90%;
box-shadow: 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.2), 0 0.375rem 1.25rem 0 rgba(0, 0, 0, 0.19);
-webkit-animation-name: animatetop;
-webkit-animation-duration: 0.4s;
animation-name: animatetop;
animation-duration: 0.4s;
}
/* Add Animation */
@-webkit-keyframes animatetop {
from {
top: -300px;
opacity: 0;
}
to {
top: 0;
opacity: 1;
}
}
@keyframes animatetop {
from {
top: -300px;
opacity: 0;
}
to {
top: 0;
opacity: 1;
}
}
@-webkit-keyframes animateBottom {
from {
top: 0px;
opacity: 1;
}
to {
top: 500px;
opacity: 0;
}
}
@keyframes animateBottom {
from {
top: 0px;
opacity: 1;
}
to {
top: 300px;
opacity: 0;
}
}
.modal-content-active {
-webkit-animation-name: animateBottom;
-webkit-animation-duration: 0.4s;
animation-name: animateBottom;
animation-duration: 0.4s;
}
/* The Close Button */
.close {
color: #F0B823;
float: right;
font-size: 2.6rem;
font-weight: bold;
position: absolute;
right: 0.25rem;
top: -0.25rem;
}
.close:hover,
.close:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
}
.modal-header {
padding: 0.125rem 1rem;
background-color: #171B20;
color: #F0B823;
}
.modal-body {}
.modal-button {
font-family: 'Quicksand', sans-serif;
background-color: #171B20;
border: none;
color: white;
padding: 0.248em 0.496em;
text-align: left;
text-decoration: none;
display: inline-block;
font-size: 1.750rem;
margin: 0.124em 0.062em;
-webkit-transition-duration: 0;
/* Safari */
transition-duration: 0;
cursor: pointer;
width: auto;
}
.modal-button:hover {
background-color: #171B20;
color: #F0B823;
}
.pic {
margin: auto;
display: block;
height: auto;
width: 50vh;
}
.headertext {
font-family: 'Quicksand', sans-serif;
display: block;
text-align: center;
font-size: 2rem;
}
.bodytext {
font-size: 1.125rem;
font-family: 'Quicksand', sans-serif;
display: block;
padding: 0.625em 0.9375em;
line-height: 2rem;
}
p {
display: block;
margin: 0;
padding: 0;
}
.open>* {
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
}
.modal {
-webkit-filter: blur(0px);
-moz-filter: blur(0px);
-o-filter: blur(0px);
-ms-filter: blur(0px);
filter: blur(0px);
}
.modal .open {
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section id="home">
<span class="header2 etpadding">Welcome To</span><br>
<br><span class="header1 tpadding">WTS<br>SHOP</span><br>
<span class="header2 mtpadding">This is a test for checking background blur</span><br>
<a href="#product" class="button" data-scroll>Check out our Product catalogue</a><br>
</section>
<section id="product">
<span class="header3">This is a test</span><br>
<!-- Trigger/Open The Modal -->
<a href="#myModal1" class="modal-button">• Modal Button 1</a>
<p>Modal Window 2 to be launched through body of Modal 1</p>
<!-- Trigger/Open The Modal -->
<a href="#myModal3" class="modal-button buttonalign">• Modal button 3</a><br>
<!-- Trigger/Open The Modal -->
<a href="#myModal4" class="modal-button buttonalign">• Modal Button 4</a><br>
</section>
<section id="payment">
<span class="header3">Supported Payment Methods</span>
</section>
<section id="disclaimer">
<span class="header3">Disclaimer</span>
</section>
<section id="contact">
<span class="header3">Contact Us</span>
</section>
<!-- The Modals must be direct children of <body> -->
<!-- The Modal -->
<div id="myModal1" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Window 1
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
currently viewing modal no.1
<a href="#myModal2" class="modal-button">Click to open modal window no.2</a>
</div>
</div>
</div>
</div>
<!-- The Modal -->
<div id="myModal2" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Window 2
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
You are currently viewing modal no.2
</div>
</div>
</div>
</div>
<!-- The Modal -->
<div id="myModal3" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Window 3
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
Currently viewing modal window 3
</div>
</div>
</div>
</div>
<!-- The Modal -->
<div id="myModal4" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Window 4
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
Currently viewing modal window 4
</div>
</div>
</div>
</div>
Note that I also changed some mess of .parentElement.parentElement.etc. with a simpler .closest(".open").
But if I may offer you a complete rewrite, since you are already using jQuery, here you go:
$(document)
.on('click', '.modal-button', openmodal)
.on('click', '.modal .close', closemodal)
.on('click', '.modal', closelastmodal);
function openmodal(evt) {
$(evt.target.getAttribute('href'))
.addClass('visible')
.parent().addClass('open');
}
function closemodal(evt) {
$(evt.target)
.closest('.modal.visible')
.removeClass('visible')
.parent()
.removeClass('open')
}
function closelastmodal(evt) {
if ($(evt.target).is('.modal')) {
closemodal(evt);
evt.stopImmediatePropagation();
}
}
@import url('https://fonts.googleapis.com/css?family=Quicksand&display=swap');
/* The Modal (background) */
.open>* {
filter: blur(5px);
}
.modal .open {
filter: blur(5px);
}
.modal {
box-sizing: border-box;
font-family: 'Quicksand', sans-serif;
display: none;
position: fixed;
z-index: 1;
padding-top: 3.125rem;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0, 0, 0);
background-color: rgba(0, 0, 0, 0.4);
filter: none;
/* no blur for me */
}
.modal.visible {
display: block;
}
/* Modal Content */
.modal-content {
color: white;
position: relative;
background-color: #171B20;
margin: auto;
padding: 0;
border: 0.0625rem solid #888;
width: 90%;
box-shadow: 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.2), 0 0.375rem 1.25rem 0 rgba(0, 0, 0, 0.19);
animation-name: animatetop;
animation-duration: 0.4s;
}
/* Add Animation */
@keyframes animatetop {
from {
top: -300px;
opacity: 0;
}
to {
top: 0;
opacity: 1;
}
}
@keyframes animateBottom {
from {
top: 0px;
opacity: 1;
}
to {
top: 300px;
opacity: 0;
}
}
.modal-content-active {
animation-name: animateBottom;
animation-duration: 0.4s;
}
/* The Close Button */
.close {
color: #F0B823;
float: right;
font-size: 2.6rem;
font-weight: bold;
position: absolute;
right: 0.25rem;
top: -0.25rem;
}
.close:hover,
.close:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
}
.modal-header {
padding: 0.125rem 1rem;
background-color: #171B20;
color: #F0B823;
}
.modal-body {}
.modal-button {
font-family: 'Quicksand', sans-serif;
background-color: #171B20;
border: none;
color: white;
padding: 0.248em 0.496em;
text-align: left;
text-decoration: none;
display: inline-block;
font-size: 1.750rem;
margin: 0.124em 0.062em;
transition-duration: 0;
cursor: pointer;
width: auto;
}
.modal-button:hover {
background-color: #171B20;
color: #F0B823;
}
.pic {
margin: auto;
display: block;
height: auto;
width: 50vh;
}
.headertext {
font-family: 'Quicksand', sans-serif;
display: block;
text-align: center;
font-size: 2rem;
}
.bodytext {
font-size: 1.125rem;
font-family: 'Quicksand', sans-serif;
display: block;
padding: 0.625em 0.9375em;
line-height: 2rem;
}
p {
display: block;
margin: 0;
padding: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section id="home">
<span class="header2 etpadding">Welcome To</span><br>
<br><span class="header1 tpadding">WTS<br>SHOP</span><br>
<span class="header2 mtpadding">This is a test for checking background blur</span><br>
<a href="#product" class="button" data-scroll>Check out our Product catalogue</a><br>
</section>
<section id="product">
<span class="header3">This is a test</span><br>
<!-- Trigger/Open The Modal -->
<a href="#myModal1" class="modal-button">• Modal Button 1</a>
<p>Modal Window 2 to be launched through body of Modal 1</p>
<!-- Trigger/Open The Modal -->
<a href="#myModal3" class="modal-button buttonalign">• Modal button 3</a><br>
<!-- Trigger/Open The Modal -->
<a href="#myModal4" class="modal-button buttonalign">• Modal Button 4</a><br>
</section>
<section id="payment">
<span class="header3">Supported Payment Methods</span>
</section>
<section id="disclaimer">
<span class="header3">Disclaimer</span>
</section>
<section id="contact">
<span class="header3">Contact Us</span>
</section>
<!-- The Modals must be direct children of <body> -->
<!-- The Modal -->
<div id="myModal1" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Window 1
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
currently viewing modal no.1
<a href="#myModal2" class="modal-button">Click to open modal window no.2</a>
</div>
</div>
</div>
<div id="myModal2" class="modal">
<!-- Move inner modal inside as a direct child of the first modal -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Window 2
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
You are currently viewing modal no.2
</div>
</div>
</div>
</div>
</div>
<!-- The Modal -->
<div id="myModal3" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Window 3
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
Currently viewing modal window 3
</div>
</div>
</div>
</div>
<!-- The Modal -->
<div id="myModal4" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<div class="headertext">
Modal Window 4
</div>
</div>
<div class="modal-body">
<img class="pic" src="https://drive.google.com/thumbnail?id=108ZLeoIfNkKODfRbLuPWpmXRl0gH9qkD">
<div class="bodytext">
Currently viewing modal window 4
</div>
</div>
</div>
</div>
回答2:
Fixed this issue. https://codepen.io/phong18/pen/VwZzZQm
Replace
document.body.classList.add("open");
by this:
document.getElementById("product").classList.add("open");
and replace
document.body.classList.remove("open");
by:
document.getElementById("product").classList.remove("open");
update in IF function:
from
if (this.parentElement.nodeName == 'BODY') {
document.body.classList.add("open");
} else {
this.parentElement.parentElement.parentElement.classList.add("open");
}
to:
if(this.parentElement.matches('#product')){
document.getElementById("product").classList.add("open");
} else{
this.parentElement.parentElement.parentElement.classList.add("open");
}
来源:https://stackoverflow.com/questions/57798103/body-background-blur-functionality-not-working-well-universally