自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利用 Clip-path 實現(xiàn)動態(tài)區(qū)域裁剪

開發(fā) 前端
clip-path是CSS屬性之一,只不過很多同學都擔心瀏覽器對他的兼容性,因此不怎么使用該屬性。其實clip-path已經(jīng)得到很好的支持,可以說現(xiàn)在主流瀏覽器對他的支持已經(jīng)很好了。

[[436815]]

背景

今天逛 CodePen,看到了這樣一個非常有意思的效果:

圖片

CodePen Demo -- Material Design Menu By Bennett Feely[1]

這個效果還是有一些值得探討學習的點,下面我們一起來看看。

如何實現(xiàn)這樣一個類似的效果?

首先,想一想,如果讓你去實現(xiàn)上面的效果,你會怎么做呢?

這里我簡單羅列一些可能的辦法:

  1. 陰影 box-shadow
  2. 漸變 radial-gradient
  3. 縮放 transform: scale()

快速的一個一個過一下。

使用 box-shadow 實現(xiàn)

如果使用 box-shadow,代碼大致如下:

  1. <div class="g-container"
  2.     <div class="g-item"></div> 
  3. </div> 
  1. .g-container { 
  2.     position: relative
  3.     width: 400px; 
  4.     height: 300px; 
  5.     overflow: hidden; 
  6.  
  7. .g-item { 
  8.     position: absolute
  9.     width: 48px; 
  10.     height: 48px; 
  11.     border-radius: 50%; 
  12.     background: #fff; 
  13.     top: 20px; 
  14.     left: 20px; 
  15.     box-shadow: 0 0 0 0 #fff; 
  16.     transition: box-shadow .3s linear; 
  17.      
  18.     &:hover { 
  19.         box-shadow: 0 0 0 420px #fff; 
  20.     } 

核心就在于:

  1. 外層一個設置了 overflow: hideen 的遮罩
  2. 內(nèi)層元素 hover 的時候,實現(xiàn)一個 box-shadow: 0 0 0 0 #fff 到 box-shadow: 0 0 0 420px #fff 的變化

效果如下:

圖片

整體的動畫是模擬出來了,但是它最致命的問題有兩個:

  1. 當我們的鼠標離開圓形的時候,整個動畫就開始反向進行了,白色區(qū)域開始消失,如果我們要進行按鈕操作,是無法完成的
  2. 隱藏在動畫展開后的矩形內(nèi)的元素,不容易放置

所以,box-shadow 看著雖好,但是只能放棄。上述 Demo 的代碼 -- CodePen Demo -- box-shadow zoom in animation[2]

使用漸變 radial-gradient 實現(xiàn)

下面我們使用徑向漸變 radial-gradient 加上 CSS @property,也可以還原上述效果:

  1. <div class="g-container"></div> 

  1. @property --size { 
  2.   syntax: '<length>'
  3.   inherits: false
  4.   initial-value: 24px; 
  5.  
  6. .g-container { 
  7.     position: relative
  8.     width: 400px; 
  9.     height: 300px; 
  10.     overflow: hidden; 
  11.     background: radial-gradient(circle at 44px 44px, #fff 0, #fff var(--size), transparent var(--size), transparent 0); 
  12.     transition: --size .3s linear; 
  13.      
  14.     &:hover { 
  15.         --size: 450px; 
  16.     } 

我們通過控制徑向漸變的動畫效果,在 hover 的時候,讓原本只是一個小圓背景,變成一個大圓背景,效果如下:

圖片

emmm,效果確實是還原了,問題也很致命:

  1. 由于是背景的變化,所以鼠標不需要 hover 到小圓上,只需要進入 div 的范圍,動畫就會開始,這顯然是不對的
  2. 和第一種 box-shadow 的方法類似,隱藏在白色之下的導航元素的 DOM 不好放置

上述 Demo 的代碼 -- CodePen Demo -- radial-gradient zoom in animation[3]

emmm,還有一種方法,通過縮放 transform: scale(),也會存一定問題,這里不繼續(xù)展開。

所以到這里,想實現(xiàn)上述的效果,核心在于:

  1. 鼠標要 hover 到圓上,才能開始動畫,并且,鼠標可以在展開后的范圍內(nèi)自由移動,且不會收回動畫效果
  2. 動畫展開后,里面的 DOM 的放置,不能太麻煩,能不借助 Javascript 去控制里面內(nèi)容的顯示隱藏最好

利用 clip-path 實現(xiàn)動態(tài)區(qū)域裁剪

所以,這里,我們其實是需要一個動態(tài)的區(qū)域裁剪。

在我的這篇文章中 -- 如何不使用 overflow: hidden 實現(xiàn) overflow: hidden?[4],介紹了 CSS 中幾種裁剪元素的方式,而其中,最適合利用在這個效果的,就是 -- clip-path。

利用 clip-path,可以非常好的實現(xiàn),動態(tài)裁剪的功能,并且,代碼也非常簡單:

  1. <div class="g-container"></div> 
  1. .g-container { 
  2.     position: relative
  3.     width: 400px; 
  4.     height: 300px; 
  5.     overflow: hidden; 
  6.     transition: clip-path .3s linear; 
  7.     clip-path: circle(20px at 44px 44px); 
  8.     background: #fff; 
  9.      
  10.     &:hover { 
  11.         clip-path: circle(460px at 44px 44px); 
  12.     } 

我們只需要利用 clip-path,在最開始的時候,將一個矩形 div,利用 clip-path: circle(20px at 44px 44px) 裁剪成一個圓,當 hover 的時候,擴大裁剪圓的半徑到整個矩形范圍即可。

效果如下:

這樣,我們就能完美的實現(xiàn)題圖的效果,并且,內(nèi)置的 DOM 元素,直接寫進這個 div 內(nèi)部即可。

  1. <div class="g-container"
  2.     <ul> 
  3.         <li>11111</li> 
  4.         <li>22222</li> 
  5.         <li>33333</li> 
  6.         <li>44444</li> 
  7.     </ul> 
  8. </div> 

效果如下:

圖片

CodePen Demo -- clip-path zoom in animation[5]

很有意思的一個技巧,利用 clip-path 實現(xiàn)動態(tài)區(qū)域裁剪,希望大家能夠掌握。

最后

好了,本文到此結束,希望本文對你有所幫助 :)

參考資料

[1]CodePen Demo -- Material Design Menu By Bennett Feely:

https://codepen.io/bennettfeely/pen/fHdFb

[2]CodePen Demo -- box-shadow zoom in animation:

https://codepen.io/Chokcoco/pen/jOLRQNy

[3]CodePen Demo -- radial-gradient zoom in animation:

https://codepen.io/Chokcoco/pen/RwZOqWb

[4]如何不使用 overflow: hidden 實現(xiàn) overflow: hidden?:

https://github.com/chokcoco/iCSS/issues/90

[5]CodePen Demo -- clip-path zoom in animation:

https://codepen.io/Chokcoco/pen/yLorrRm

 

責任編輯:姜華 來源: iCSS前端趣聞
相關推薦

2017-05-11 21:30:01

Android動態(tài)代理ServiceHook

2023-12-13 13:04:55

CLIPRGB模型

2023-09-12 09:43:33

JavaMySQL

2025-02-18 12:00:00

ROIPython計算機視覺

2022-03-31 07:46:17

CSS動畫技巧

2009-12-09 13:02:18

靜態(tài)路由動態(tài)路由

2021-01-08 05:22:47

Spark動態(tài)優(yōu)化

2023-09-12 13:59:41

OpenAI數(shù)據(jù)集

2023-03-08 07:43:07

DUCC配置平臺

2024-08-13 09:16:30

2025-04-08 03:00:00

2022-12-30 08:29:07

Nacos動態(tài)化線程池

2025-04-07 05:30:00

2021-07-13 06:10:02

CSS 技巧background-

2010-09-01 13:37:58

CSSclip屬性

2010-08-05 13:59:56

路由器

2022-09-02 15:08:02

Python郵件發(fā)送

2017-01-11 18:36:04

Android矩形區(qū)域截屏移動開發(fā)

2021-02-25 15:14:12

鴻蒙HarmonyOS應用開發(fā)

2023-03-19 17:21:31

CLIP架構人工智能
點贊
收藏

51CTO技術棧公眾號