国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
思路
CSS實作
結構
hover小互動體驗
active嘗試
focus體驗
checked
首頁 web前端 css教學 如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果

如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果

Oct 19, 2018 pm 04:57 PM
css css3 css3動畫 html 純css實現(xiàn)

這篇文章帶給大家的內容是關於如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

大家通常應該常常見到這種特效,很酷不是嗎

如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果

這是GoogleMaterial Design中最常見的特效了,市面上也有很多現(xiàn)成的js庫,用來模擬這個特效。但往往要引入一大堆js和css,其實在已有的專案中,可能只是想加一個這樣的按鈕,來增強用戶體驗,這些js庫就顯得有些過於龐大了,同時由於是js實現(xiàn),很多時候還要注意加載問題。

那麼,有沒有辦法用css來實現(xiàn)這一特效呢

思路

#其實就是一個動畫,一個正圓從小變大,用css3中的動畫很容易實現(xiàn)

範例程式碼

@keyframes?ripple{
????from?{
????????transform:?scale(0);
????????opacity:?1;
????}
????to?{
????????transform:?scale(1);
????????opacity:?0;
????}
}

通常用js來實現(xiàn)的方式很簡單,就是給點擊元素添加一個class,然後再動畫結束後移除該class

#範例程式碼

var?btn?=?document.getElementById('btn');
btn.addeventlistener('click',function(){
??addClass(btn,'animate')
},false)
btn.addeventlistener('transitionend',function(){//監(jiān)聽css3動畫結束
??removeClass(btn,'animate')
},false)

那麼如何透過css來實現(xiàn)動畫的觸發(fā)呢?

CSS實作

css中與滑鼠互動的偽類別主要有

  • hover滑鼠經過

  • :active滑鼠按下

  • :focus滑鼠聚焦

  • :checked滑鼠選取

#很多情況下,我們頁面中的效果都是透過hover來實現(xiàn)的,滑鼠放上去觸發(fā)一個效果,離開還原,但是如果放上去馬上離開,那麼動畫也會馬上結束。

我們先試試看。

結構

這是我們寫好的頁面結構和樣式

<style>
.btn{ 
  display: block; 
  width: 300px; 
  outline: 0; 
  overflow: hidden;  
  position: relative; 
  transition: .3s; 
  cursor: pointer; 
  user-select: none; 
  height: 100px; 
  text-align: center; 
  line-height: 100px; 
  font-size: 50px; 
  background: tomato; 
  color: #fff;  
  border-radius: 10px;
}
</style>
<a>button</a>

很簡單,就是一個普通的按鈕樣式

如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果

下面我們在按鈕中加入我們需要的正圓。

我們用偽元素來實現(xiàn)

.btn:after{
????content:?'';
????position:?absolute;
????width:?100%;
????padding-top:?100%;
????background:?transparent;
????border-radius:?50%;
????left:?50%;
????top:?50%;
????transform:?translate(-50%,-50%)
}

我們把上面的overflow: hidden去掉,把這個圓縮小一點看看效果

如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果

然後,我們寫個縮放的動畫

@keyframes?ripple{
????from?{
????????transform:translate(-50%,-50%)?scale(0);
????????/**由于我們默認寫了變換屬性,所以這里要補上translate(-50%,-50%),不然就會被替換了**/
????????background:?rgba(0,0,0,.25);
????}
????to?{
????????transform:translate(-50%,-50%)?scale(1);
????????background:?transparent;
????}
}

hover小互動體驗

滑鼠經過試試看?

.btn:hover:after{
??animation:?ripple?1s;
}

如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果

效果還是不錯的,就是如果滑鼠離開的太快,那麼剛剛擴大的圓馬上就縮回去了,有點違和

但這不是我們想要的效果呀。我們希望的是點擊一次觸發(fā)一次,而不是這樣放上去就完了,再也不會觸發(fā)了。

active嘗試

平常工作中,active用到的也比較多,通常是用在點擊的效果上,那就拿來試試?

.btn:active:after{
??animation:?ripple?1s;
}

如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果

效果也是差強人意,有點類似滑鼠按住的意思,你必須一直按住滑鼠,才能完整的觸發(fā),比如說上面的例子,動畫的運行實現(xiàn)是1s,那麼你必須點在那個按鈕上持續(xù)1s才能看到完整的動畫效果,否則,就像上面當滑鼠離開一樣,動畫馬上就縮回去了

