Режим смешивания смешивается с помощью 3D-преобразований на странице.
Я возился с mix-blend-mode
имущество. Все отлично работает, пока не добавлю что-то вроде transform: perspective(100px)
или любое другое 3d преобразование в любом месте на странице, затем оно полностью ломается. Преобразование применяется, но режим смешивания исчез.
Я тестировал на Chrome и Firefox, а также на Linux и Windows, и везде одинаково, однако на другом компьютере все работало нормально (я не помню, какая версия Chrome использовалась и работала с Ubuntu).
Это что-то, что можно исправить с помощью CSS, или это просто проблема с драйверами оборудования / графического процессора?
я кладу background-blend-mode
в тегах, потому что mix-blend-mode
тег еще не существует, однако это свойство странным образом работает совершенно нормально и не нарушается преобразованиями.
Вот кодекс того, чего я пытаюсь достичь: http://codepen.io/vnenkpet/pen/avWvRg
Молния не должна иметь черный фон, мигающий с ней, но должна плавно смешиваться с фоном страницы.
РЕДАКТИРОВАТЬ:
Я только что узнал, что это действительно работает в Firefox. Это, следовательно, ошибка Chrome? Насколько я знаю, 3D-трансформации не должны нарушать режим наложения...
3 ответа
У меня была похожая проблема, за исключением того, что применение mix-blend-mode
(умножить) выше на странице сломал мой transform
ниже на странице (используя Chrome на Mac). Я смог это исправить, применив z-index
править mix-blend-mode
div (не забудьте установить position
, тоже).
Однако я не совсем уверен, является ли это ошибкой или ожидаемым поведением из-за свойств контекста стека.
Я понимаю, что это довольно старый поток, но у меня была та же проблема с janky-преобразованиями в Webkit/Blink с использованием плагина Masonry Isotope с оверлеем mix-blend-mode на участках сетки, пока я не добавил следующий CSS-код к элементу, который был преобразован. то есть элемент сетки кладки
Я отвечаю на это, если это поможет кому-то в будущем.
[your-selector-goes-here] {
perspective:1000px;
-webkit-backface-visibility: visible;
backface-visibility: visible;
}
Вы также можете попробовать применить нулевое преобразование ( продвижение 3D-слоя) к элементу, который имеет mix-blend-mode
Оговаривается:
.content {
mix-blend-mode: difference;
transform: translate3d(0, 0, 0);
}
Таким образом, Chrome может успешно смешивать два 3D-слоя вместе, вместо того чтобы смешивать 3D-слой и 2D-слой.
Вот фрагмент, демонстрирующий проблему и решение:
function change(event) {
var content = document.querySelector(".content")
content.className = event.target.checked ? "content content-with-transform" : "content"
}
.parent {
text-align: center;
padding: 2rem;
font-size: 5rem;
font-weight: 700;
}
.fixed {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 4rem;
background-color: #AB1795;
transform: translate3d(0, 0, 0);
z-index: -1;
}
.content {
mix-blend-mode: difference;
background-color: #167CFB;
}
.content-with-transform {
transform: translate3d(0, 0, 0);
}
<div class="parent">
<div class="fixed"></div>
<div class="content">Content</div>
</div>
<label><input type="checkbox" onchange="change(event)"/> Also transform other element</label>
(Я наткнулся на эту проблему при использовании will-change: transform
не фактическое преобразование, но решение то же самое.)