国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > CSS > 正文

用純CSS實(shí)現(xiàn)鏤空效果的示例代碼

2024-07-11 08:59:51
字體:
供稿:網(wǎng)友

近來研究了一下鏤空效果。

background-clip: text

背景被裁剪為文字的前景色。第一次是在 CSS-Tricks 看到的這個(gè)用法: 在 CSS-Tricks 網(wǎng)站上,這個(gè)玩意用得到處都是。

這樣,做簡(jiǎn)單的圖片背景鏤空效果便不再困難了。關(guān)鍵代碼只有幾行。

.wrapper {  /* ... */  background-image: url("/path/to/your/image");  background-clip: text; /* ! */  color: transparent;    /* ! */}

就這幾行,視覺上會(huì)就會(huì)有大變化。前后對(duì)比:

另外,這里有個(gè)比上面更實(shí)用的Demo

background-clip 既然是“background”家族的,那它天生和圖片、漸變打的交道多。不過,我們做鏤空總不會(huì)都是圖片、漸變這種吧。如果我們想做視頻、文字,甚至更復(fù)雜的 DOM 元素的鏤空效果呢?

單刀直入: CSS mask 屬性

這應(yīng)該是最直接能想到的方法了。畢竟名字里就帶個(gè)“mask”,誰能忽略呢?

CSS mask-* 系列屬性是在 CSS Masking Module Level 1 中定義的。這個(gè)規(guī)范也定義了為很多人熟知的 clipclip-path 屬性,換句話說,這個(gè)CSS 模塊包括遮罩和剪裁兩部分。

第一個(gè)例子

雖然是一個(gè)新的屬性,但設(shè)置 mask 屬性并不難。下面就是我們的第一個(gè)例子。

<div class="masked" />
.masked {  height: 100px;  width: 100px;  background: linear-gradient(red, orange, yellow, lightgreen, blue, purple, red);  mask: url("https://github.githubassets.com/pinned-octocat.svg");}

就是下面的效果啦。

上面的用法還是很簡(jiǎn)單的,我們指定了一個(gè) mask 參數(shù),它的值是一張 從GitHub盜的 SVG圖片。于是多彩的漸變就被 裁剪 遮罩成了那只著名的貓。

mask-* 大家族

mask 屬性實(shí)際上是諸多 mask-* 的縮寫:

mask-imagemask-repeatmask-positionmask-clipmask-originmask-size-mask-typemask-compositemask-mode

有沒有 background-* 的即視感?沒錯(cuò),里面的不少屬性都是和 backgorund / border 一致的,而且它們的作用也是一致的,只不過 background-* 用在背景上,而 mask-* 用在遮罩層上而已——用在背景上的奇技淫巧搬到 mask 的世界里還能接著用!比如實(shí)現(xiàn)這樣的效果:

