2.32. Объединение и смешивание слоев

Модуль Compositing and Blending определяет набор CSS-свойств, влияющих на визуальное отображение элементов. Эффекты, создаваемые этими свойствами, применяются после того, как элементы измерены и расположены в соответствии с моделью визуального форматирования. Некоторые значения свойств приводят к созданию содержащего блока и/или созданию контекста наложения (нового порядка отрисовки).

Композитинг описывает, как формы различных элементов объединяются в одно изображение. В модели Simple Alpha Compositing, описанной в текущей спецификации, выделяется два шага к общей операции композитинга — сначала выполняется этап смешивания, затем этап композитинга Портера-Даффа.

На этапе смешивания вычисляется результирующий цвет там, где исходный элемент и фон перекрываются. Цвет графического элемента заменяется результирующим цветом. Затем графический элемент компонуется с фоном, используя оператор композитинга Портера-Даффа source-over, согласно которому исходное изображение находится над фоном.

1. Введение в объединение слоев

Композитинг представляет собой процесс объединения графических объектов. Операция объединения слоев использует альфа-канал, который определяет, как цвета одного пикселя должны быть объединены с цветами другого пикселя, когда они накладываются друг на друга, один поверх другого.

Пиксель является наименьшей точкой в изображении, он хранит информацию о цветовых каналах RGB, Red (красный), Green (зеленый) и Blue (голубой) и возможно, информацию о прозрачности. Альфа-канал является цветовой составляющей, которая представляет степень прозрачности или непрозрачности цвета, то есть красного, зеленого и синего каналов.

Непрозрачность описывается с использованием альфа-значения, которое хранится вместе со значением цвета для каждой конкретной точки. Значение альфа составляет от 0 до 1 включительно. Значение 0 означает, что пиксель не имеет покрытия в этой точке и поэтому является прозрачным; то есть нет цветового вклада от любой геометрии, потому что геометрия не перекрывает этот пиксель. Значение 1 означает, что пиксель полностью непрозрачен; геометрия полностью перекрывает пиксель.

2. CSS-свойства

2.1. Режим смешивания цветов: свойство mix-blend-mode

Поддержка браузерами

IE:
Edge: 79
Firefox: 32
Chrome: 41
Safari: 8
Opera: 28
iOS Safari: 8
UC Browser for Android: ?
Chrome for Android: 97
Samsung Internet: 4

Свойство mix-blend-mode определяет формулу смешивания цветов исходного элемента с фоновым слоем. Принимает значения, описанные в разделе Режимы смешивания.

Свойство применяется ко всем элементам, в SVG — к элементам-контейнерам, графическим элементам и графическим ссылочным элементам.

Свойство не наследуется.

Синтаксис

mix-blend-mode: normal;
mix-blend-mode: multiply;
mix-blend-mode: screen;
mix-blend-mode: overlay;
mix-blend-mode: darken;
mix-blend-mode: lighten;
mix-blend-mode: color-dodge;
mix-blend-mode: color-burn;
mix-blend-mode: hard-light;
mix-blend-mode: soft-light;
mix-blend-mode: difference;
mix-blend-mode: exclusion;
mix-blend-mode: hue;
mix-blend-mode: saturation;
mix-blend-mode: color;
mix-blend-mode: luminosity;
mix-blend-mode: initial;
mix-blend-mode: inherit;

See the Pen Untitled by Elena (@html5book) on CodePen.

2.2. Контекст наложения: свойство isolation

Поддержка браузерами

IE:
Edge: 79
Firefox: 36
Chrome: 41
Safari: 8
Opera: 30
iOS Safari: 8
UC Browser for Android: ?
Chrome for Android: 97
Samsung Internet: 4

Свойство isolation используется для предотвращения смешивания элемента с его фоном. Обычно используется вместе с mix-blend-mode.

В SVG свойство определяет, является элемент изолированным или нет.

В CSS isolation: isolate; позволяет элементу создавать новый контекст наложения. Контекст наложения формируется у элементов, имеющих общий родительский элемент.

Свойство применяется ко всем элементам, в SVG — к элементам-контейнерам, графическим элементам и графическим ссылочным элементам.

Свойство не наследуется.

isolation
Значения:
auto Значение по умолчанию, означает, что элемент не изолирован. Тем не менее, задание для элемента свойств, создающих новый контекст наложения (например, transform: translate();), приводит к его изоляции.
isolate Создает новый контекст наложения.
initial Устанавливает значение свойства в значение по умолчанию.
inherit Наследует значение свойства от родительского элемента.

Синтаксис

isolation: auto;
isolation: isolate;
isolation: inherit;
isolation: initial;

See the Pen Untitled by Elena (@html5book) on CodePen.

2.3. Режим смешивания фоновых слоев: свойство background-blend-mode

Поддержка браузерами

IE:
Edge: 79
Firefox: 30
Chrome: 35
Safari: 10.1
Opera: 22
iOS Safari: 10.3
UC Browser for Android: 12.12
Chrome for Android: 97
Samsung Internet: 4

Свойство background-blend-mode определяет режим смешивания каждого фонового слоя.

Каждый фоновый слой должен смешиваться с фоновым слоем элемента, который находится под ним, и цветом фона элемента. Фоновые слои не должны смешиваться с содержимым, которое находится за элементом, вместо этого они должны действовать так, как будто они отображаются в изолированной группе.

Свойство принимает значения, описанные в разделе Режимы смешивания. Применяется ко всем html-элементам.

Свойство не наследуется.

Синтаксис

