Режимы наложения слоёв в Web

Одна из главных причин тяжёлых увечий дизайнеров претензий к неопытным дизайнерам от верстальщиков, при получении от них PSD-макетов — это наличие слоёв с заданными режимами смешивания, отличными от normal. Вполне возможно, что скоро это уйдёт в прошлое!
Речь пойдёт о реализации спецификации «Compositing and Blending Level 1» в современных браузерах.


Что это и для чего?

Данный стандарт описывает правила наложения слоёв друг на друга, аналогично тому, как это делается в Photoshop. Например, в режимеmultiply итоговый цвет пикселя будет равен произведению цветов двух слоёв. Благодаря этому, можно добиться различных эффектов, таких как:

1) Фотоэффекты, такие как обесцвечивание картинки, сепия, наложение цвета. Например, достаточно будет использовать только одну цветную картинку, чтобы получить плавную анимацию от обесцвеченной к цветной при наведении:
(по клику — живой пример на jsfiddle)
daa305fa7f991ea59e95b397a68ef220 555ea8d2802f08d3f219264c0c30bfc8

2) Часто дизайнеры ленятся вырезать фон из картинки и используют наложение картинки без прозрачности на слой так, что фоновый чёрный/белый цвет будет в данном режиме преобразуются в прозрачный (режим screen/multiply):
68c31dfb33c44e93cf45e88e2dbe1dd8
(на картинке внизу показал кусочек накладываемого изображения «как есть»)

3) Иногда можно использовать данную технологию для реализации эффектов с текстом, например, в логотипах:
ec3828aabb2b228030dac20bdfe2840b

4) Для создания различных эффектов-красивостей:
Демо, автор Justin Windle, http://soulwire.co.uk



Список режимов

Для примера будем накладывать тигра на такую картинку в разных режимах:
6e0ec398733f4679a10295a31042cf17

normal 8224b29a9ca7a4dd51da8a29e5c598fc
multiply b0d92f2698dd4f8bdacc90b35d7af40e
screen f306e2ef10d02a9e9608a2a5ccbe0e26
overlay 149d136cc67614b434080ce5e9204ec5
darken 7cb9e9dadef5d3dbf47fe657b5dc8c59
lighten c5e09c1d7fb61cae8692d0aa549fcbe8
color-dodge 2f578cb3a957def45c45bdab8e32fdd6
color-burn 2da6f560c5b412de9102486a1a640918
hard-light 11e3bc1a4b7d6c8a89b2ff332540be0e
soft-light 8764621117c208ab209f788a5b937670
difference 29d680b1161c43d3791470b2dd53806a1
exclusion 29d680b1161c43d3791470b2dd53806a
hue* 1a98e090dad76045ae8312e8cdbd90bb
saturation* 039b7bf98c21fe0b3f5f3ef76a73535e
color* ff5ca48b155c4ca7fe0343c649807886
luminosity* a4e3895196e66974a492c19630ff83d4

* здесь я взял раскрашенную в красные оттенки картинку, для демонстрации эффекта


Технологии применения и поддержка браузерами

По спецификации, применять режимы наложения можно в четырёх случаях:

1) Для фонового изображения в CSS

background-blend-mode: <blend-mode>;

Поддерживают: Chrome 35+, Firefox 30+ beta (войдёт ли в релиз этот функционал, ещё вопрос, т. к. скорее всего уже переносили «приземление» этого функционала).

2) Для HTML-элементов

mix-blend-mode: <blend-mode>;

Поддерживают: пока нет, но активно идёт разработка по реализации.

3) Для SVG

<feBlend mode="<blend-mode>">

Поддерживают: Chrome 35+, IE 10+ (с отличиями)

4) Для Canvas

.globalCompositeOperation = <blend-mode> | <composite-mode>*;

* доступны дополнительные режимы
Поддерживают: Chrome 29+, Firefox 24+, Opera 17+, Safari 6.1+

Узнать подробнее о поддержке браузерами данного стандарта можно в таблице от adobe.