亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

用純CSS實現鏤空效果的示例代碼

2024-07-11 08:59:51
字體:
來源:轉載
供稿:網友

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

background-clip: text

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

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

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

就這幾行,視覺上會就會有大變化。前后對比:

另外,這里有個比上面更實用的Demo

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

單刀直入: CSS mask 屬性

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

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

第一個例子

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

<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");}

就是下面的效果啦。

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

mask-* 大家族

mask 屬性實際上是諸多 mask-* 的縮寫:

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

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

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

進一步控制遮罩效果

可能讀者已經發現了, mask-* 家族里有幾張生面孔。這也好理解: mask 這么強大的特性,完完全全地抄 background-* 豈不可惜了。

mask-mode

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

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

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

<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 。這里的圖片是不透明的,所以將一個恒不透明的圖片在 alaph 模式下作為遮罩,其結果是沒有遮罩效果。但是圖片是有亮度變化的,所以 luminance 下的被遮罩元素就呈現出透明度的變化了。

一般 luminance 模式慢一點點,因為每一個像素點的亮度值需要根據 RGB 三個通道的值計算出來。

mask-composite

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

用MDN 提供的這個 CodePen 來感受一下

關于 mask 的知識就講到這里,更具體更準確的說明還是 要到 MDN 看一看 。

混合模式

這應該是最為神奇的一種方法了。使用PS的時候,經常會看見“混合模式”這個詞。還記得多年前我初次使用 Photoshop 的時候還很好奇“混合模式”是什么東西,頓時讓我對 Photoshop 充滿了敬畏之情。不過,當年的敬畏歸敬畏,現在這里說的“混合模式”還是蠻好理解的。

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

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

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

這里我們只討論實現鏤空效果用到的混合模式 —— screen 。這種混合模式有一個特性,前景層是黑色導致最終可見的顏色直接是背景層的顏色,前景層是白色導致最終可見的顏色直接是白色。

相信你已經搞不明白這和鏤空有什么關系了,下面舉個例子看一下。

現在,我們有一個 <video> ,以及一個“白底黑字”的Logo浮層。

我們在浮層框上加上下面的 CSS:

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

就變成了下面的樣子:

 

去這個 Demo,看具體代碼和效果

齒輪圖標確實是變為鏤空的了。不過,為什么呢?

先來明確一件事:把浮層置于視頻之上,浮層是“前景”,視頻是“背景”。先來看浮層的白色部分,因為把白色置于任何顏色之上都得到白色,所以白色部分被保留;而因為黑色置于任何顏色之上都得到下層的顏色,所以黑色部分呈現鏤空效果。

但是這樣的實現比較 Hack,因為這里只使用了黑白兩色,如果使用其它的顏色作為浮層的 background-color ,得到的就不會像是鏤空的效果了,這時還是得請上面的 mask 家族出場。不過,單單對于白底的情況, mix-blend-mode 不失為一個可行的解法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩精品久久| 国产69精品久久久久99| 色无极影院亚洲| 91中文在线视频| 欧美亚州一区二区三区| 伊人久久久久久久久久久久久| 国产精品成人免费视频| 最近的2019中文字幕免费一页| 91精品国产91久久久久久吃药| 精品久久久久久国产| 中文字幕亚洲一区| 韩国国内大量揄拍精品视频| 麻豆乱码国产一区二区三区| 久久人人爽人人爽人人片av高请| 日韩av大片在线| 成人免费看吃奶视频网站| 77777少妇光屁股久久一区| 日韩有码片在线观看| 欧美成人精品h版在线观看| 欧美福利在线观看| 国产91精品高潮白浆喷水| 欧美视频13p| 欧美精品videosex牲欧美| 亚洲第一综合天堂另类专| 国产不卡一区二区在线播放| 亚洲国产欧美一区二区丝袜黑人| 欧美精品成人91久久久久久久| 2019中文字幕在线观看| 91精品国产综合久久香蕉的用户体验| 日本精品久久久久久久| 一本一本久久a久久精品综合小说| 欧美成人亚洲成人| 5278欧美一区二区三区| 成人免费网站在线观看| 欧美高清第一页| 国产精品香蕉在线观看| 91wwwcom在线观看| 久久国内精品一国内精品| 国产精品一区二区三区在线播放| 欧美激情女人20p| 日韩欧美中文在线| 欧美一区二区三区免费视| 亚洲精品一区av在线播放| 久久久久久久国产精品| 国产精品电影一区| 国产精品999999| 91精品国产综合久久男男| 久久久999精品视频| 国产精品视频午夜| 久久久久www| 欧美性开放视频| 亚洲国产99精品国自产| 亚洲成人av在线| 青青草国产精品一区二区| 超在线视频97| 中文字幕日韩有码| 久久精品国产亚洲一区二区| 国产精品成人va在线观看| 亚洲伦理中文字幕| 亚洲国产精品视频在线观看| 精品久久中文字幕久久av| 日韩精品www| 亚洲影视九九影院在线观看| 久久久久久综合网天天| 精品国产成人在线| 亚洲黄色av女优在线观看| 在线播放精品一区二区三区| 美女视频黄免费的亚洲男人天堂| 国产乱人伦真实精品视频| 中文字幕九色91在线| 欧美又大又粗又长| 国产精选久久久久久| 色爱av美腿丝袜综合粉嫩av| 亚洲电影第1页| 亚洲成人动漫在线播放| 77777少妇光屁股久久一区| 欧美视频在线观看 亚洲欧| 久久成人国产精品| 亚洲第一二三四五区| 性色av一区二区三区在线观看| 国产精品久久久久久久电影| 国产精品久久久久久亚洲调教| 91精品国产沙发| 国内精品久久久久影院 日本资源| 欧美性极品xxxx做受| 欧美裸体男粗大视频在线观看| 韩国日本不卡在线| 2019精品视频| 色偷偷噜噜噜亚洲男人的天堂| 91久久精品国产91久久性色| 91精品久久久久久久久久| 久久成人综合视频| 欧美成年人视频网站| 亚洲天堂开心观看| 国产福利精品av综合导导航| 国产成人精品综合久久久| 国产精品视频久久久| 欧美丰满老妇厨房牲生活| 国产亚洲精品美女久久久| 中文字幕国产亚洲2019| 欧美大片在线看| 国产精品久久久久久久久久99| 亚洲成人精品在线| 久久视频在线直播| 亚州av一区二区| 色偷偷91综合久久噜噜| 97国产真实伦对白精彩视频8| 欧美久久久精品| 亚洲aⅴ男人的天堂在线观看| 亚洲日韩中文字幕在线播放| 九九久久久久99精品| 久久综合久中文字幕青草| 亚洲激情在线观看| 日韩电影在线观看中文字幕| 欧美日韩国产成人在线观看| 色妞一区二区三区| 色综合色综合久久综合频道88| 国产精品av在线| 亚洲色图50p| 亚洲国产精品久久精品怡红院| 欧美国产日本在线| 久久成人免费视频| 91精品国产乱码久久久久久蜜臀| 亚洲无亚洲人成网站77777| 亚洲人成网站在线播| 国产精品户外野外| 欧美尺度大的性做爰视频| 欧美午夜激情视频| 欧美性高潮床叫视频| 亚洲免费视频观看| 中文字幕久久久av一区| 日本久久久a级免费| 欧美理论电影在线播放| 狠狠操狠狠色综合网| 欧美综合第一页| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩在线免费观看| 久久久久久高潮国产精品视| 国内偷自视频区视频综合| 国产精品高潮粉嫩av| 日韩欧亚中文在线| 欧美性xxxx极品hd满灌| 国产视频亚洲精品| 欧美成人黑人xx视频免费观看| 岛国av一区二区在线在线观看| 7777免费精品视频| 国产精品爽爽爽| 欧美激情视频网站| 乱亲女秽乱长久久久| 欧美国产亚洲视频| 亚洲女成人图区| www.欧美免费| 国产精品电影观看| 92看片淫黄大片看国产片| 欧洲午夜精品久久久| 亚洲国产精品资源| 亚洲视频综合网| 久热精品视频在线观看| 国模gogo一区二区大胆私拍| 成人欧美一区二区三区在线湿哒哒| 亚洲精品资源在线| 精品久久久91| 亚洲欧美国产视频| 欧美一区在线直播|