Background-blend-mode
На этой неделе в Firefox 30 было включено по умолчанию свойство background-blend-mode
. Таким образом, Firefox стал третьим браузером, поддерживающим это свойство (два других — Opera и Chrome). Safari будет поддерживать это свойство в следующей версии, про планы IE мне ничего найти не удалось.
Внимание: все демо в посте — действующие примеры без фолбеков. Для просмотра лучше всего воспользоваться последними версиями Chrome, Opera или Firefox.
Что делает это новое свойство и какие возможности оно нам дает?
background-blend-mode
управляет режимами наложения слоев фона, заданного в CSS.
Пример:
See the Pen gftIl by yoksel (@yoksel) on CodePen.
Наведите курсор на картинку, чтобы увидеть исходное изображение.
background-blend-mode
аналогичен режимам наложения слоев в фотошопе, и список возможных значений свойства вам, скорее всего, покажется знакомым:
- normal
- multiply
- screen
- overlay
- darken
- lighten
- color-dodge
- color-burn
- hard-light
- soft-light
- difference
- exclusion
- hue
- saturation
- color
- luminosity
Как это работает?
Возьмем, к примеру, картинку с котиком и зададим её фоном:
Для наложения слоев обязательное условие, чтобы слоев было больше одного. В нашем случае первым слоем является цвет (teal
).
Теперь можно добавить режим наложения, например:
Результат:
See the Pen kGAsK by yoksel (@yoksel) on CodePen.
Вы можете поиграться с режимами здесь или посмотреть их списком на одной странице вот тут.
Слоев фона может быть больше двух, и для каждого слоя можно отдельно задавать режим наложения:
Фоны могут содержать не только изображения, но и градиенты, что позволяет делать разные интересные эффекты:
See the Pen mJohl by yoksel (@yoksel) on CodePen.
Как можно использовать background-blend-mode
?
Предположим, есть сайт в определенной цветовой гамме, и в дизайне нужно разместить несколько картинок:
See the Pen background-blend-mode for usage in design by yoksel (@yoksel) on CodePen.
Так картинки не очень вписываются в цветовую схему. Раньше чтобы тонировать изображения под цвет сайта, потребовалось бы открыть графический редактор и проделать эту операцию с каждой картинкой, но сейчас это можно сделать одной строчкой:
Результат:
See the Pen background-blend-mode for usage in design by yoksel (@yoksel) on CodePen.
Способ имеет свои преимущества:
- Экономит время — не нужно вручную красить картинки, используемые в дизайне. Особо пригодятся режимы наложения в прототипировании, когда картинки, скорее всего, ещё будут меняться.
- Позволяет легко сделать эффект, когда при наведении картинка показывается в оригинальном цвете. При этом не нужно готовить два изображения и менять их по наведению курсора — достаточно одного.
А если потом изменится цветовая схема сайта — не нужно будет заново перекрашивать картинки под новую схему — всё произойдет само собой:
See the Pen background-blend-mode for usage in design by yoksel (@yoksel) on CodePen.
Правда, мне не удалось сделать плавную смену режимов наложения. Насколько я понимаю, они не анимируются. Но это можно обойти используя псевдоэлементы: через :before
создается дублирующий слой с той же картинкой, и ему по наведению меняется прозрачность — это можно сделать плавно (пример справа):
See the Pen FCLHx by yoksel (@yoksel) on CodePen.
Ещё один способ покрасить картинку в дизайне — подложить полосатый градиент:
See the Pen background-blend-mode for usage in design by yoksel (@yoksel) on CodePen.
Приятный бонус background-blend-mode
— плавная деградация: если браузер не поддерживает режимы наложения, посетитель увидит обычную картинку. Может быть, она будет не очень вписана в цветовую схему, но это лучше чем ничего.
Интересно, что в некоторых режимах результат различается в зависимости от того, наложена ли картинка на цвет или цвет поверх картинки (слева картинка поверх цвета, справа наоборот):
See the Pen Is it matter color on top or image on top? by yoksel (@yoksel) on CodePen.
Наложение цвета на картинку позволяет получить более интересные результаты, похожие на цветовые фильтры, но этот вариант хуже с точки зрения деградации, потому что если режимы не сработают, на странице отобразится верхний слой — то есть заливка цветом.
С изображениями всё более-менее понятно, но вот для CSS-градиентов режимы наложения поистине открывают новые горизонты. Теперь слои градиентов могут не просто просвечивать друг под другом в областях полной или частичной прозрачности, но также они могут взаимодействовать с нижележащими слоями, образовуя новые сочетания. Делать такие градиенты безусловно сложнее, но и интереснее тоже.
Уже есть первая галерея с примерами: bennettfeely.com/gradients/. Ниже на странице можно найти JS-фолбек и взвешивание одних и тех же градиентов, сделанных на CSS или в виде изображений различных форматов. CSS, конечно, выигрывает.
И даже если пока что не все браузеры позволяют использовать background-blend-mode
, имеет смысл поинтересоваться какие из используемых вами изображений уже можно заменить CSS-паттернами, чтобы получить выигрыш в весе и производительности.
Вдохновившись примерами из галереи, я решила посмотреть что ещё можно сделать. Одно из забавных открытий — шахматная доска:
See the Pen Easy way to make chess-board : ) by yoksel (@yoksel) on CodePen.
Без режимов наложения такое клеточки делать немного головоломно (хотя на основе такого градиента можно получить множество других). С режимами клеточки делаются всего из двух градиентов, третий понадобится в случае если клеточки должны быть не черно-белыми, а цветными.
Правда, паттерн не всегда хорошо поддаётся перекрашиванию, это некоторый недостаток способа. С другой стороны, в этом случае заливкой клеток может быть не только цвет, но и градиент, что в предыдущем способе было бы не очень удобно делать.
Ещё несколько градиентов:
See the Pen Playing with background-blend-mode by yoksel (@yoksel) on CodePen.
See the Pen Grassy waves by yoksel (@yoksel) on CodePen.
See the Pen Playing with background-blend-mode by yoksel (@yoksel) on CodePen.
See the Pen Sunny by yoksel (@yoksel) on CodePen.
See the Pen Rainbow eyes by yoksel (@yoksel) on CodePen.
See the Pen Lightblue by yoksel (@yoksel) on CodePen.
See the Pen Rainbow cells by yoksel (@yoksel) on CodePen.
See the Pen Water by yoksel (@yoksel) on CodePen.
See the Pen vbwKF by yoksel (@yoksel) on CodePen.
See the Pen Red by yoksel (@yoksel) on CodePen.
See the Pen Radial gradients + background-blend-mode by yoksel (@yoksel) on CodePen.
See the Pen The Cicada background + background-blend-modes by yoksel (@yoksel) on CodePen.
Можете отредактировать любой из них отключив режимы наложения и посмотреть что меняется (а также увидеть как выглядят паттерны в бразуерах без поддержки свойства), можете попробовать менять режимы местами, вписывать свои значения или менять цвет фона. Иногда в процессе таких экспериментов из одного паттерна получается ещё несколько.
background-blend-mode
выглядит очень привлекательно, позволяя добавить немного магии фотошопа в привычный CSS.
- Ссылки по теме:
- The background-blend-mode property
- Background blending now available in Firefox 30
- Gradients gallery
- Getting to know CSS Blend Modes
- CSS-паттерны
- Свежие CSS-паттерны
- СSS-градиенты и 3D
- Секреты режимов наложения
- CSS Image Effects
- Метки:
- режимы наложения,
- паттерны