Имитировать эффекты смешивания Photoshop, такие как умножение, наложение и т.д.

Я делаю сайт с полным фоновым изображением страницы. Я хочу создать фоновое изображение для бокового столбца, который будет действовать как слой Photoshop с размножением в режиме смешивания. Это просто синяя поверхность с "поведением" многослойного слоя Photoshop.

Невозможно объединить наложение и изображение, поскольку фон может измениться при открытии веб-сайта в другом соотношении/размере экрана.

enter image description here

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

Есть ли уловки для достижения этого?

Ответ 1

демонстрация jsBin

Используйте свойство CSS3 mix-blend-mode Документы MDN
(Для резервного использования используйте цвет rgba или hsla с небольшой альфа-прозрачностью.)

Назначьте класс blend - * для вашего элемента, например:

/* ::: BLEND MODE CLASSES */

.blend-normal{ mix-blend-mode: normal; }
.blend-multiply{ mix-blend-mode: multiply; }
.blend-screen{ mix-blend-mode: screen; }
.blend-overlay{ mix-blend-mode: overlay; }
.blend-darken{ mix-blend-mode: darken; }
.blend-lighten{ mix-blend-mode: lighten; }
.blend-colordodge{ mix-blend-mode: color-dodge; }
.blend-colorburn{ mix-blend-mode: color-burn; }
.blend-hardlight{ mix-blend-mode: hard-light; }
.blend-softlight{ mix-blend-mode: soft-light; }
.blend-difference{ mix-blend-mode: difference; }
.blend-exclusion{ mix-blend-mode: exclusion; }
.blend-hue{ mix-blend-mode: hue; }
.blend-saturation{ mix-blend-mode: saturation; }
.blend-color{ mix-blend-mode: color; }
.blend-luminosity{ mix-blend-mode: luminosity; }


/* ::: SET HERE YOUR INITIAL COLORS */
div{  
  background: rgba(0, 80, 200, 0.8);
  color:      #fff;
}
div span{
  color:#000;
}


/* ::: FOR DEMO ONLY */
html, body{margin:0; height:100%;font:100%/1 sans-serif;}
body{background: url(http://i.stack.imgur.com/cBy6q.jpg)fixed 50%/cover;}
div{font-size:2.2em; padding:20px; margin:15px;}
div:first-of-type{margin-top:150px;}
div:last-of-type{margin-bottom:150px;}
<div class="">(rgba) <span>(rgba)</span></div>
<div class="blend-normal">normal <span>normal</span></div>
<div class="blend-multiply">multiply <span>multiply</span></div>
<div class="blend-screen">screen <span>screen</span></div>
<div class="blend-overlay">overlay <span>overlay</span></div>
<div class="blend-darken">darken <span>darken</span></div>
<div class="blend-lighten">lighten <span>lighten</span></div>
<div class="blend-colordodge">color-dodge <span>color-dodge</span></div>
<div class="blend-colorburn">color-burn <span>color-burn</span></div>
<div class="blend-hardlight">hard-light <span>hard-light</span></div>
<div class="blend-softlight">soft-light <span>soft-light</span></div>
<div class="blend-difference">difference <span>difference</span></div>
<div class="blend-exclusion">exclusion <span>exclusion</span></div>
<div class="blend-hue">hue <span>hue</span></div>
<div class="blend-saturation">saturation <span>saturation</span></div>
<div class="blend-color">color <span>color</span></div>
<div class="blend-luminosity">luminosity <span>luminosity</span></div>

Ответ 2

Простой с немного SVG:

<svg width="200" height="200" viewBox="10 10 280 280">
    <filter id="multiply">
        <feBlend mode="multiply"/>
    </filter>
    <image id="kitten" x="0" y="0" width="300" height="300" xlink:href="http://placekitten.com/300" />
</svg>

и некоторые CSS:

#kitten:hover {
    filter:url(#multiply);
}

Скрипка: http://jsfiddle.net/7uCQQ/

Ответ 3

Как сказал FC, вы можете использовать пользовательские фильтры CSS3 или SVG/Canvas.

Но если вам нужно кросс-браузерное решение для смешивания слоев, вы должны использовать JS-метод. Например, обработка изображений JS script от Pixastic: http://www.pixastic.com/lib/docs/actions/blend/

Кроме того, у него есть много других визуальных эффектов, таких как размытие, шум, обрезка, мозаика и т.д.

Я использовал этот script раньше для нескольких проектов, он отлично работает:)

Надеюсь, это поможет вам)

Ответ 4

Я дизайнер и имею ту же проблему, ища решения, прежде чем положить psd в команду разработчиков - вы можете попробовать this js и/или http://css-tricks.com/basics-css-blend-modes/

Код Jsfiddle:

#kitten:hover {
    filter:url(#multiply);
}

<svg width="200" height="200" viewBox="10 10 280 280">
    <filter id="multiply">
        <feBlend mode="multiply"/>
    </filter>
    <image id="kitten" x="0" y="0" width="300" height="300" xlink:href="#" onclick="location.href='http://placekitten.com/300'; return false;" />
</svg>

Надеюсь, он работает для вас или других здесь.:)