Размытие за всплывающим окном при загрузке страницы проблема
Я работаю на сайте с всплывающим окном, единственное, чего мне не хватает, - это эффект размытия, когда это всплывающее окно появляется. Это всплывающее окно будет отображаться каждый раз, когда страница загружается, поэтому я нашел отличный код размытия здесь на SO. Хотя этот код предназначен для функции, где эффект размытия отображается кнопкой.
Из-за этого я изменил код, так что вместо кнопки он теперь onLoad, который запускается из тега body.
Единственная проблема заключается в том, что пятно появляется перед фактическое всплывающее окно, которого не должно быть. Я попытался изменить z-index в коде CSS для всплывающего окна, но это не работает.
Вот JSFiddle для моего кода (модифицированного) также, по-видимому, это не работает на Safari.
HTML:
<div id="overlay">
<div id="popup">
<a href="javascript:myBlurFunction(0);">X</a>
</div>
</div>
<body id="main_container" onload="myBlurFunction(1)">
</body>
Javascript:
myBlurFunction = function(state) {
var containerElement = document.getElementById('main_container');
var overlayEle = document.getElementById('overlay');
if (state) {
overlayEle.style.display = 'block';
containerElement.setAttribute('class', 'blur');
} else {
overlayEle.style.display = 'none';
containerElement.setAttribute('class', null);
}
};
CSS:
.blur {
filter: blur(5px);
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
}
#overlay {
position: fixed;
display: none;
left: 0px;
top: 0px;
right: 0px;
bottom: 0px;
background: rgba(255,255,255,.8);
z-index: 999;
}
#popup {
position: absolute;
width: 400px;
height: 200px;
background: rgb(255,255,255);
border: 5px solid rgb(90,90,90);
left: 0px;
right: 0px;
top: 0px;
bottom: 0px;
margin: auto;
}
Вот JSFiddle для биржевого кода из ответа SO.
3 ответов:
bodyтег должен обернуть все содержимое страницы. Вы можете сделать следующее:<body onload="myBlurFunction(1);"> <div id="overlay"> <div id="popup"> <a href="javascript:myBlurFunction(0);">X</a> </div> </div> <div id="main_container"> Whatever </div> </body>См. jsfiddle
В данном случае это происходит потому, что вы устанавливаете размытие в теле. Лучший пример, я думаю, это создать Div, чтобы поставить размытие, e показать этот div в 100% e после всплывающего окна с Z-индексом выше, чем размытие.
Применение размытия к тегу влияет на все внутренние теги, поэтому попробуйте сделать это следующим образом.
Не устанавливайте никаких стилей на самом теле:
<body onload="myBlurFunction(true)">Не включайте всплывающее окно в оверлей (я добавил кнопку - Вы должны использовать ее вместо якоря):
<div id="overlay" class="blur"></div> <div id="popup"> <button onclick="javascript: myBlurFunction(false);">X</button> <a href="javascript: myBlurFunction(false);">LINK X</a> </div>Как вы можете видеть, я добавил класс blur css непосредственно в оверлей (раскомментированный код).
Измените свои скрипты:
myBlurFunction = function(state) { var overlayEle = document.getElementById('overlay'); var popupEle = document.getElementById('popup'); if (state) { overlayEle.style.display = 'block'; //overlayEle.setAttribute('class', 'blur'); popupEle.style.display = 'block'; } else { overlayEle.style.display = 'none'; //overlayEle.setAttribute('class', null); popupEle.style.display = 'none'; } };Установите положение всплывающего окна в фиксированное, потому что его нет в вашем наложении больше:
#popup { position: fixed; }Скрипка: https://jsfiddle.net/uy4xvz12/19/
Comments