background-blend-mode: normal;
background-blend-mode: multiply;
background-blend-mode: screen;
background-blend-mode: overlay;
background-blend-mode: darken;
background-blend-mode: lighten;
background-blend-mode: color-dodge;
background-blend-mode: color-burn;
background-blend-mode: hard-light;
background-blend-mode: soft-light;
background-blend-mode: difference;
background-blend-mode: exclusion;
background-blend-mode: hue;
background-blend-mode: saturation;
background-blend-mode: color;
background-blend-mode: luminosity;
background-blend-mode: initial;
background-blend-mode: inherit;

See the Pen
Untitled
by Elena (@html5book) on CodePen.

Список значений background-blend-mode должен применяться в том же порядке, что и список значений background-image. Это означает, что первое значение в списке будет применено к слою, который находится сверху. Если у свойства недостаточно разделенных запятыми значений, чтобы соответствовать количеству слоев, браузер должен рассчитать свое используемое значение, повторяя список значений, пока их не станет достаточно.

Если вместо background-image используется background, то свойство background-blend-mode для этого элемента сбрасывается в значение по умолчанию.

3. Режимы смешивания

Смешивание — это аспект композитинга, который вычисляет смешение цветов там, где исходный элемент и фон перекрываются.

Для каждого режима используются математические расчёты, которые вычисляются в диапазоне от 0 до 1, где 0 соответствует чёрному цвету, 1 — белому. Все режимы смешивания можно разделить на следующие группы:

  • Нормальный режим — normal;
  • Режим контраста — overlay, soft-light, hard-light;
  • Режим затемнения — darken, multiply, color-burn;
  • Режим осветления — lighten, screen, color-dodge;
  • Режим сравнения — difference, exclusion;
  • Компонентный режим — hue, saturation, color, luminosity

3.1. Разделимые режимы смешивания

Режим смешивания называется разделимым, если формула смешивания применяется отдельно к каждому набору соответствующих компонентов — фону и исходным цветам.

Каждый из следующих режимов смешивания будет применять функцию смешивания B(Cb, Cs) для каждого цветового компонента.

normal — значение по умолчанию, которое указывает на отсутствие смешивания, так как верхний слой остаётся непрозрачным.

multiply — режим умножения. Работает путём умножения уровней яркости пикселей верхнего слоя с пикселями нижележащих слоёв. Отлично подходит для создания теней и удаления белых и других светлых тонов (сохраняя при этом более тёмные цвета). Умножение любого цвета на черный даёт черный. Умножение любого цвета на белый сохраняет оригинальный цвет.

screen — режим экрана. Эффект аналогичен режиму lighten с отличием в том, что удаляет больше тёмных пикселей, создавая плавный переход. Работает как режим multiply, но удаляет тёмные тона.

overlay — режим перекрытия. Использует комбинацию режима наложения screen для более светлых пикселей, и режим наложения multiply для тёмных пикселей. Так как режим работает в среднем диапазоне этих двух режимов, то полутона (50% серого) становятся прозрачными.

darken — режим затемнения. Если пиксели верхнего слоя темнее, чем на нижележащих слоях, они сохраняются в изображении. Если пиксели в верхнем слое светлее, они заменяются на более тёмные пиксели нижнего слоя, поэтому в основном сохраняются темные тона всех слоёв.

lighten — режим замены светлым. Тёмные пиксели верхнего слоя заменяются на светлые пиксели нижележащих слоёв. Светлые пиксели не заменяются.

color-dodge — режим осветления основы. Насыщает светлые тона и блики. Темные области изображения остаются без изменений.

hard-light — режим «жёсткий свет». Цвета умножаются или осветляются, в зависимости от источника цвета. Эффект похож на сияние резкого светового пятна на фоне. Полутона также становятся прозрачными.

soft-light — режим «мягкий свет». Использует комбинацию режима наложения screen для более светлых пикселей, и режим наложения multiply для тёмных пикселей. Похож на overlay, но придаёт более натуральный мягкий эффект, напоминающий сияние рассеянного светового пятна на фоне. Полутона также становятся прозрачными.

difference — режим вычитания. Отображает тональную разницу между двумя слоями, удаляя белые пиксели из слоя. Результирующее изображение получается тёмным и противоположным по тону. Делает избирательную инверсию, при которой светлые цвета инвертируются в более тёмные и насыщенные, а тёмные остаются без изменения.

exclusion — режим исключения. Сравнивает пиксель активного слоя и эквивалентный пиксель нижележащего слоя с учётом их яркости, делая избирательную инверсию. Черный никогда не инвертируется, белый — всегда. Одинаковые цвета компенсируют друг друга, давая серый цвет. Производит эффект, похожий на режим difference, но более мягкий.

3.2. Неразделимые режимы смешивания

Неразделимые режимы смешивания рассматривают все цветовые компоненты в сочетании, в отличие от разделимых режимов, которые рассматривают каждый компонент в отдельности.

hue — режим цветового тона. Сохраняет оттенок активного слоя и добавляет ему яркость и насыщенность нижележащих слоев (получается изображение из нижнего слоя с цветами верхнего слоя).

saturation — режим насыщенности. Создаёт цвет с насыщенностью исходного цвета и оттенком и яркостью нижележащего цветового фона. Серые оттенки остаются без изменений.

color — режим цветности. Создаёт цвет с оттенком и насыщенностью исходного цвета и яркость нижележащего цветового фона. Сохраняет серые тона нижележащих слоёв.

luminosity — режим яркости. Создаёт цвет с яркостью исходного цвета и оттенком и насыщенностью нижележащего цветового фона. Эффект противоположен режиму color.

По материалам Compositing and Blending Level 1

Поделиться: