日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

CSS Mask 與切圖藝術

來源: 責編: 時間:2023-09-25 10:37:32 428觀看
導讀作為一名 CSSer,我并不反對“切圖”。相反,有些地方還是更推薦的,特別是那些奇形怪狀的 UI,合理的“切圖”可以極大地提高布局效率,當然,這里需要一點點技巧,將“切圖”和 CSS 現有能力結合起來,一起學習一下吧!一、“切圖”的

0Gs28資訊網——每日最新資訊28at.com

作為一名 CSSer,我并不反對“切圖”。0Gs28資訊網——每日最新資訊28at.com

相反,有些地方還是更推薦的,特別是那些奇形怪狀的 UI,合理的“切圖”可以極大地提高布局效率,當然,這里需要一點點技巧,將“切圖”和 CSS 現有能力結合起來,一起學習一下吧!0Gs28資訊網——每日最新資訊28at.com

一、“切圖”的局限性

傳統的“切圖”簡單暴力,但往往缺少適應性。0Gs28資訊網——每日最新資訊28at.com

適應性一般有兩種,一是「尺寸自適應」,二是「顏色可以自定義」。0Gs28資訊網——每日最新資訊28at.com

舉個例子,有這樣一個優惠券樣式。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

二、圖形運算與CSS MASK

經常會和設計稿打交道,對設計軟件(Photoshop、Figma等)應該或多或少也有所了解了,這里簡單介紹一下圖形運算(也稱布爾運算),通常有 4 種類型。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

這是一個非常常見的設計技巧,可以將不同的圖形經過運算合成新的圖形。0Gs28資訊網——每日最新資訊28at.com

下面是一個經典案例,就是通過圓的布爾運算繪制的0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

這么好的特性,CSS 中有類似的嗎?0Gs28資訊網——每日最新資訊28at.com

這就不得不提到CSS mask[1] 了,CSS MASK 可以指定一張圖作為遮罩圖片。0Gs28資訊網——每日最新資訊28at.com

div{  mask: url(圖片);  mask: 漸變;}

遮罩圖片可以是圖片,也可以是漸變。主要原理是顯示遮罩圖片不透明的部分,透明的則會被裁剪,示意如下:0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

但是,很多情況下,單一的遮罩并不能滿足需求,比如這樣一個帶缺口的圓,單一的漸變可能無法繪制。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

因此,我們需要用到和設計中圖形布爾運算一樣的技巧。0Gs28資訊網——每日最新資訊28at.com

這和 CSS mask中的mask-composite[2]是一一對應的。0Gs28資訊網——每日最新資訊28at.com

/* Keyword values */mask-composite: add; /* 疊加(默認) */mask-composite: subtract; /* 減去,排除掉上層的區域 */mask-composite: intersect; /* 相交,只顯示重合的地方 */mask-composite: exclude; /* 排除,只顯示不重合的地方 */

利用這個特性,可以很輕易地合成帶缺口的圓,也就是說,我們可以使用 CSS 的方式自由地去裁剪、合成我們想要的圖形。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

另外,-webkit-mask-composite與標準下的值有所不同,屬性值非常多,如下:0Gs28資訊網——每日最新資訊28at.com

-webkit-mask-composite: clear; /*清除,不顯示任何遮罩*/-webkit-mask-composite: copy; /*只顯示上方遮罩,不顯示下方遮罩*/-webkit-mask-composite: source-over; /*默認值,正常的疊加,等同于 add */-webkit-mask-composite: source-in; /*只顯示重合的地方,等同于 intersect*/-webkit-mask-composite: source-out; /*只顯示上方遮罩,重合的地方不顯示,等同于subtract*/-webkit-mask-composite: source-atop; /*只顯示下方遮罩*/-webkit-mask-composite: destination-over; /*正常疊加*/-webkit-mask-composite: destination-in; /*只顯示重合的地方*/-webkit-mask-composite: destination-out;/*只顯示下方遮罩,重合的地方不顯示*/-webkit-mask-composite: destination-atop;/*只顯示上方遮罩*/-webkit-mask-composite: xor; /*只顯示不重合的地方,等同于 exclude*/