.masked {  height: /* ... */;  width: /* ... */;  background: /* ... */;  mask-image: url(https://github.githubassets.com/pinned-octocat.svg);  mask-size: 5em;  mask-position: center;  /* 如果你心情好,加個(gè)動(dòng)畫也沒問題的 */}

進(jìn)一步控制遮罩效果

可能讀者已經(jīng)發(fā)現(xiàn)了, mask-* 家族里有幾張生面孔。這也好理解: mask 這么強(qiáng)大的特性,完完全全地抄 background-* 豈不可惜了。

mask-mode

mask-mode 用來指定具體的遮罩方式。

mask-type CSS 屬性設(shè)置 mask-image 被用于“亮度型”的遮罩還是“不透明度”型的遮罩。 mask-mode: alaph 表示使用不透明度(即alaph通道)作為 mask value, mask-mode: luminance 表示使用亮度值作為 mask value。

那,遮罩值 / mask value 又是什么?mask value 表示被遮罩的元素被遮罩的程度。mask value 越大,被遮罩區(qū)域會(huì)更偏向于顯露,mask value 最大的時(shí)候,那個(gè)區(qū)域就完全不透明了。舉個(gè)例子:

<div class="mode">ABCDEFG</div>
.mode {  height: 200px;  width: 300px;  /* and more */  mask-image: linear-gradient(to left, black, yellow);  mask-mode: luminance; /* or alaph ? */}

左邊是遮罩圖片,中間是 luminance 右邊使用 alaph 。這里的圖片是不透明的,所以將一個(gè)恒不透明的圖片在 alaph 模式下作為遮罩,其結(jié)果是沒有遮罩效果。但是圖片是有亮度變化的,所以 luminance 下的被遮罩元素就呈現(xiàn)出透明度的變化了。

一般 luminance 模式慢一點(diǎn)點(diǎn),因?yàn)槊恳粋€(gè)像素點(diǎn)的亮度值需要根據(jù) RGB 三個(gè)通道的值計(jì)算出來。

mask-composite

指定當(dāng)有多個(gè)遮罩圖片疊加起來的時(shí)候,如何處理遮罩效果。一些屬性值的效果依賴于 mask-image 的層級(jí)次序。

用MDN 提供的這個(gè) CodePen 來感受一下

關(guān)于 mask 的知識(shí)就講到這里,更具體更準(zhǔn)確的說明還是 要到 MDN 看一看

混合模式

這應(yīng)該是最為神奇的一種方法了。使用PS的時(shí)候,經(jīng)常會(huì)看見“混合模式”這個(gè)詞。還記得多年前我初次使用 Photoshop 的時(shí)候還很好奇“混合模式”是什么東西,頓時(shí)讓我對(duì) Photoshop 充滿了敬畏之情。不過,當(dāng)年的敬畏歸敬畏,現(xiàn)在這里說的“混合模式”還是蠻好理解的。

所謂的“混合模式”,是指當(dāng)一種當(dāng)層重疊時(shí)計(jì)算像素最終顏色值的方法。每種混合模式接收前景顏色值和背景顏色值(分別為頂部顏色和底部顏色)作為輸入,執(zhí)行一些計(jì)算并輸出最后要顯示在屏幕上的顏色值。最終的可見的顏色是對(duì)層中的每個(gè)重疊像素執(zhí)行混合模式計(jì)算所得的結(jié)果。 說白了,混合模式確定了把一層疊加到另一層上去會(huì)得到什么結(jié)果。

在 CSS 中,可以使用 mix-blend-mode 來指定混合模式。

你可能會(huì)問了,平時(shí)也沒有用什么“混合模式”這種東西,所以 blend-mode 的默認(rèn)值是 none 嗎?可不是。其實(shí),這種最常見的 上層把下層“遮住”了的情況也屬于一種混合模式,叫 normal ,它本質(zhì)上是一種只保留前景顏色值而完全拋棄背景顏色值的混合模式。

這里我們只討論實(shí)現(xiàn)鏤空效果用到的混合模式 —— screen 。這種混合模式有一個(gè)特性,前景層是黑色導(dǎo)致最終可見的顏色直接是背景層的顏色,前景層是白色導(dǎo)致最終可見的顏色直接是白色。

相信你已經(jīng)搞不明白這和鏤空有什么關(guān)系了,下面舉個(gè)例子看一下。

現(xiàn)在,我們有一個(gè) <video> ,以及一個(gè)“白底黑字”的Logo浮層。

我們?cè)诟涌蛏霞由舷旅娴?CSS:

.logo {    /* ... ... */    mix-blend-mode: screen;}

就變成了下面的樣子:

 

去這個(gè) Demo,看具體代碼和效果

齒輪圖標(biāo)確實(shí)是變?yōu)殓U空的了。不過,為什么呢?

先來明確一件事:把浮層置于視頻之上,浮層是“前景”,視頻是“背景”。先來看浮層的白色部分,因?yàn)榘寻咨糜谌魏晤伾隙嫉玫桨咨园咨糠直槐A簦欢驗(yàn)楹谏糜谌魏晤伾隙嫉玫较聦拥念伾院谏糠殖尸F(xiàn)鏤空效果。

但是這樣的實(shí)現(xiàn)比較 Hack,因?yàn)檫@里只使用了黑白兩色,如果使用其它的顏色作為浮層的 background-color ,得到的就不會(huì)像是鏤空的效果了,這時(shí)還是得請(qǐng)上面的 mask 家族出場(chǎng)。不過,單單對(duì)于白底的情況, mix-blend-mode 不失為一個(gè)可行的解法。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 莲花县| 民勤县| 苍梧县| 荥经县| 樟树市| 师宗县| 芜湖市| 普宁市| 璧山县| 盘山县| 巩留县| 和田县| 敦化市| 五华县| 游戏| 沽源县| 孝昌县| 金门县| 德保县| 宝丰县| 云龙县| 开原市| 华坪县| 视频| 东明县| 团风县| 阳山县| 炉霍县| 天门市| 汕尾市| 盐亭县| 灵璧县| 高陵县| 和平县| 涟源市| 榕江县| 庄浪县| 沧州市| 巍山| 玛纳斯县| 佛坪县|