純CSS實現beautiful按鈕

大家好,我是若川。邀你進源碼共讀群學習交流。今天分享一篇好文。可收藏~

近期工作中遇到一個需求——實現一些酷炫的按鈕,看到效果圖之后,按鈕確實漂亮,有彈跳、顏色漸變、掃光、霓虹燈,瞬間激起了我的好奇心,開啟了研究實現之路。

所有button.gif

一、基礎儲備

實現這些漂亮的按鈕主要利用了一些CSS的屬性,主要有animation、background-size、background-position、linear-gradient(),下面對這四個內容進行簡要概述。

1.1 animation

animation?屬性用來指定一組或多組動畫,每組之間用逗號相隔,其語法如下所示,詳細用法可參考MDN:

animation:?name?duration?timing-function?delay?iteration-count?direction;

1.2 background-size

background-size?設置背景圖片大小。圖片可以保有其原有的尺寸,或者拉伸到新的尺寸,或者在保持其原有比例的同時縮放到元素的可用空間的尺寸,其語法如下所示,詳細用法可參考MDN:

background-size:?length|percentage|cover|contain;

1.3 background-position

background-position?為每一個背景圖片設置初始位置。這個位置是相對于由?background-origin?定義的位置圖層的,詳細用法可參考MDN.

在使用這個屬性時有一個位置必須特別注意,否則很難理解為什么background-position指定的位置和自己想要的不一樣,這個位置就是其百分比的計算公式,通過下面公式就可以理解設定百分比后背景圖片成了什么結果了:

background-postion:x?y;
x:{容器(container)的寬度—背景圖片的寬度}*x百分比,超出的部分隱藏。
y:{容器(container)的高度—背景圖片的高度}*y百分比,超出的部分隱藏。

1.4 linear-gradient

linear-gradient() ?函數用于創建一個表示兩種或多種顏色線性漸變的圖片。其結果屬于<gradient>數據類型,是一種特別的<image>數據類型,其語法如下所示,詳細用法可參考MDN:

background-image:?linear-gradient(direction,?color-stop1,?color-stop2,?...);

二、效果實現

下面的四種動畫效果其實就是充分利用CSS屬性實現的,讓我們具體來看看都是如何實現的。

2.1 彈跳效果

第一種效果是彈跳效果,所謂彈跳效果就是按鈕在大小之間變換,其思想如下:

  1. 創建一個靜態的按鈕;

  2. 然后利用animation屬性,創建動畫,當變換到50%時,按鈕變換到1.2倍,到動畫100%時按鈕又恢復原樣。

button1.gif
<div?class="button1"><span>立即下載</span>
</div>
.button1?{width:?200px;height:?46px;line-height:?46px;background:?#2e82ff;color:?#ffffff;font-size:?18px;border-radius:?27px;animation:?zoomIn?1.5s?infinite;text-align:?center;
}
@keyframes?zoomIn?{50%?{transform:?scale(1.2);}100%?{transform:?scale(1);}
}

2.2 顏色漸變效果

第二種是顏色漸變效果,所謂顏色漸變效果就是顏色從一種顏色到另一種顏色,然后循環如此,其思想如下:

  1. 創建一個靜態按鈕;

  2. 添加漸變顏色對稱的的背景色;

  3. 背景色x軸方向拉伸至200%,這樣就可以讓原來對稱軸處的背景色由中間到了右側;

  4. 最后利用animation實現操作位置的動畫,模擬出顏色不斷漸變的動畫。

button2.gif
<div?class="button2"><span>立即下載</span>
</div>
.button2?{display:?inline-block;width:?200px;height:?46px;line-height:?46px;color:?#ffffff;font-size:?18px;border-radius:?27px;text-align:?center;background-image:?linear-gradient(to?right,?#ff3300?0%,?#eb4402?25%,?#ffc404?50%,?#eb4402?75%,?#ff3300?100%);background-size:?200%;animation:?colorGradient?1.5s?infinite;
}@keyframes?colorGradient?{0%?{background-position:?0?0;}100%?{background-position:?100%?0;}
}