focus體驗

如果需要讓任何一個元素獲得焦點,你可以給太指定一個tabindex屬性

<a>button</a>
.btn:focus:after{
??animation:?ripple?1s;
}

如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果

foucs也可以觸發(fā),只是觸發(fā)以後只有等失去焦點之後才能再次觸發(fā),實際的操作表現(xiàn)就是,點過以後,再點一下外面的空白

就沒有辦法了嗎?

當然還是有的,放在最後的肯定就是解決方式,haha

checked

checked並不能直接觸發(fā),這是表單元素選取後觸發(fā)的,為此,我們需要改造一下頁面結構

<label>
??<input><span>button</span>
</label>

我們在這裡換成了lable併計入了input[type=checkbox]標籤,主要是為了在點擊按鈕的時候觸發(fā)input選中。

加一點樣式

.btn>span:after{
??/**換一下選擇器**/
}
.btn>input[type=checkbox]{
??display:?none
}
.btn>input[type=checkbox]:checked+span:after{
??animation:?ripple?1s;
}

這樣也能觸發(fā)動畫,但問題是,當再次點擊的時候就成了非選中狀態(tài)了,怎么觸發(fā)動畫呢?

其實可以用:not來實現(xiàn)

.btn>input[type=checkbox]:not(:checked)+span:after{
??animation:?ripple?1s;
}

乍一看好像挺聰明的,仔細一想,正反兩個都寫了動畫,不就跟:checked沒關系了?還不如直接

.btn>input[type=checkbox]+span:after{
??animation:?ripple?1s;
}

無限輪回中...

這個問題困擾了我好久,不過皇天不負有心人,后來試著在兩種狀態(tài)下觸發(fā)不同的動畫是可以分別觸發(fā)的,如下

.btn>input[type=checkbox]:checked+span:after{
??animation:?ripple1?1s;
}
.btn>input[type=checkbox]:not(:checked)+span:after{
??animation:?ripple2?1s;
}

這個應該很好理解吧。

那么,重點來了,現(xiàn)在把動畫ripple1ripple2里面的動畫過程都改成一樣,也是可以分別觸發(fā)的,也就是說,只要動畫名稱不一樣,css都會當成不同的動畫來處理

這樣就簡單了,我們只需要默認一個狀態(tài),選中一個狀態(tài),然后分別觸發(fā)名稱不同的動畫就行了~

.btn>input[type=checkbox]+span:after{
??animation:?ripple-in?1s;
}
.btn>input[type=checkbox]:checked+span:after{
??animation:?ripple-out?1s;
}
@keyframes?ripple-in{
????from?{
????????transform:translate(-50%,-50%)?scale(0);
????????background:?rgba(0,0,0,.25);
????}
????to?{
????????transform:translate(-50%,-50%)?scale(1);
????????background:?transparent;
????}
}
@keyframes?ripple-out{/*僅僅名稱不同*/
????from?{
????????transform:translate(-50%,-50%)?scale(0);
????????background:?rgba(0,0,0,.25);
????}
????to?{
????????transform:translate(-50%,-50%)?scale(1);
????????background:?transparent;
????}
}

效果就如文章一開始所示,完美

完整demo如下

https://codepen.io/xboxyan/pe...

一些不足

由于上述動畫樣式在默認情況下就會被觸發(fā),所以頁面加載進來就會看到按鈕上的水滴動畫運動一次,不過也不是特別明顯,還可以接受。

其次,實際效果肯定是希望鼠標點擊哪里,就以該點為中心擴散,我們css肯定是做不到這點的,只能從中心擴散,這也只能妥協(xié)了。這里提供一個思路,可以使用css的變量,每次點擊的時候吧相應的值存在style里面,這樣css中也能用上。

希望能用css今后挖掘出更多有趣的效果^

以上是如何使用純css實現(xiàn)Material Design中按鈕的水滴動畫效果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

構建網頁的HTML元素是什麼? 構建網頁的HTML元素是什麼? Jul 03, 2025 am 02:34 AM

網頁結構需核心HTML元素支撐,1.頁面整體結構由、、構成,其中為根元素,存放元信息,展示內容;2.內容組織依賴標題(-)、段落()及區(qū)塊標籤(如、)以提升條理與SEO;3.導航通過與實現(xiàn),常用組織鏈接並輔以aria-current屬性增強可訪問性;4.表單交互涉及、、與,確保用戶輸入與提交功能完整。正確使用這些元素能提升頁面清晰度、維護性及搜索引擎優(yōu)化。

CSS教程,用於創(chuàng)建加載旋轉器和動畫 CSS教程,用於創(chuàng)建加載旋轉器和動畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉器的方法有三種:1.使用邊框的基本旋轉器,通過HTML和CSS實現(xiàn)簡單動畫;2.使用多個點的自定義旋轉器,通過不同延遲時間實現(xiàn)跳動效果;3.在按鈕中添加旋轉器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調了設計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

使用HTML屬性實現(xiàn)客戶端表單驗證。 使用HTML屬性實現(xiàn)客戶端表單驗證。 Jul 03, 2025 am 02:31 AM

client-sideformvalidationCanbedOnewithOutJavaScriptbyusinghtmlattributes.1)useRequiredToEnforCemandatoryField.2)validateMailsAndUrllSwithTyPeatTributesLikeEmailOrurl,orusepatternwithRegegexforCustomAlorurl

如何使用HTML將選項分組? 如何使用HTML將選項分組? Jul 04, 2025 am 03:16 AM

在HTML中使用標籤可以對下拉菜單中的選項進行分組。具體方法是用包裹一組元素,並通過label屬性定義組名,如:1.包含蘋果、香蕉、橙子等選項;2.包含胡蘿蔔、西蘭花等選項;3.每個為一個獨立分組,組內選項自動縮進。注意事項包括:①不支持嵌套;②可通過disabled屬性禁用整個組;③樣式受限需結合CSS或第三方庫美化;可使用Select2等插件增強功能。

使用HTML按鈕元素實現(xiàn)可點擊按鈕 使用HTML按鈕元素實現(xiàn)可點擊按鈕 Jul 07, 2025 am 02:31 AM

要使用HTML的button元素實現(xiàn)可點擊按鈕,首先需掌握其基本用法與常見註意事項。 1.使用標籤創(chuàng)建按鈕,並通過type屬性定義行為(如button、submit、reset),默認為submit;2.通過JavaScript添加交互功能,可內聯(lián)寫法或通過ID綁定事件監(jiān)聽器以提升維護性;3.利用CSS自定義樣式,包括背景色、邊框、圓角及hover/active狀態(tài)效果,增強用戶體驗;4.注意常見問題:確保未啟用disabled屬性、正確綁定JS事件、避免佈局遮擋,並藉助開發(fā)者工具排查異常。掌握這

將CSS和JavaScript與HTML5結構有效整合。 將CSS和JavaScript與HTML5結構有效整合。 Jul 12, 2025 am 03:01 AM

HTML5、CSS和JavaScript應通過語義化標籤、合理加載順序與解耦設計高效結合。 1.使用HTML5語義化標籤如、提升結構清晰度與可維護性,利於SEO和無障礙訪問;2.CSS應置於中,使用外部文件並按模塊拆分,避免內聯(lián)樣式與延遲加載問題;3.JavaScript推薦放在前引入,使用defer或async異步加載以避免阻塞渲染;4.減少三者間強依賴,通過data-*屬性驅動行為、類名控制狀態(tài),統(tǒng)一命名規(guī)範提升協(xié)作效率。這些方法能有效優(yōu)化頁面性能與團隊協(xié)作。

JavaScript時間對象,某人構建了一個eactexe,在Google Chrome上更快的網站等等 JavaScript時間對象,某人構建了一個eactexe,在Google Chrome上更快的網站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點關注:Oracle與Deno的商標糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標之爭Oracle試圖註冊“JavaScript”商標的舉動引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請願書,要求取消該商標,他認為JavaScript是一個開放標準,不應由Oracle

在HTML頭部元素中配置文檔元數(shù)據(jù) 在HTML頭部元素中配置文檔元數(shù)據(jù) Jul 09, 2025 am 02:30 AM

HTMLhead中的元數(shù)據(jù)對SEO、社交分享和瀏覽器行為至關重要。 1.設置頁面標題與描述,使用和並保持簡潔唯一;2.添加OpenGraph與Twitter卡片信息以優(yōu)化社交分享效果,注意圖片尺寸並使用調試工具測試;3.定義字符集與視口設置確保多語言支持與移動端適配;4.可選標籤如作者版權、robots控制及canonical防止重複內容也應合理配置。

See all articles