巧妙運用clip-path,實現CSS形狀變換

智雲程式設計發表於2019-05-17

CSS3的“clip-path”,這個“clip-path”看起來有點眼熟,因為它原本就存在於SVG裡頭,利用掩碼(剪裁)的方法,連線座標繪製掩碼區域,就可以做出許多不同的形狀,讓底色或底圖顯現,隨著瀏覽器對於CSS3的支援度大幅提升,自然而然的就可以用它來做些與眾不同的變化。

運用clip-path超強的網站

最先看到這個屬性的應用,是從這個網站看到的: species-in-pieces.com/ ,不得不說這個網站做得實在太神了,一開始看到還真以為是用SVG做的,沒想到竟然是用CSS刻出來的…真是太驚人啦!

巧妙運用clip-path,實現CSS形狀變換

接著在找資料的過程中,又發現一個很強的網站: bennettfeely.com/clippy/ ,專門介紹「clip-path」這個CSS3的屬性,你可以直接在上面拖拉或修改,除了貝茲曲線外,幾乎任何形狀都做得出來(中空的部分要用組合的)

巧妙運用clip-path,實現CSS形狀變換

使用clip-path繪製多邊形

如果不考慮一些瀏覽器支援度的問題,使用clip-path來繪製多邊形,還比利用偽元素還製作多邊形來得簡單許多,而且也可以做到單一div繪製超過八邊形,使用偽元素的繪製是直接從長寬著手,而利用clip-path則是要由每個點的座標著手,因為是座標點的緣故,要做出正多邊形就也同樣要用到許多基本的三角函式來計算座標,以下就利用clip-path來繪製圓形、橢圓和正多邊形給大家看看。

這裡推薦一下我的前端學習交流扣qun:731771211 ,裡面都是學習前端的,如果你想製作酷炫的網頁,想學習程式設計。自己整理了一份2019最全面前端學習資料,從最基礎的HTML+CSS+JS【炫酷特效,遊戲,外掛封裝,設計模式】到移動端HTML5的專案實戰的學習資料都有整理,送給每一位前端小夥伴,每天分享技術

點選: 加入

開始繪製之前,有兩點注意事項:

  • 使用clip-path要從同一個方向繪製,如果順時針繪製就一律順時針,逆時針就一律逆時針,因為polygon是一個連續的線段,若線段彼此有交集,面積區域就會有相減的狀況發生(當然如果這是你要的效果就無妨了)。
  • 如果繪製時採用「比例」的方式繪製,長寬就必須要先行設定,不然有可能繪製出來的長寬和我們想像的就會有落差,使用「畫素」繪製就沒有這種問題。

圓形circle(半徑at圓心座標)

.circle{
    width:100px;
    height:100px;
    background:#0cc;
    -webkit-clip-path:circle(50% at 50% 50%);
  }
巧妙運用clip-path,實現CSS形狀變換

橢圓形ellipse(長、短軸半徑at圓心座標)

 .ellipse{
    width:100px;
    height:100px;
    background:#aaa;
    -webkit-clip-path:ellipse(25% 50% at 50% 50%);
  }
巧妙運用clip-path,實現CSS形狀變換

內建矩形inset(上右下左的邊距round上右下左圓角)

.inset{
    width:100px;
    height:100px;
    background:#99f;
    -webkit-clip-path:inset(10px 20px 30px 10px round 20px 5px 50px 0);
  }
image.png
image.png

正三角形

 .a{
    width:100px;
    height:87px;
    background:#c00;
    -webkit-clip-path:polygon(0% 100%, 50%  0%,100% 100%);
  }
image.png
image.png

正方形

.b{
    width:100px;
    height:100px;
    background:#069;
    -webkit-clip-path:polygon(0% 0%, 0% 100%,100% 100%,100% 0%);
  }
image.png
image.png

正五邊形

正五邊形就要計算一下了,59/(59+95)=38.31%,31/(81*2)=19.14%

.c{
    width:162px;
    height:154px;
    background:#095;
    -webkit-clip-path:polygon(0% 38.31%, 50% 0%,100% 38.31%,80.86% 100%,19.14% 100%);
  }
image.png
image.png

正六邊形

正六邊形的計算比較簡單,50/(100+50

2)=25%,150/(100+50

2)=75%

.d{
    width:200px;
    height:174px;
    background:#f80;
    -webkit-clip-path:polygon(25% 0%, 75% 0%,100% 50%,75% 100%,25% 100%,0% 50%);
  }
image.png
image.png

正七邊形

正七邊形是這裡頭需要計算最多的形狀,22/(100+622)=10.09%,202/(100+622)=90.18%,43/(43+97+78)=19.72%,(43+97)/(43+97+78)=64.22%,62/(100+622)=27.68%,(100+62)/(100+622)=72.32%

.e{
    width:224px;
    height:218px;
    background:#09c;
    -webkit-clip-path:polygon(50% 0%, 90.18% 19.72%,100% 64.22%,72.32% 100%,27.68% 100%,0% 64.22%,10.09% 19.72%);
  }
image.png
image.png

正八邊形

正八邊形的計算如下,71/(100+712)=29.34%,(71+100)/(100+712)=70.66%

.f{
    width:242px;
    height:242px;
    background:#f69;
    -webkit-clip-path:polygon(29.34% 0%, 70.66% 0%,100% 29.34%,100% 70.66%,70.66% 100%,29.34% 100%,0% 70.66%,0% 29.34%);
  }
巧妙運用clip-path,實現CSS形狀變換

搭配clip-path做動畫

熟練了clip-path之後,當然就要用它來做點動畫,下面提供兩個示例,第一個是正多邊形的變換,第二個則是三角形的變換組合,雖然看起來很簡單,但實際製作起來卻要考慮每個點的座標,為了讓形狀不要有「翻轉」的錯覺,形狀裡頭每個點在進行移動的時候,儘可能的不要交錯,因為只要一交錯,就會有交集的空白產生,就會有不自然或是翻轉的現象喔!當然同樣的,如果你希望有翻轉的效果,應該就要讓他們交錯囉!

正多邊形的變換

巧妙運用clip-path,實現CSS形狀變換

三角形的變換組合

巧妙運用clip-path,實現CSS形狀變換

自己是個做了幾年全棧開發的老碼農,如果你對前端開發這門技術感興趣,這裡推薦一下我的前端學習交流群: 767273102     ,裡面都是學習前端的從最基礎的HTML+CSS+JavaScript。jQuery,Ajax,node,angular等到移動端HTML5的專案實戰的資料都有整理,送給每一位前端小夥伴。最新技術,與企業需求同步。好友都在裡面學習交流,每天都會有大牛定時講解前端技術!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901074/viewspace-2644780/,如需轉載,請註明出處,否則將追究法律責任。

相關文章