2.3 掃光效果

第三種是掃光效果,所謂掃光指的就是一個白色透明顏色從一端不斷向另一端掃描,其思想如下:

  1. 創建一個靜態按鈕;

  2. 在靜態按鈕前利用::before偽元素,設置該元素的背景色為白色微透明的顏色,并將該中心位置通過縮放移動到容器右側;

  3. 利用animation實現動畫,并不斷變換位置實現掃光效果。

button3.gif
<div?class="button3"><span>立即下載</span>
</div>
.button3?{width:?200px;height:?46px;line-height:?46px;background-color:?#2e82ff;color:?#ffffff;font-size:?18px;text-align:?center;border-radius:?27px;position:?relative;
}
.button3::before?{content:?"";position:?absolute;left:?0px;width:?100%;height:?100%;background-image:?linear-gradient(to?right,?rgba(255,?255,?255,?0)?30%,?rgba(255,?255,?255,?0.2)?50%,?rgba(255,?255,?255,?0)?70%);background-size:?200%;animation:?wipes?1s?infinite;
}
@keyframes?wipes?{0%?{background-position:?0?0;}100%?{background-position:?100%?0;}
}

2.4 霓虹燈效果

第四種是霓虹燈效果,所謂霓虹燈效果其實更像一種斜線在不斷移動,其原理如下所示:

  1. 創建一個靜態按鈕;

  2. 在靜態按鈕前利用::before偽元素,設置該元素的背景色為傾斜的霓虹燈效果,該效果實現是通過創建一個20px * 20px的正方形背景,然后利用linear-gradient將背景色135°方向漸變傾斜,實現小返回的霓虹燈,然后通過背景不斷repeat實現整個的效果;

  3. 利用animation實現動畫,并不斷變換位置實現霓虹燈效果。

button4.gif
<div?class="button4"><span>立即下載</span>
</div>
.button4?{width:?200px;height:?46px;line-height:?46px;background:?#2e82ff;color:?#ffffff;font-size:?18px;border-radius:?27px;text-align:?center;position:?relative;overflow:?hidden;
}
.button4:before?{content:?"";position:?absolute;left:?0px;width:?100%;height:?100%;background-size:?20px?20px;background-image:?linear-gradient(135deg,?rgba(255,?0,?0,?0.1)?0%,?rgba(255,?0,?0,?0.1)?25%,?rgba(255,?255,?255,?0.1)?25%,?rgba(255,?255,?255,?0.1)?50%,?rgba(255,?0,?0,?0.1)?50%,?rgba(255,?0,?0,?0.1)?75%,rgba(255,?255,?255,?0.1)?75%,?rgba(255,?255,?255,?0.1)?100%);animation:?moveblock?0.5s?linear?infinite;
}
@keyframes?moveblock{0%?{background-position:?0px?0px;}100%?{background-position:?20px?0px;}
}

最近組建了一個江西人的前端交流群,如果你是江西人可以加我微信?ruochuan12?私信 江西?拉你進群。


推薦閱讀

我在阿里招前端,該怎么幫你(可進面試群)
我讀源碼的經歷

初學者也能看懂的 Vue3 源碼中那些實用的基礎工具函數
老姚淺談:怎么學JavaScript?

·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》多篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,活躍在知乎@若川,掘金@若川。致力于分享前端開發經驗,愿景:幫助5年內前端人走向前列。

識別方二維碼加我微信、拉你進源碼共讀

今日話題

略。歡迎分享、收藏、點贊、在看我的公眾號文章~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275524.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275524.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275524.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux的內核有多小,Linux 內核有小bug?

今天讀著讀著Linux代碼&#xff0c;竟然無意中發現Linux 0.11內核有個小bug&#xff0c;呵呵&#xff0c;人非圣賢孰能無過。// 在目錄項數據塊中搜索匹配指定文件名的目錄項&#xff0c;首先讓de 指向數據塊&#xff0c;并在不超過目錄中目錄項數// 的條件下&#xff0c;循環執…

菜單窗口_菜單

菜單窗口The Hamburger Menu widget is on every other site nowadays. It has become synonymous with the web and, perhaps even more so, with web development. Have, for instance, a look at Dribbble or Codepen. There you’ll find a fair share of examples. They c…

帝國cms 打開打開轉換表文件失敗!

帝國cms 升級到最新版6.6 后 生成列表頁面和 搜索 時出現 “打開打開轉換表文件失敗&#xff01;” 跟蹤文件找到 include($file); 這行代碼時出錯非常納悶&#xff0c;這個是php的內部命令啊&#xff0c;跟帝國的編碼應該沒有關系一直沒有再往下細找&#xff0c;只好根據錯誤提…

怎么在PDF上修改文字,PDF修改文字的步驟

怎么在PDF文件上修改文字呢&#xff1f;其實現在的很多的PDF文件上會出現文字錯誤的情況&#xff0c;想要修改PDF文件上面的文字卻不知道怎么修改&#xff0c;想要修改PDF文件還是比較簡單的&#xff0c;使用專業的PDF編輯器就可以進行操作了&#xff0c;下面小編就為大家分享一…

linux raw限制端口訪出,使用Linux raw socket時需要注意的一些問題

本文的copyleft歸gfree.windgmail.com所有&#xff0c;使用GPL發布&#xff0c;可以自由拷貝&#xff0c;轉載。但轉載請保持文檔的完整性&#xff0c;注明原作者及原鏈接&#xff0c;嚴禁用于任何商業用途。作者&#xff1a;gfree.windgmail.com博客&#xff1a;linuxfocus.bl…

讀完 Vue 發布源碼,小姐姐回答了 leader 的提問,并優化了項目發布流程~

大家好&#xff0c;我是若川。這是 源碼共讀 第三期活動&#xff0c;紀年小姐姐的第三次投稿。紀年小姐姐學習完優化了自己的項目發布流程&#xff0c;而且回答了leader對她的提問&#xff0c;來看看她的思考和實踐。第三期是 Vue 3.2 發布了&#xff0c;那尤雨溪是怎么發布 Vu…

小程序背景圖片的坑

本人是前端菜鳥一個&#xff0c;比小白還要白&#xff0c;這完全是自己的經驗總結&#xff0c;并不是要給各位分享什么寶貴經驗哈&#xff0c;各位大佬不喜勿噴&#xff0c;不然會打擊到我的哈哈因為公司要求做幾個小程序的頁面&#xff0c;我不得不拾起丟棄了幾個月的小程序開…

SimpleAdapter類使用方法

SimpleAdapter的構造函數是&#xff1a; public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) 官方說明了其各個參數含義&#xff0c;我這里根據自己的理解解釋下&#xff1a; 第一個context&…

小程序 富文本自適應屏幕_自適應文本:跨屏幕尺寸構建可讀文本

小程序 富文本自適應屏幕Many of you may already know about responsive web design. Cited from Wikipedia, responsive web design (RWD) is an approach to web design that makes web pages render well on a variety of devices and windows or screen sizes. The respon…

Vue、React 之間如何實現代碼移植?

大家好&#xff0c;我是若川。面對前端最火的兩個框架&#xff0c;學 React 還是 Vue &#xff1f;這可能是每個前端人都曾糾結過的問題。不過&#xff0c;現在你不用糾結了——因為很多公司都是兩個框架都有大量的應用&#xff0c;取決于不同團隊的技術選型&#xff0c;特別是…

linux mariadb 亂碼,配置mariadb遠程訪問權限,解決數據庫亂碼問題

配置mariadb遠程訪問權限&#xff1a;1)登錄數據庫:# mysql -uroot -p2)配置授權數據庫用戶遠程訪問權限&#xff0c;%表示所有遠程IP&#xff0c;也可以指定IP。WITH GRANT OPTION表示mysql數據庫的grant表中重新加載權限數據&#xff1a;GRANT ALL PRIVILEGES ON *.* TO 用戶…

平面設計師和ui設計師_游戲設計師的平面設計

平面設計師和ui設計師Design is a very ancient practice, but graphic design really found its core principles post World War One. Games are also very ancient but video games are still finding their feet. I think graphic design has a few things to teach people…

從零開發一個命令行腳手架工具 等

大家好&#xff0c;我是若川。今天周末&#xff0c;話不多說&#xff0c;這一次花了幾小時精心為大家挑選了20余篇好文&#xff0c;供大家閱讀學習。本文閱讀技巧&#xff0c;先粗看標題&#xff0c;感興趣可以都關注一波&#xff0c;絕對不虧。前端宇宙小編就職于某大廠&#…

linux的HAL庫函數,STM32 HAL庫 IIC 協議庫函數

/* 第1個參數為I2C操作句柄第2個參數為從機設備地址第3個參數為從機寄存器地址第4個參數為從機寄存器地址長度第5個參數為發送的數據的起始地址第6個參數為傳輸數據的大小第7個參數為操作超時時間 */HAL_I2C_Mem_Write(&hi2c2,salve_add,0,0,PA_BUFF,sizeof(PA_BUFF),0x10)…

pku acm 2140 Herd Sums http://acm.pku.edu.cn/JudgeOnline/problem?id=2140

2140代碼短小精悍&#xff1a;#include<stdio.h> int main() { int cnt0,i; long s; scanf("%ld",&s); for(i1;(i1)*i/2<s;i)if((s-(i-1)*i/2)%i0)cnt; printf("%d\n",cnt); return 0; }轉載于:https://www.cnblogs.com/Chinese-Coder-C…

java合成海報的工具類

2019獨角獸企業重金招聘Python工程師標準>>> package io.renren.common.utils;import cn.hutool.core.lang.Console; import io.renren.modules.oss.cloud.OSSFactory;import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; import java.a…

a說b說謊b說c說謊說d說_說謊的眼睛及其同伙

a說b說謊b說c說謊說d說The eye is a complex and temperamental organ. By the end of this article, designers will have a better understanding of how the eye works with the brain, how it deconstructs images that the brain stitches back up again, and how the two…

一名運營,自學一年前端,成功入職杭州某獨角獸企業,他的面試經驗和學習方法等分享...

大家好&#xff0c;我是若川。這是我的微信群里小伙伴年年 的投稿。他是19年畢業&#xff0c;之前做的是運營相關的工作&#xff0c;在我的交流群里非常活躍&#xff0c;自學一年前端&#xff0c;目前成功轉行入職杭州一家獨角獸企業。相信他的文章能帶給大家一些啟發和激勵。0…

linux下svn relocate,如何進行svn?relocate?操作

1。進入工作復本&#xff03;> cd ~/test2。查看倉庫地址(URL)&#xff03;> svn info路徑&#xff1a;.地址(URL)&#xff1a;http://192.168.28.1/repos/test檔案庫 UUID&#xff1a;a81f9bed-3506-0410-b369-e50476f75162修訂版&#xff1a;44節點種類&#xff1a;目錄…

教你怎么買虛擬空間(轉)

虛擬空間是什么?經常聽到站長們在群里問&#xff0c;哪里的虛擬空間好?哪里的虛擬空間性能好?哪里的虛擬空間便宜?虛擬空間是當今IDC行業的一個重要銷售產品&#xff0c;虛擬空間也是中國站長們建設網站中最常應用的網站載體。各種數據說明&#xff0c;虛擬空間的好壞能影響…