做者: Ahmad Shaeed 譯者:前端小智 來源:css-trickscss
點贊再看,養成習慣html
本文
GitHub
github.com/qq449245884… 上已經收錄,更多往期高贊文章的分類,也整理了不少個人文檔,和教程資料。歡迎Star和完善,你們面試能夠參照考點複習,但願咱們一塊兒有點東西。前端
根據維基百科:git
數字圖像編輯和計算機圖形中的混合模式(或混合模式)用於肯定兩個圖層如何相互混合。在大多數應用程序中,默認的混合模式只是經過用頂層的內容覆蓋底層來隱藏底層。github
在CSS中,有兩個屬性負責混合。 mix-blend-mode
用於混合DOM元素,background-blend-mode
用於組合多個CSS背景。面試
mix-Blend-Mode
咱們以一個基本的例子來看一下它是如何工做的。 個人標題上方有一個圓圈。 我要作的是將文本與圓混合。瀏覽器
HTMLbash
<div class="circle"></div>
<p>Blend Me</p>
複製代碼
CSS微信
爲文本元素添加了mix-blend-mode: overlay
,從而將其與圓混合。svg
我認爲這是一個普遍使用的混合模式。文字在上面,圖片在下面。
在標題中添加了如下內容:
.hero-title {
color: #000;
mix-blend-mode: overlay;
}
複製代碼
不只僅是改變混合模式。 例如,咱們能夠經過建立動畫來提升創意。
在此示例中,我想探討文本如何與樹葉背景融合。 因爲圖像中包含暗點和亮點,所以在使文本看起來像在每片葉子下移動同樣,這將起到很是有用的做用。
個有趣的效果是在帶有矢量和形狀的背景上有一個標題。 當形狀的顏色不一樣時,它會變得更加有趣。
咱們能用這些斑點形狀作什麼?我使用MorphSVG插件改變每一個博客形狀的路徑。這產生了一個有趣的結果。
吸引我眼球的效果是當元素有白色背景和黑色前景使用mix-blend-mode: screen
。
你們都說簡歷沒項目寫,我就幫你們找了一個項目,還附贈【搭建教程】。
我使用了SVG,並對其應用瞭如下內容。 注意使用屏幕時黑色區域如何變爲透明。
對我來講,這是一個很是有用的用例。 我常常須要添加播放圖標以指示文章中有視頻,所以我最終使用了從中心透明的SVG。
這聽起來彷佛正確,但有必定侷限性。 若是要添加懸停效果以填充三角形怎麼辦? 因爲在SVG中減去了形狀,所以這是不可能的。 一種解決方法是在SVG後面放置一個圓圈,並在懸停時對其進行着色。
對我來講,這還不夠。我也想反過來,三角形必須是白色的,其他的是藍色的。
多虧了混合模式,我能夠經過在懸停時控制嵌入式SVG快速實現改效果。
.article__play {
mix-blend-mode: screen;
}
.article:hover .article__play {
mix-blend-mode: normal;
}
.article:hover .article__play {
.play__base {
fill: #005FFF;
}
.play__icon {
fill: #fff;
}
}
複製代碼
另外一種狀況是使用裁切圖像並將其與其下方的背景融合,結果很是有趣。
img {
position: absolute;
right: -15px;
top: 0;
width: 110px;
mix-blend-mode: screen;
}
複製代碼
這個想法是把圖片放在右邊,左邊有標題和描述。
一樣,經過爲每張卡添加多個背景能夠更好:
你們都說簡歷沒項目寫,我就幫你們找了一個項目,還附贈【搭建教程】。
我在Photoshop的早期就知道這個技巧。有時,我須要一個品牌的標誌,它是很可貴到一個透明的PNG版本。使用混合模式,這很容易解決。
我模擬了Facebook和Amazon徽標,並在每一個徽標下添加了白色背景。
如今來解決這個問題,添加了如下CSS:
img {
mix-blend-mode: multiply;
filter: contrast(2);
}
複製代碼
注意,我添加了filter: contrast(2)
來增長徽標的對比度。應用混合效果使他們比原來的顏色深一點。
問題已解決! 固然,我不建議使用此功能。 可是,若是我被迫這麼作,我將使用它來節省時間,當原始徽標到達時,我能夠替換它並消除混合效果。
isolation
CSS屬性定義該元素是否必須建立一個新的層疊上下文(stacking context)。
該屬性的主要做用是當和background-blend-mode
屬性一塊兒使用時,能夠只混合一個指定元素棧的背景:它容許使一組元素從它們後面的背景中獨立出來,只混合這組元素的背景。
html
<div>
<span>CSS is Awesome</span>
</div>
複製代碼
css
div {
isolation: isolate; /* Creates a new stacking context */
}
span {
mix-blend-mode: difference;
}
複製代碼
如你所見,文本「 CSS很棒」僅在其父代的邊界內融合。 外面的東西不會混在一塊兒。 換句話說,它是孤立的。
isolation
能夠經過使用建立新的堆棧上下文的屬性來實現。例如,若是父元素具備opacity
屬性,這將影響結果。
html
<div>
<img src="cake.jpg" alt="">
</div>
複製代碼
css
div {
opacity: 0.99; /* Creates a new stacking context, which result to an isolated group */
}
img {
mix-blend-mode: difference;
}
複製代碼
它的工做方式相似mix-blend-mode
,但具備多個背景圖像。 每一個背景能夠有本身的混合模式,舉個例子。
在此示例中,將三層混合在一塊兒:基礎圖像,實心填充(Solid Fill)和漸變填充(radient Fill.)。
.elem {
background: linear-gradient(45deg, #000 10%, transparent),
linear-gradient(#3754C7, #3754C7),
url(nature.jpg);
background-size: cover;
background-blend-mode: overlay, color;
}
複製代碼
在CSS中,應該以正確的方式對每一個背景進行排序。 堆疊順序從上到下,如上圖所示。
經過使用徑向梯度,有一些有趣的結果比有用。這個想法是添加一個彩色的圖像,使它與它混合。
:root {
--color: #000;
--size: 250px; /* Gradient Size */
}
.elem-1 {
background: radial-gradient(circle var(--size) at center, transparent, var(--color)),
url(nature.jpg);
}
複製代碼
經過對元素應用background-blend-mode: color
,結果是圖像的去飽和版本。
瀏覽器支持
原文:css-tricks.com/basics-css-…
代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug。
文章每週持續更新,能夠微信搜索「 大遷世界 」第一時間閱讀和催更(比博客早一到兩篇喲),本文 GitHub github.com/qq449245884… 已經收錄,整理了不少個人文檔,歡迎Star和完善,你們面試能夠參照考點複習,另外關注公衆號,後臺回覆福利,便可看到福利,你懂的。