Эффект размытия фона, создает вставку Shadow Issue во время перехода

Проблема:

странно когда я использую Backdrop-filter: blur(Xpx); во время перехода, как показано ниже, каким-то образом тени вставки появляются из ниоткуда, до конца перехода ..

введите здесь описание изображения

Демонстрация проблемы на jsfiddle

Характеристики:

  • Версия Chrome: 83
  • ОС: Виндовс 10

Окончание:

Есть идеи?
Заранее спасибо .. (:

- [Обновление от 23.06.2020]:

Наконец-то нашел какой-то обходной путь для тех, кто может понадобиться что-то это конкретное, хотя которое еще не отвечает на мою проблему, так как не работает с фоновым элементом [...]

- [Обновление от 07.01.2021]:

Отлично работает в версии Chrome: 91.0.4472.114.


person Giorgos Xou    schedule 22.06.2020    source источник
comment
На моем экране этого не происходит, какой браузер вы используете?   -  person Daniel_Knights    schedule 22.06.2020
comment
@Daniel_Knights Chrome (Версия: 83)   -  person Giorgos Xou    schedule 22.06.2020


Ответы (1)


Вступление.

Итак, то, что вы испытываете, не является чем-то новым, на самом деле это то, как правило стиля backdrop-filter работает в соответствии с W3C*. В сочетании с правилом стиля перехода и отсутствием фона это компенсирует то, что вы испытываете.

Советы по исправлению и кодированию.

Прежде чем мы начнем, я дам вам знать, что я не поддерживаю использование вами backdrop-filter, так как поддержки в нем недостаточно, как мы видим на очень надежном ресурсе* Я бы рекомендовал вам вместо этого использовать правило filter, так как оно поддерживается больше*

Теперь, чтобы перейти к некоторым ошибкам в коде и исправлению вашей проблемы:

body{
background-image: url("https://i.pinimg.com/originals/d2/64/ce/d264ce996ff6531fe191dfce5b200b3a.jpg");
background-position: center; 
background-repeat: no-repeat;
background-color:yellow;
}

#el{
position:fixed;
top:14px;
left:14px;
right:14px;
bottom:14px;

-webkit-transition: all 7s;
-moz-transition: all 7s;
-o-transition: all 7s;
transition: all 7s;


}

#el.changeState{
-webkit-backdrop-filter:blur(7px);
backdrop-filter:blur(7px);
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>


<button onclick="Clicked()">Blur Me (:</button>
<script>
function Clicked() {
  var el = document.getElementById('el');
  
  el.innerHTML = ":O";
  el.classList.add('changeState');
}
</script>

<p id="el"></p>

</body>
</html>

Что было бы намного лучше:

(function addBlurEffect() {

  const d = document;

  function getId(id) {
    return d.getElementById(id);
  }

  let emptyParagaphTag = getId(`addTextTo`);
  let button = getId(`listeningToButton`);

  
  button.addEventListener(`click`, function stateClicked() {
      this.innerHTML = `:O`;
      emptyParagaphTag.classList.add(`changeState`);

      // No overflows ;)
      button.removeEventListener(`click`, stateClicked);
  });
})();

// In my opinion, this Javascript code is much cleaner!
body {
  background-image: url("https://i.pinimg.com/originals/d2/64/ce/d264ce996ff6531fe191dfce5b200b3a.jpg");
  background-position: center; 
  background-repeat: no-repeat;
  background-color: yellow; /* This wouldn't work... since it wold be covered.. I don't understand what you want with that, other than getting blinded? */
}

#addTextTo {
  position:fixed;
  top:14px;
  left:14px;
  right:14px;
  bottom:14px;

  -webkit-transition: all 7s;
  -moz-transition: all 7s;
  -o-transition: all 7s;
  transition: all 7s;
  
  background: rgba(255, 255, 255, 0.4); /* You forgot to add this! */
}

.changeState {
  filter: blur(7px); /* Much better! */
}
<!DOCTYPE html>
<html lang="en-us">
<head>
  <title>Example</title>
</head>
<body>

<!-- HTML code is free to breath now, nothing to be clogged here. -->
<button id="listeningToButton">Blur Me (:</button>
<p id="addTextTo"></p>

</body>
</html>

Outro.

Надеюсь, я помог вам добиться того, чего вы хотите, и устранил всю путаницу... кроме того, я открыт для любых вопросов о коде.

Ссылки.

(*) = Ссылки на вещи!

W3C => https://www.w3.org/TR/filter-effects-1/#supported-filter-functions

Правило CanIUse backdrop-filter (плохое) =› https://caniuse.com/#search=backdrop%20filter< /а>

Правило CanIUse filter (хорошее) =› https://caniuse.com/#search=CSS%20Filter%20Effects

person ALPHA 7    schedule 22.06.2020
comment
Спасибо за подробный ответ ❤️, но я не могу пометить его как ответ. я знал о таблицах поддержки. Но на самом деле я пытался добиться того, что точный эффект, размыто-стеклянный переход на фоне элемента без этой вставки Shadow , поэтому я использовал backdrop-filter, а не filter, хотя обычно это не рекомендуется [...] - person Giorgos Xou; 22.06.2020
comment
In my opinion, this Javascript code is much cleaner! согласен (: - person Giorgos Xou; 22.06.2020
comment
actually, this is how backdrop-filter style-rule works according to W3C Отлично! я этого не знала.. - person Giorgos Xou; 22.06.2020
comment
background-color:yellow; используется по визуальным соображениям, на случай, если изображение исчезнет в будущем - person Giorgos Xou; 22.06.2020
comment
К сожалению, вы не можете этого сделать, так как переход компенсирует большую проблему, если вы удалите переход и цвет фона, он будет работать нормально (с цветом фона или без него). - person ALPHA 7; 23.06.2020
comment
` используется по визуальным причинам, на случай, если изображение исчезнет в будущем` Хорошая избыточная инженерная тактика, я аплодирую вам за ваше критическое мышление! - person ALPHA 7; 23.06.2020