其實是借用了 Canvas 中的圖形合成屬性,并且區分了圖層順序,但是對于遮罩層來講,其實「只需要關注遮罩的形狀,不要關注圖層的顏色」,所以上述的一些值效果是完全相同的。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

這里可以先不用每個都理解,知道有上面4種類型就行了,其實可以一一去試驗,等熟悉了自然就知道每個屬性的具體用途了。0Gs28資訊網——每日最新資訊28at.com

下面是每個屬性的演示:0Gs28資訊網——每日最新資訊28at.com

https://codepen.io/xboxyan/pen/RwKbGwN。0Gs28資訊網——每日最新資訊28at.com

了解了這些,接下來看看在切圖中的應用。0Gs28資訊網——每日最新資訊28at.com

三、圓滑的內凹圓角

回到前面的問題,同樣是切圖,不過我們需要換一種方式。0Gs28資訊網——每日最新資訊28at.com

仔細觀察,從整體反向考慮,其實就是一個正常的圓角矩形,然后挖去兩個平滑的缺口,兩個缺口的大小是固定的,位置也是相對不變的,如圖所示黑色的部分0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

所以下面的問題就是,「如何來得到這兩個缺口」?0Gs28資訊網——每日最新資訊28at.com

單純CSS漸變是難以繪制的,所以這里可以直接“切圖”。但是設計稿上給的是紅色部分,如何去手動做一個缺口部分呢?0Gs28資訊網——每日最新資訊28at.com

這就稍微借助設計工具了,這里以 Figma 為例,我們繪制一個矩形,居右對齊,確??梢愿采w缺口(如下,藍色部分)。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

然后,將藍色矩形圖層放在原圖形下面。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

最后,選中這兩個圖形,執行減去頂層。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

完成!0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

用同樣的方式,可以得到左右兩個半圓,或者直接翻轉一下也行。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

接下來,我們需要將這兩個 svg 轉為內聯,推薦用張鑫旭老師的這個。0Gs28資訊網——每日最新資訊28at.com

SVG在線壓縮合并工具 [3]0Gs28資訊網——每日最新資訊28at.com

最后,我們使用3層遮罩,兩個半圓加上整個矩形,通過遮罩合成(僅顯示不重疊部分)就可以得到我們需要的圖形了。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

這樣做的好處是兩個半圓「是通過CSS定位實現」的,所以可以確保一定是居中、靠近邊緣的,不會因為尺寸的變化而變形。0Gs28資訊網——每日最新資訊28at.com

下面是完整代碼。0Gs28資訊網——每日最新資訊28at.com

