成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[436815]]

背景

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

圖片

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

這個(gè)效果還是有一些值得探討學(xué)習(xí)的點(diǎn),下面我們一起來(lái)看看。

如何實(shí)現(xiàn)這樣一個(gè)類(lèi)似的效果?

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

這里我簡(jiǎn)單羅列一些可能的辦法:

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

快速的一個(gè)一個(gè)過(guò)一下。

使用 box-shadow 實(shí)現(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. 外層一個(gè)設(shè)置了 overflow: hideen 的遮罩
  2. 內(nèi)層元素 hover 的時(shí)候,實(shí)現(xiàn)一個(gè) box-shadow: 0 0 0 0 #fff 到 box-shadow: 0 0 0 420px #fff 的變化

效果如下:

圖片

整體的動(dòng)畫(huà)是模擬出來(lái)了,但是它最致命的問(wèn)題有兩個(gè):

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

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

使用漸變 radial-gradient 實(shí)現(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.     } 

我們通過(guò)控制徑向漸變的動(dòng)畫(huà)效果,在 hover 的時(shí)候,讓原本只是一個(gè)小圓背景,變成一個(gè)大圓背景,效果如下:

圖片

emmm,效果確實(shí)是還原了,問(wèn)題也很致命:

  1. 由于是背景的變化,所以鼠標(biāo)不需要 hover 到小圓上,只需要進(jìn)入 div 的范圍,動(dòng)畫(huà)就會(huì)開(kāi)始,這顯然是不對(duì)的
  2. 和第一種 box-shadow 的方法類(lèi)似,隱藏在白色之下的導(dǎo)航元素的 DOM 不好放置

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

emmm,還有一種方法,通過(guò)縮放 transform: scale(),也會(huì)存一定問(wèn)題,這里不繼續(xù)展開(kāi)。

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

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

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

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

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

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

  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,在最開(kāi)始的時(shí)候,將一個(gè)矩形 div,利用 clip-path: circle(20px at 44px 44px) 裁剪成一個(gè)圓,當(dāng) hover 的時(shí)候,擴(kuò)大裁剪圓的半徑到整個(gè)矩形范圍即可。

效果如下:

這樣,我們就能完美的實(shí)現(xiàn)題圖的效果,并且,內(nèi)置的 DOM 元素,直接寫(xiě)進(jìn)這個(gè) 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]

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

最后

好了,本文到此結(jié)束,希望本文對(duì)你有所幫助 :)

參考資料

[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 實(shí)現(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

 

責(zé)任編輯:姜華 來(lái)源: iCSS前端趣聞
相關(guān)推薦

2017-05-11 21:30:01

Android動(dòng)態(tài)代理ServiceHook

2023-12-13 13:04:55

CLIPRGB模型

2023-09-12 09:43:33

JavaMySQL

2022-03-31 07:46:17

CSS動(dòng)畫(huà)技巧

2025-02-18 12:00:00

ROIPython計(jì)算機(jī)視覺(jué)

2009-12-09 13:02:18

靜態(tài)路由動(dòng)態(tài)路由

2021-01-08 05:22:47

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

2023-09-12 13:59:41

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

2023-03-08 07:43:07

DUCC配置平臺(tái)

2024-08-13 09:16:30

2025-04-08 03:00:00

2025-04-07 05:30:00

2022-12-30 08:29:07

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

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ā)送

2010-08-31 10:57:44

clipCSS

2010-09-14 16:04:40

CSSclip屬性

2017-01-11 18:36:04

Android矩形區(qū)域截屏移動(dòng)開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美毛片免费观看 | 日韩三级电影在线看 | 久久成人18免费网站 | 黑人巨大精品欧美黑白配亚洲 | 一区二区三区视频在线 | 国产精品一区二区三区久久久 | 一级a性色生活片久久毛片 一级特黄a大片 | 国产精品视频久久久 | 日韩手机在线视频 | 久久香蕉精品视频 | 四虎成人在线播放 | 国产传媒毛片精品视频第一次 | 日本三级全黄三级a | 成人免费视频网站在线观看 | 日韩成人精品一区二区三区 | 香蕉国产在线视频 | 国产激情一区二区三区 | 久热久| 黄视频免费观看 | 欧美看片 | 精品国产乱码一区二区三区a | 日韩av最新网址 | 国产乱码精品一品二品 | 国产精品成人国产乱一区 | 美国av毛片| 精品综合久久久 | 亚洲免费观看视频 | 国产高清免费 | 精品国产一区二区三区性色av | 九色网址| 欧美一级一 | 亚洲视频一区 | 日韩精品一区二区三区免费观看 | 龙珠z在线观看 | 视频第一区 | 日韩精品一区二区三区老鸭窝 | 影音先锋成人资源 | 国产高清免费 | 欧美电影免费观看 | 91电影 | 国产精品久久久久久久免费观看 |