CSS3 新增了一個頗有意思的屬性 -- mix-blend-mode
,其中 mix 和 blend 的中文意譯均爲混合,那麼這個屬性的做用直譯過來就是混合混合模式,固然,咱們咱們一般稱之爲混合模式。css
混合模式最多見於 photoshop 中,是 PS 中十分強大的功能之一。固然,瞎用亂用混合模式誰都會,利用混合模式將多個圖層混合獲得一個新的效果,只是要用到恰到好處,或者說在 CSS 中利用混合模式製做出一些效果則須要對混合模式很深的理解及不斷的嘗試。html
我我的對混合模式的理解也十分淺顯,本文只是帶領你們走進 CSS 混合模式的世界,初淺的瞭解混合模式及嘗試使用它製做一些效果。web
mix-blend-mode
概述上文也說了,mix-blend-mode
描述了元素的內容應該與元素的直系父元素的內容和元素的背景如何混合。咱們將 PS 中圖層的概念替換爲 HTML 中的元素。編程
看看可取的值有哪些:瀏覽器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
{
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;
mix-blend-mode: unset;
}
|
除去 initial
默認、inherit
繼承 和 unset
還原這 3 個全部 CSS 屬性均可以取的值外,還有另外的 16 個具體的取值,對應不一樣的混合效果。動畫
若是不是專業的 PSer 每天和混合模式打交道,想要記住這麼多效果,仍是挺困難的。不過有前人幫咱們總結了一番,看看如何比較好的理解或者說記憶這些效果,摘自Photoshop中高級進階系列之一——圖層混合模式原理:spa
固然,上圖是 PS 中的混合模式,數量比 CSS 中的多出幾個,可是分類仍是通用的。3d
mix-blend-mode
實例眼見爲實,要會使用 mix-blend-mode
,關鍵仍是要邁出使用這一步。這裏我寫了一個簡單的 Demo,包括了全部的混合模式,能夠大概試一下各個模式的效果:code
CodePen Demo(-webkit- Only)orm
固然,僅僅是這樣是感覺不到混合模式的魅力的,下面就列舉幾個利用了混合模式製做的 CSS 動畫。
mix-blend-mode: screen
濾色模式製做 loading 效果爲了照顧某些訪問 codepen 慢同窗,特地製做了該效果的 Gif,看看效果:
這裏使用了 mix-blend-mode: screen
濾色模式,這是一種提亮圖像形混合模式。濾色的英文是 screen,也就是兩個顏色同時投影到一個屏幕上的合成顏色。具體作法是把兩個顏色都反相,相乘,而後再反相。簡單記憶爲"讓白更白,而黑不變"。(不必定十分準確,若有錯誤還請指正)
咱們將三個 div 按照不一樣延時(animation-delay
)小幅度旋轉起來,來達到一種很顯眼很魔性的效果,適合作 loading 圖。
mix-blend-mode: difference
差值模式再舉個例子, mix-blend-mode: difference
差值模式。查看每一個通道中的顏色信息,比較底色和繪圖色,用較亮的像素點的像素值減去較暗的像素點的像素值。與白色混合將使底色反相;與黑色混合則不產生變化。
通俗一點就是上方圖層的亮區將下方圖層的顏色進行反相,暗區則將顏色正常顯示出來,效果與原圖像是徹底相反的顏色。
看看利用了這個混合模式,運用在一些多圖層效果裏,能夠產生十分絢爛的混合效果:
上圖看似複雜,其實瞭解原理以後很是的簡單,6 個旋轉的 div ,經過 mix-blend-mode: difference
混合在一塊兒。
最後,想到我以前製做的一個文字故障效果,也能夠很好的融合混合模式,製做出下列效果:
不用懷疑你的眼睛,上圖的效果是純 CSS 實現的效果,運用了多種顏色混合模式實現顏色疊加,變亮等效果。
本文涉及的專業理論知識不多,沒有用很大的篇幅去描述每個混合模式的效果及做用。我對混合模式的理解也比較粗淺,本文旨在經過一些 Demo 讓讀者學會開始去使用這些混合模式效果,俗話說修行在我的,若是真的感興趣的能夠自行深刻研究。
最後,看一眼兼容性吧,這種奇妙的屬性兼容性一般都不怎麼好,我以前幾篇文章也提到過了,面向將來編程,因此本文的 CodePen Demo 都要求在 -webkit-
內核瀏覽器下觀看:
到此本文結束,若是還有什麼疑問或者建議,能夠多多交流