coupon{  width: 300px;  height: 150px;  border-radius: 8px;  background: linear-gradient(85deg, #FF9078 7.57%, #FA3440 80.06%);  -webkit-mask: url("data:image/svg+xml,%3Csvg width='20' height='48' viewBox='0 0 20 48' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 48V0c0 2.21 1.809 3.958 3.974 4.395C13.116 6.238 20 14.315 20 24S13.116 41.762 3.974 43.605C1.81 44.042 0 45.791 0 48z' fill='%23000'/%3E%3C/svg%3E") 0 50%/20px no-repeat,    url("data:image/svg+xml,%3Csvg width='20' height='48' viewBox='0 0 20 48' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20 48V0c0 2.209-1.809 3.959-3.975 4.395C6.885 6.238 0 14.315 0 24s6.885 17.762 16.025 19.605C18.191 44.041 20 45.791 20 48z' fill='%23000'/%3E%3C/svg%3E") 100% 50%/20px no-repeat,    linear-gradient(red 0 0);  -webkit-mask-composite: xor;}

這樣就得到了尺寸自適應、可更換顏色的優惠券樣式了。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

你也可以訪問在線鏈接。0Gs28資訊網——每日最新資訊28at.com

  • CSS coupon (codepen.io)[4]
  • CSS coupon(juejin.cn)[5]

四、投票 PK 樣式

下面來看這樣一個例子。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

注意,這里也是有平滑圓角的,并且在寬度改變時,傾斜角是固定的。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

同樣,也可以用“切圖”的方式來實現這樣的效果。0Gs28資訊網——每日最新資訊28at.com

在這里,我們還是從整體考慮,將圖形補全,用圖形合成的方式,在 Figma 中繪制出如下的“平滑直三角”。0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

然后在 CSS 中通過 mask 減去黑色部分就行了,下面是完整代碼。0Gs28資訊網——每日最新資訊28at.com

.pk{  display: flex;  width: 400px;}.item{  height: 40px;}.left{  width: 50%;  border-radius: 40px 0 0 40px;  background: linear-gradient(85deg, #FF9078 7.57%, #FA3440 80.06%);  -webkit-mask: linear-gradient(red,red), url("data:image/svg+xml,%3Csvg width='16' height='40' viewBox='0 0 16 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16 0h-2.344a1 1 0 0 1 .957 1.287L3.855 37.148A4 4 0 0 1 .023 40H16V0z' fill='%23C6F'/%3E%3C/svg%3E") right/auto 100% no-repeat;  -webkit-mask-composite: xor;}.right{  flex: 1;  border-radius:  0 40px 40px 0;  background: linear-gradient(274deg, #5FB6F5 -3.81%, #4B80EE 62.98%);  -webkit-mask: linear-gradient(red,red), url("data:image/svg+xml,%3Csvg width='16' height='40' viewBox='0 0 16 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 40h2.344a1 1 0 0 1-.957-1.287L12.145 2.85A4 4 0 0 1 15.977 0H0v40z' fill='%23C6F'/%3E%3C/svg%3E") left/auto 100% no-repeat;  -webkit-mask-composite: xor;}

這樣實現的傾角支持漸變,支持自適應寬度,效果如下0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

你也可以訪問在線鏈接0Gs28資訊網——每日最新資訊28at.com

  • CSS PK (codepen.io)[6]
  • CSS PK (juejin.cn)[7]

五、平滑 tab 樣式

最后再來看一個例子:平滑 tab 標簽,就是 Chrome 標簽欄那樣的0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

這次再來介紹一個比較簡單、實用的“切圖”方式。0Gs28資訊網——每日最新資訊28at.com

通過前面兩個例子,可能你已經猜到要怎么做了。沒錯,就是先補全0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

然后在設計軟件中將黑色部分單獨“切”出來0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

然后在 CSS 中通過 mask 減去這兩部分黑色部分就行了,和第一個例子非常像,下面是完整代碼0Gs28資訊網——每日最新資訊28at.com

tab{  line-height: 40px;  padding: 0 30px;  background-color:royalblue;  color: #fff;  -webkit-mask: url("data:image/svg+xml,%3Csvg width='28' height='40' viewBox='0 0 28 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M28 0H0v40h1c8.283 0 15-6.717 15-15V12c0-6.627 5.373-12 12-12z' fill='%23000'/%3E%3C/svg%3E") 0 0 no-repeat,    url("data:image/svg+xml,%3Csvg width='28' height='40' viewBox='0 0 28 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 0h28v40h-1c-8.283 0-15-6.717-15-15V12C12 5.373 6.627 0 0 0z' fill='%23000'/%3E%3C/svg%3E") 100% 0 no-repeat,    linear-gradient(red 0 0);  -webkit-mask-composite: xor;}

這樣實現的 tab 既做到了自適應寬度,也能隨意更改背景,效果如下0Gs28資訊網——每日最新資訊28at.com

0Gs28資訊網——每日最新資訊28at.com

你也可以訪問在線鏈接0Gs28資訊網——每日最新資訊28at.com

  • CSS chrome tab (codepen.io)[8]
  • CSS chrome tab (juejin.cn)[9]

六、總結一下

以上就是本文的全部內容了,介紹了一種特殊的“切圖”手法,將切圖與CSS MASK結合起來,既保留了“切圖”的簡單暴力,又滿足了CSS自適應的特點,下面簡單總結一下0Gs28資訊網——每日最新資訊28at.com

  • 傳統的“切圖”簡單暴力,但往往缺少適應性:尺寸自適應和顏色自適應。
  • 圖形布爾運算主要有:合并形狀、減去頂層、交叉形狀、排除重疊。
  • CSS MASK composite 剛好也有相同的特性。
  • 可以從整體反向考慮,將難以實現的部分由“切圖”完成,然后通過mask從整體減去這一部分。
  • 由于缺口部分是通過CSS定位實現,因此可以確保整體的自適應性。

前端作為設計師和開發工程師之間的橋梁,很多實現都可以從設計的角度去考慮,很多復雜的效果或者布局也是一層一層疊加而成,也算是給前端提供的一種布局思路。0Gs28資訊網——每日最新資訊28at.com

[1]CSS mask: https://developer.mozilla.org/zh-CN/docs/Web/CSS/mask。0Gs28資訊網——每日最新資訊28at.com

[2]mask-composite: https://developer.mozilla.org/en-US/docs/Web/CSS/mask-composite。0Gs28資訊網——每日最新資訊28at.com

[3]SVG在線壓縮合并工具 : https://www.zhangxinxu.com/sp/svgo/。0Gs28資訊網——每日最新資訊28at.com

[4]CSS coupon (codepen.io): https://codepen.io/xboxyan/pen/MWZOLGK。0Gs28資訊網——每日最新資訊28at.com

[5]CSS coupon(juejin.cn): https://code.juejin.cn/pen/7281253517154517052。0Gs28資訊網——每日最新資訊28at.com

[6]CSS PK (codepen.io): https://codepen.io/xboxyan/pen/oNJeoYv。0Gs28資訊網——每日最新資訊28at.com

[7]CSS PK (juejin.cn): https://code.juejin.cn/pen/7281253921112621097。0Gs28資訊網——每日最新資訊28at.com

[8]CSS chrome tab (codepen.io): https://codepen.io/xboxyan/pen/BavJYbE。0Gs28資訊網——每日最新資訊28at.com

[9]CSS chrome tab (juejin.cn): https://code.juejin.cn/pen/7281253036251414569  。0Gs28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-11243-0.htmlCSS Mask 與切圖藝術

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 被卷到“準下崗”,這九種編程語言要消失了!

下一篇: 理解Kafka offset

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美激情一区| 久久综合一区二区| 夜夜爽av福利精品导航| 亚洲午夜一区二区三区| 亚洲欧美日韩国产中文 | 亚洲国产精品尤物yw在线观看| 黄色国产精品| 亚洲美女电影在线| 亚洲欧美一区二区在线观看| 久久精品亚洲精品国产欧美kt∨| 麻豆精品一区二区综合av| 欧美精品粉嫩高潮一区二区| 国产精品v欧美精品v日韩| 国产午夜精品一区二区三区欧美| 亚洲国产91精品在线观看| 夜色激情一区二区| 欧美在线视频日韩| 欧美久久久久久久久久| 国产婷婷一区二区| 亚洲精品无人区| 久久国产精品色婷婷| 欧美精品1区2区| 国产一区二区三区奇米久涩| 亚洲九九精品| 久久精品91久久香蕉加勒比| 欧美精品一区在线播放| 国产亚洲成av人片在线观看桃| 亚洲日本视频| 性欧美videos另类喷潮| 欧美精品91| 红杏aⅴ成人免费视频| 一区二区免费看| 久久综合给合久久狠狠色| 国产精品久久二区| 91久久香蕉国产日韩欧美9色 | 久久综合亚洲社区| 国产精品日韩欧美一区二区| 亚洲电影中文字幕| 午夜亚洲伦理| 欧美日韩免费一区二区三区视频| 激情欧美日韩一区| 午夜日韩在线观看| 欧美日韩免费高清| 亚洲第一精品夜夜躁人人爽| 午夜精品久久久久久久蜜桃app | 亚洲午夜激情在线| 欧美高清不卡在线| 国产在线国偷精品产拍免费yy| 亚洲一区二区在线播放| 欧美好吊妞视频| **欧美日韩vr在线| 久久精品99| 国产精品欧美日韩一区| 日韩视频永久免费观看| 久久综合伊人77777麻豆| 国产模特精品视频久久久久| 夜夜嗨一区二区三区| 欧美99在线视频观看| 狠狠综合久久av一区二区小说| 午夜激情久久久| 欧美日韩日日夜夜| 亚洲精品一区二区三区福利| 久久综合久久综合久久| 国产一区高清视频| 欧美一进一出视频| 国产精品亚洲产品| 亚洲专区一二三| 欧美午夜视频网站| 一区二区三区国产在线观看| 欧美激情视频网站| 91久久精品网| 欧美国产先锋| 亚洲欧洲综合| 欧美高潮视频| 亚洲精品美女久久久久| 欧美刺激午夜性久久久久久久| 亚洲国产精品一区二区第四页av| 另类成人小视频在线| 激情成人中文字幕| 久久性色av| 在线国产精品一区| 免费不卡在线观看| 亚洲国产经典视频| 免费一区视频| 亚洲品质自拍| 欧美日韩另类在线| 亚洲小说欧美另类社区| 国产精品久在线观看| 亚洲欧美日韩在线| 国产区二精品视| 久久久精品网| 18成人免费观看视频| 欧美成人综合网站| 一本久久综合亚洲鲁鲁| 国产精品国产三级国产专播品爱网| 亚洲一区综合| 国产日韩精品一区观看| 欧美一区二区三区视频免费| 国产一区二区三区四区| 久久久久久久久蜜桃| 亚洲第一在线| 欧美男人的天堂| 国产精品99久久久久久人| 国产精品女人毛片| 久久久91精品国产| 91久久国产综合久久蜜月精品| 欧美日韩国产页| 亚洲欧美日韩一区二区| 海角社区69精品视频| 欧美 日韩 国产 一区| 一本色道久久综合| 国产欧美一区二区三区在线看蜜臀 | 日韩视频永久免费观看| 国产精品红桃| 欧美在线首页| 亚洲韩国精品一区| 欧美亚一区二区| 久久精品夜色噜噜亚洲a∨| 91久久久亚洲精品| 欧美午夜精品久久久久久浪潮| 欧美一区二区三区日韩| 在线日韩精品视频| 国产精品国产成人国产三级| 久久久激情视频| 亚洲精品一区二区三区樱花| 国产精品久久国产三级国电话系列| 久久国产精品网站| 亚洲美女免费视频| 国产亚洲欧美日韩日本| 欧美激情自拍| 午夜在线成人av| 亚洲国产一区二区在线| 国产精品日韩在线播放| 美女任你摸久久| 亚洲综合色激情五月| 在线欧美日韩精品| 国产精品久久久久一区二区| 久久久久久久尹人综合网亚洲| 99在线精品观看| 国语自产精品视频在线看一大j8 | 亚洲国产精品成人一区二区| 欧美午夜精品| 裸体一区二区| 亚洲欧美国产va在线影院| 在线观看国产精品淫| 国产精品高清一区二区三区| 久久精品30| 亚洲一卡久久| 亚洲欧洲综合| 国产一二精品视频| 欧美三级电影网| 美女尤物久久精品| 欧美一进一出视频| 一区二区三区精品久久久| 在线观看精品一区| 国产精品日韩精品欧美在线| 欧美高清一区二区| 久久久久久69| 午夜一区在线| 一区二区三区鲁丝不卡| 亚洲国产高清一区二区三区| 国产视频一区在线| 国产精品久久久久久影院8一贰佰| 免费日韩成人| 久久国产福利| 亚洲专区一二三| 日韩视频不卡| 亚洲国产成人91精品| 国产亚洲精品久久久| 欧美日韩一级片在线观看| 美女脱光内衣内裤视频久久网站| 午夜日韩在线| 亚洲综合日韩在线| 一本不卡影院| 日韩一级裸体免费视频| 亚洲国产精品久久久久秋霞影院 | 99精品欧美一区| 亚洲国产经典视频| 精品不卡一区二区三区| 国产一区二区激情| 国产精品一区二区三区四区五区| 欧美三区在线视频| 欧美日韩二区三区| 欧美精品一区二区三| 免费短视频成人日韩| 久久久久久一区二区三区| 欧美在线影院在线视频| 性做久久久久久免费观看欧美| 亚洲在线播放电影| 亚洲综合国产激情另类一区| 中文久久精品| 亚洲视频电影图片偷拍一区| 日韩视频免费| av成人天堂| 亚洲夜晚福利在线观看| 亚洲天堂网在线观看| 这里只有精品在线播放| 在线视频欧美日韩精品| 亚洲色无码播放| 一本色道久久综合| 日韩一区二区电影网| 一区二区不卡在线视频 午夜欧美不卡在 | 一区二区三区视频在线观看| aa国产精品|