Почему не работают режимы наложения CSS при применении к телу документа?

Вот пример режимов наложения CSS, работающих с заданным элементом "background":

body {
  position: relative;
}

.background {
  position: absolute;
  top: 0; left: 0;
  height: 100%;
  width: 100%;
  background: linear-gradient(red, blue);
}

.blend {
  background: green;
  mix-blend-mode: difference;
}
<body>
  <div class="background"></div>
  <div class="blend">BLEND ME</div>
</body>

И вот пример режима наложения, не применяемого по body:

body {
  background-image: linear-gradient(red, blue);
  background-size: 100%;
  background-repeat: no-repeat;
}

.blend {
  background: green;
  mix-blend-mode: difference;
}
<body>
  <div class="blend">BLEND ME</div>
</body>

Что дает? Это body элемент не учитывается при расчете режимов наложения CSS? Это относится ко всем браузерам? Кто я и почему я здесь? Это возникло как проблема при попытке реализовать динамическое (с помощью прокрутки) смешивание над body с background-attachment: fixed,

ОБНОВЛЕНИЕ: Это, кажется, применяется только в Chrome; Firefox/Safari ведут себя ожидаемо - что случилось с Chrome?

1 ответ

Решение

Элемент body смешивается в Chrome, но только если его фон не распространяется на холст.

Чтобы остановить это, добавьте фон для<html>элемент.

html {
  background-color: white;
}
body {
  background-image: linear-gradient(red, blue);
  background-size: 100%;
  background-repeat: no-repeat;
}
.blend {
  background: green;
  mix-blend-mode: difference;
}
<body>
  <div class="blend">BLEND ME</div>
</body>

Другие вопросы по тегам