文作者:HuangYiBall
這次為了避免過于硬核的文章引起萌新“不適”,決定將教程更加新手向!如果你是一個剛入門的吉他萌新或者有學吉他的想法而猶豫遲遲未入手的朋友,可以先參考我的第一篇文章,鏈接如下~
零基礎吉他 篇一:萌新小白想學吉他?看完這個你就知道學吉他應該知道什么!
(請前往什么值得買站內搜索相關內容)
希望大家還是能點贊、評論、分享、打賞四連!畢竟大家的熱愛才是我繼續專注下去的動力~
好了,本期教程如題!我將分為以下幾點(善用導航欄方便大家找到知識點)
六線譜
六線譜
如你所見,學吉他有更直觀(在指型上)的譜子,也就是六線譜了!看不懂嗎?沒關系,接下來就來教你如何識譜!
吉他弦
首先將你手中的琴按這個樣子擺放,上一章提到,常用的民謠吉他是有6根弦的。所以每根弦其實都有一個屬于自己的名字,從最細的弦到最粗的弦名稱分別就是1~6弦,順序如圖所示。現在再回到我們的六線譜!
六線譜弦順序
沒錯,六線譜順序和你琴這樣擺放的順序是一致的,也是說從上面的弦到下面的弦的順序就是1~6弦~是不是很好理解很直觀~接下來我們就要確定音在指板上的位置了!(第一篇文章中有提到“品”這個概念,還不了解的朋友快回去科普一下吧!)
六線譜實際上和坐標軸確定的原理是一樣的!
六線譜弦和品確定位置
拿紅圈圈中的3舉例,3就是第三品的意思,而它所在的弦就是5弦,所以我們就可以確定這個音的位置在——5弦3品,以此類推,吉他指板上的任何一個音都可以用這個方法確定!
可能有朋友要問了,那后面譜子中0是什么意思呢?0代表的意思即是空弦的意思,即你左手不用按而直接撥動相應的琴弦即可了~到這里你是否能快速識六線譜了呢?
關于六線譜中更多的標記意思我會在以后曲目練習中逐一給大家講解,或者自己有興趣的可以去自學一下哦~
簡譜
除了六線譜以外,我們還需要簡譜來輔助我們能辨認每一個音符的時值。(五線譜將在以后的文章中單獨一提)
簡譜
如↑所示,這個我們就可以稱作是簡譜了,而簡單的兒歌譜中基本都會以這樣的方式出來,所以簡譜是我們作為萌新必須去學習的一個點~那么既然我說到簡譜是輔助我們認識節奏把控節奏的,那么它上面的數字如何來告訴我們節奏的信息呢?
簡譜
上面這張就是簡譜的圖示了~你需要先記的是四分音符,也就是單純的一個數字!(如果你不懂四分音符、八分音符等等都沒關系,在今后的課程中我會講解)但你必須得以4分音符為基礎向上、下這樣記憶,會節約你許多時間!
簡譜的含義
例如我們看到這邊的祝你這兩個音符,查表你就會發現,這就是2個8分音符,沒錯就是如此簡單,你學會了嗎?
APP推薦
在APP推薦部分的話我分為PC端和移動端推薦。
PC端:Guitar Pro、Transcribe!、chordpulse
移動端:吉他社、GuitarTuna、音樂備忘錄
GuitarPro6
先介紹一下guitar pro這個軟件,我用的6的破解版本,不過現在正版也不貴,大家也可以支持一下正版。這是一個基本是個吉他手都用過的打譜軟件,支持多種格式的譜子查看,軌道等等都比較直觀,音源的話當然沒有cubase這些宿主軟件來的更好,但普通的打譜,聽效果很夠用了~
http://www.guitarpro.cc/goumai.html
這是官網正版的購買鏈接!
Transcribe!
一款十分好用的扒帶軟件,可以放慢、加慢、換聲道、變調等等,進階的朋友們可以試試。當然我用的也是破解版。
chordpulse
一個伴奏軟件,非常方便,也有許多的律動可以選擇,可以導出midi文件,做即興用還是很方便的~
當然我用的也是破解版:)
這是正版鏈接~
吉他社
個人比較喜歡在這邊找點簡單的譜子,比較快捷,而且可以直接用這個看譜子比較方便。但是該APP優化并不是很好,所以建議有PC的同學多用PC找譜子吧~
↑這是PC端的網址
音樂備忘錄
可以錄制你即時的靈感,并且能給你的音樂配上和弦和鼓,但是精準度不是很高,不過作為娛樂和記錄樂句來看很方便,記得沒錯的話只在ios上有這款軟件~
guitartuna
在上一篇文章中提到的一個APP,可以用作調音器、也能在工具中找到節拍器,對于練習來說真是十分方便了!還能通過玩游戲記和弦..雖然很不提倡這樣的根據形狀記,但是在初期對萌新來說也是蠻有效果的~
調音
關于調音,是十分基礎但十分重要的一步,如果連音都不準又如何演奏呢?
調音表
TC Electronic PolyTune Clip 民謠木吉他電吉他貝司調音表校音器349元天貓精選
去購買
(TC是我用到現在非常好的一款調音表了~)
一般為了更好的靈敏度,會選擇調音表或調音的單塊等等,但是手機上的APP其實夠用,差距并沒有大到離譜!
接下來就讓我們回到文章1中的這張圖片來講講如何調音吧~
調音器
首先每根弦都有自己一個常用的標準音高,如圖所示,從6弦~1弦的音高分別是EADGBE,你也沒有看錯1弦和6弦都是E,只不過是差了一個8度的關系(如果你不懂什么是八度,那么以后會提到)。你要事首先就是記住這6個字母,因為你以后每一次的練琴都需要經歷——調音,這個環節。
步驟:從6弦開始撥響6弦空弦(手機靠近音孔或調壓器夾在琴頭)→看表中指針在左(音低了)還是在右(音高了)→如果音低了就轉旋鈕(逆時針緊),高了反之(注意123弦和456方向相反)→小幅度調節,并用右手撥響弦→指針到中間綠色弦表示調準了!(+-1、2影響不會很大,不能太多!)
當然還有其他的調音方法,將在以后的教程中教給大家~
姿勢
姿勢方面是一個很重要的問題,不正確的姿勢會產生很大的負面影響,所以初學者練琴的時候首先要關注自己的姿勢問題。
首先我們先認識我們左右手的代號。
右手代號
左手代號
記住這些代號將在以后的識譜中更加方便~
好了接下來我們先講持琴姿勢(針對慣用手是右手的同學)
持琴姿勢
①用自己上肢的手臂靠住琴的面板
②琴的圓弧處靠在右腿上(如果感覺琴低了,可以加個腳墊)
③琴頭應略微向上傾斜
完成以上三點應該是已經形成支點,你不需要用左手去扶琴都不好有晃動了~
接下來先談右手姿勢,給大家上一個我教的小孩子的姿勢。
右手姿勢
①五指基本成一個圓弧度(大拇指略微前于其余4指)
②除大拇指外四指自然彎曲,且關節都要保持“突出”
③通常4、5、6弦上的音由大拇指彈奏、而3、2、1弦上的音分別由食指、中指、無名指彈奏
④整體位置在音孔上面(比較舒服的地方)
⑤上臂和手腕應自然不突起,整只手靠住面板自然掛下,基本成一條直線
左手姿勢
左手姿勢其實分很多狀態下的,并不是固定的,比如彈和弦的時候,比如solo的時候等等,這邊要說的是偏古典一點的姿勢(今后的爬格子練習應嚴格按照這個姿勢)
①紅色圈所示,第一個關節必須全部凸起,手指近似垂直按在指板上
②如藍圈所示,手指應該按在這個品的靠后的品絲之前一點
③如綠圈所示,手腕適量向前,保持一個舒服的姿勢(一開始當然難受啦!)
④中指和無名指別像圖中分那么開,正常拉開就行!
⑤大拇指位置處于四指的中間部分,不能平躺著!(重點中的重點)
⑥大拇指應微側著按,用第一關節用力頂住琴頸,并且在琴頸一半偏上的位置(意思就是:正面看過去就應該如上面那張右手姿勢圖一樣,是看不見大拇指的!)
好了大概的姿勢要點就是這些,例如和弦應該用怎么樣的姿勢我將在后面的和弦學習中提及等等~
希望大家在開始學習的時候一定要嚴格要求自己的姿勢(重點)
最后
以上就是挑戰一星期學會簡單兒歌的第一天內容了,希望剛入門的朋友們都能按照較為正確的這個姿勢嚴格要求自己的手型(對,沒錯我反復提這一點,因為它很重要),而右手左手如何彈奏的問題,我將在下一文章中給大家講解,總之,學完這節課希望你對譜子、我們常用的軟件、簡譜、姿勢有了初步基本的了解了~!
都看到這了!還不給個點贊、關注、分享、打賞四連???
如果你還有不懂的問題和疑惑,都可以在留言區評論哦,我都會即時回復大家的!最后,關注我!!一起挑戰一星期學兒歌吧!(當然,還有有更進階的干貨啦~)
那么我們下期見!
信看過《哈利·波特》的小伙伴都曾幻想過自己能夠進入霍格沃茨,擁有像哈利那樣帥帥的疤痕,以及神秘的魔法力量。
圖源:《哈利·波特與魔法石》官方劇照
然而實際情況是:熬夜火鍋一時爽,痘痘留疤火葬場。
圖源:https://kknews.cc/fashion/xvpa4e9.html
不過現實生活中,也會有人即使受傷也不容易留下疤痕,那么人的皮膚上為什么會留下痘印或者疤痕?為什么有的人就不怎么留疤呢?
Part. 1
為了修復傷口而出現的疤痕
疤痕通常是皮膚軟組織受到傷害后自主修復所形成。不過既然都修復了咋還留點痕跡呢?這是因為修復后所形成的皮膚組織和正常的皮膚是有所不同的。
現在讓我們在顯微鏡下一起來觀察看看二者有什么不同。在顯微鏡下,能看到人的健康皮膚里有很多發揮不同功能的細胞。這些松散的細胞由膠原蛋白像繩子一樣緊緊地綁在一起,并形成緊密的皮膚組織,這也讓細胞間能夠傳輸需要的營養物質和信息。當皮膚受傷時,這些連接細胞的繩子也就隨之斷開,從而形成傷口。
藍色的線表示膠原蛋白,裂縫表示傷口圖片來源:Ted
這時候,皮膚為了愈合,會在傷口也就是繩子斷裂的地方由成纖維細胞形成很多新的繩子,即膠原蛋白,它們會嘗試把斷裂的地方連起來。
雖然通過這種方式傷口可以愈合,但是健康皮膚中膠原蛋白的排列往往規整又復雜,而修復后的膠原蛋白只能單向簡單排列。這導致新形成的皮膚延展性和敏感度都不如從前。修復后皮膚的低延展性也導致其外表看著與正常皮膚不同,也就是我們看到的疤痕。
而更糟糕的是,傷口的修復可能會用力過猛,產生過量的膠原蛋白。這些過量的膠原蛋白會影響皮膚正常的功能,比如出汗生長毛發,甚至使得皮膚增生突起,讓疤痕看起來更加明顯。
傷口修復過程中過量膠原蛋白積累導致增生形成肥厚疤痕圖源:Veer圖庫
Part. 2
為什么有人不容易留疤?
傷疤其實是生物進化的結果,無脊椎動物比如章魚蝸牛等受傷后可以按照原樣修復損傷,而脊椎動物為了能更快地修復傷口,進化出傷疤這種機制。在我們看來非常可惡的傷疤,對于在野外生活的動物們卻有重要的意義,因為傷疤能讓傷口快速的閉合,從而減少發炎率,進而提高存活能力。
這種進化同樣也體現在人類胚胎發育中,人類的早期胚胎受傷后是可以完全按照原樣修復的,在之后的發育過程中才逐漸出現傷疤這種修復方式。胚胎發育的過程重現了生物進化的歷程,這也從側面說明了傷疤修復是進化的產物。
渦蟲在受傷后可以完全修復自己,甚至被切成幾段就會成長為幾個新的個體
圖源:https://www.peekme.cc/post/1005627
由于每個人傷疤修復啟動的強度不同,會出現有的人容易留疤,而有的人不容易留疤,這些性狀也可以遺傳給下一代。例如不同人種之間就存在明顯的差異,黑種人、黃種人比白人更容易留下疤痕。
對于不同年齡的人來說,疤痕的形成也是有所不同的。研究顯示,老年人比青壯年更容易長疤,這是由于老年人身體里引起傷疤修復的炎癥和細胞因子與人類胚胎早期的表達水平很像。
即使在我們自己身體的不同部位,傷疤的形成也存在差異。在三角肌和胸骨區域的傷口更容易留下疤痕,而在口腔內的傷口最容易完全修復不留痕跡。科學家們也在研究這些傷疤產生的不同機制,幫助我們開發可以抑制傷疤產生的藥物。
更易產生疤痕的三角肌和胸肌區域圖片來源:https://kknews.cc/health/axvg2bv.html
Part. 3
不同的傷口留下的傷疤類型也會有所不同
根據形狀的不同,傷疤可以分成很多類型。最常見的是青春痘造成的痘坑,這種傷疤被叫做萎縮性傷疤,成因主要是傷口很小,修復沒有產生很多膠原蛋白導致產生凹陷。
而小手術造成的細小傷口容易產生細小發白的拉伸疤痕,妊娠紋和肥胖紋也屬于拉伸疤痕。這種疤痕主要來自皮膚深層的傷口:最外面的皮膚很快修復沒有受損,而深層的皮膚則由于肥胖懷孕等張力過大被拉出傷口。
由于懷孕皮膚張力過大受損產生的妊娠紋
圖片來源:Veer圖庫
正常的傷疤都會在兩到三年內逐漸變小,但是還有一種傷疤則會隨著時間越變越大。這種傷疤從一個突起的小傷疤開始延展,最后長大到蟹足狀的紅腫,所以被叫做蟹足腫。之所以會出現這種情況,主要是由于在傷口修復后,成纖維細胞還在不斷分泌膠原蛋白進行修復,導致增生越長越大。這種增生的組織由于是由成纖維細胞分泌膠原蛋白產生,因此也被稱作纖維化。
纖維化這個詞大家肯定都有所耳聞,比如肺纖維化、心臟纖維化等疾病,而這些疾病產生的原因和疤痕相似,即為了修復器官中出現的傷口,器官會分泌膠原蛋白,產生的纖維化傷疤讓器官像皮膚一樣延展性等特征變差,最終導致器官出現系列問題。所以不要小瞧小小的傷疤,它們可能造成很大的問題哦。
三角肌區域的蟹足腫圖片來源:https://health.businessweekly.com.tw/AArticle.aspx?id=ARTL000117611
Part. 4
市面上的各種治療藥物是否有效?
對于追求美觀的人來說,各種治療疤痕的藥物成了他們的福音。常見的治療疤痕的藥物或是包含洋蔥提取物、維生素E、硅膠等成分、或是通過疤痕按摩、彈力膠布等消除疤痕。目前有研究對各種藥物的療效進行了研究,研究中在疤痕上涂不同的藥物,并與涂凡士林軟膏或者不處理的對照組進行對比,觀察各藥物的療效。
市面上常見的祛疤產品圖片來源:產品官網
洋蔥提取物最開始被用于疤痕治療主要由于科學家們發現它們體外可以抑制成纖維細胞產生膠原蛋白,從而推測可以減小由于膠原蛋白產生的疤痕。但是在實際的實驗過程中,研究者發現洋蔥提取物軟膏和凡士林對照組患者傷疤沒有明顯區別,甚至部分患者傷口由于洋蔥的刺激產生過敏反應。
和洋蔥提取物類似,維生素E被認為有美容效果,并且可以抑制發炎進而抑制疤痕產生。然而實際實驗中,不論是外觀上,還是多普勒成像實驗中,都顯示它沒有明顯效果。
硅膠被用作治療傷疤,主要是因為它質地柔軟且富含水分,被認為可以軟化周圍皮膚,給傷口提供一個很好的環境去長出更多細胞而不是膠原蛋白。實際的實驗中,在4-6個月的隨訪后,確實發現使用硅膠藥物的患者在色素沉積和大小上與對照組相比有輕微緩解。不過使用過程中出現了幾例皮疹副作用的患者,停藥后皮疹也隨之消失。
疤痕膠帶被用作治療的原因是它能夠通過膠帶的連接讓傷口感覺處在正常的張力,從而不做出很多疤痕修復反應。實際實驗中疤痕膠帶的效果也很好,大部分使用者的恢復都好于對照組。
而疤痕按摩則是基于按摩可以使得新長出來的膠原蛋白斷裂,從而增加皮膚柔韌度,幫助恢復。實際跟蹤測試中,建議患者手術拆線后10-14天后,如果皮膚完全愈合,可以每天對傷口進行10分鐘的按摩,最終的效果也是明顯好于對照組。
總之,疤痕對于我們來說其實是一種保護機制,但如果嫌它丑的話,可以聽從醫生安排進行治療,切忌自作主張使用藥物。最后祝愿大家都能沒有傷口,遠離疤痕。
參考文獻:
1.Bayat, A. (2003). Skin scarring. BMJ, 326(7380), 88–92.https://doi.org/10.1136/bmj.326.7380.88
2.Grigoryan, K. V., & Kampp, J. T. (2020). Summary and evidence grading of over‐the‐counter scar treatments. International Journal of Dermatology, 59(9), 1136–1143.https://doi.org/10.1111/ijd.15060
3.Sinha, S. (2015). How do scars form? TED-Ed. https://ed.ted.com/lessons/how-do-scars-form-sarthak-sinha
聲明:轉載此文是出于傳遞更多信息之目的。若有來源標注錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯系,我們將及時更正、刪除,謝謝。
來源: 中科院高能所
于Transform變形屬性大家都不陌生吧,可以通過此屬性實現元素的位移translate(x,y),縮放scale(x,y),2d旋轉rotate(angle),3d旋轉rotate3d(angle),傾斜變換skew(x-angle,y-angle)等,你也許已經很熟悉了這些屬性,或許你也會有這樣的困惑,這些屬性在實際項目中如何應用呢?
今天的文章,筆者不會詳細一一介紹相關屬性,默許大家已經很熟悉了,今天只做例子,聊聊這些屬性在實際項目中的應用。
本篇文章筆者將帶著大家完成以下幾個例子:
本篇文章預計15分鐘
在前端開發過程中,內容居中是常見的需求。其中,居中又可以分為水平居中和垂直居中。水平居中是比較容易的,直接設置元素的margin:0 auto 就可以實現。但是垂直居中相對來說是比較復雜一些的。實現的方法也比較多,比如flex布局,display:table等方法,今天筆者將通過使用Transform屬性進行實現。
基本的頁面布局和樣式
為了方便大家理解,我們先布局兩個基本的文本框內容,html代碼如下:
<div class="parent"> <div class="child"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore </div> </div> <div class="parent"> <div class="child"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam </div> </div>
上述代碼并不復雜,我們定義了兩段內容長度不同的文本。接下來讓我們為文本內容定義寬度,高度和邊框,讓我們更加直觀展示文本內容在展示區域的位置,其css部分代碼如下:
.parent { height: 300px; width: 600px; padding: 0 1em; margin: 1em; border: 1px solid red; } .child { font-size: 1.2rem; }
加上CSS代碼后,我們完成了基本的頁面布局和樣式,頁面的效果如下圖:
使其垂直居中
接下來我們來實現文本垂直居中,有的同學可能想到了使用top屬性,實現文本的垂直居中,代碼可能是這樣的:
.child { font-size: 1.2rem; position: relative; top: 50%; }
運行后,頁面的實際效果和我們預想不一致,如下圖所示:
從上面的圖中可以看出,文本框的實際效果,文本內容的內容并不是在中間而是在下半部分,并不是我們預想的垂直居中,你也許在想,如果我們把文本內容在往上提一半,正好能滿足垂直居中的需求,Transform屬性中正好有個平移的屬性translate(x,y),我們可以使用Transform讓元素在y軸方向移動,樣式代碼修改如下:
.child { font-size: 1.2rem; position: relative; top: 50%; transform: translateY(-50%); }
正如我們所想,我們實現了內容的垂直居中,完成的效果如下:
細心的同學會注意到,元素的中心位置是在“半像素”這條線上,有可能顯得模糊,我們可以添加perspective(視域)屬性,讓其更清楚,如下代碼所示:
.child { // ... transform: perspective(1px) translateY(-50%); }
最終的代碼
經過上面的步驟,我們最終完成了內容的垂直居中,最終的效果如下:
以下是最終的css代碼,是不是很簡單:
.parent { height: 300px; width: 600px; padding: 0 1em; margin: 1em; border: 1px solid red; } .child { font-size: 1.2rem; position: relative; top: 50%; transform: perspective(1px) translateY(-50%); }
微信想必大家天天用,我們是否注意到聊天界面里文本對話框氣泡,右邊或左邊會凸出個小箭頭指向聊天人的頭像,這個例子就要實現類似微信對話框的氣泡。
創建基本的頁面布局
首先我們先創建一個基本的布局,代碼如下:
html部分
<div class="box"> <div class="box-content"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam </div> </div>
css部分
html { font-size: 16px; } .box { width: 10rem; background-color: #e0e0e0; padding: 1rem; margin: 1rem; border-radius: 1rem; }
完成以后,我們的頁面效果如下:
添加氣泡箭頭
接下來我們來實現右箭頭的氣泡效果,貼著文本框我們在右邊放置個空文本框,我們使用css的為元素屬性 ::before 來實現,樣式代碼如下:
.box::before { content: ''; width: 1rem; height: 1rem; background-color: #e0e0e0; overflow: hidden; }
注:上述寬和高的屬性,如果值越大,氣泡的箭頭就越大。
這個寬高1rem的正方形無內容的文本還在文本框內,我們還無法看到,我們需要將這個文本框右對齊,使其的一半內容露在外邊,修改后的css代碼如下:
.box { // ... position: relative; } .box::before { // ... position: absolute; right: -0.5rem; }
完后的效果,我們的頁面效果是這樣的:
氣泡箭頭應該在內容中間區域的位置,接下來,移動這個小方塊的位置,正好可以利用我們剛才學到垂直居中知識,css樣式代碼如下:
.box::before { // ... top: 50%; transform: translateY(-50%); }
完成后的,這個小方塊真的居中了,頁面實際效果如下圖所示:
從上圖我們可以看出,為了實現向右小箭頭三角的效果,我們只需要將方塊旋轉45度即可,修改后的css代碼如下:
.box::before { // ... top: 50%; transform: translateY(-50%) rotate(45deg); }
最終完成的代碼
好了,我們的氣泡效果完成了,效果如下:
最終完成的css代碼如下:
html { font-size: 20px; } .box { width: 10rem; background-color: #e0e0e0; padding: 1rem; margin: 1rem; border-radius: 1rem; position: relative; } .box::before { content: ''; width: 1rem; height: 1rem; background-color: #e0e0e0; overflow: hidden; position: absolute; right: -0.5rem; top: 50%; transform: translateY(-50%) rotate(45deg); } .box-content { position: relative; z-index: 2; }
接下來我們要完成一個常見的需求,比如我們通過API請求后臺數據,上傳圖片等不能立返回結果,我們需要讓用戶在頁面停留片刻,為了給用戶良好的用戶體驗,我們一般都會有個正在加載中的動畫進行提示,這個例子筆者將帶著大家完成下面一個彈跳的小球,效果如下,是不是很酷:
首先我們先進行基本的靜態布局
html部分:
<div class="loader"></div>
css部分:
.loader { border-radius: 50%; width: 50px; height: 50px; background: linear-gradient(to bottom, #cb60b3 0%,#c146a1 50%,#a80077 51%,#db36a4 100%); }
這樣我們就完成了一個具有顏色漸變的靜態的紫色小球,效果如下:
接下來聲明動畫名
如何讓這個靜態的小球動起來呢,我們需要借助css的動畫屬性,我們來定義一個名為jump的無限循環動畫,先快后慢,然后反方向執行一遍動畫,1.5s循環一次,代碼如下:
.loader { // ... animation: jump 1.5s ease-out infinite alternate; }
然后完成動畫的實現
怎么定義名為jump的動畫?我們讓小球在垂直方向移動,我們可以使用translateY進行移動小球:
@keyframes jump { from { transform: translateY(0px) } to { transform: translateY(-50px) } }
為了讓小球有彈跳的空間,我們需要將小球距離頂部50px,css代碼修改如下:
.loader { margin-top: 50px; }
繼續完善動畫效果
為了讓動畫效果更加有趣,我們可以讓小球邊旋轉邊上升,動畫部分修改如下:
@keyframes jump { from { transform: translateY(0px) rotate(0deg) } to { transform: translateY(-50px) rotate(360deg) } }
我們動畫可以繼續完善,讓其更加自然,小球上升過程中,相對地面的觀察者,彈的越高,就會感覺小球越小,接下來修改小球動畫部分,使用scale屬性來縮小球,代碼如下:
@keyframes jump { from { transform: translateY(0px) rotate(0deg) scale(1,1); opacity: 1; } to { transform: translateY(-50px) rotate(360deg) scale(0.8,0.8); opacity: 0.8; } }
最終完成的css代碼
好了,這個效果我們就這樣完成了,其完成后的css代碼如下,是不是很簡單?
.loader { margin-top: 50px; border-radius: 50%; width: 50px; height: 50px; animation: jump 1.5s ease-out infinite alternate; background: linear-gradient(to bottom, #cb60b3 0%,#c146a1 50%,#a80077 51%,#db36a4 100%); } @keyframes jump { from { transform: translateY(0px) rotate(0deg) scale(1,1); opacity: 1; } to { transform: translateY(-50px) rotate(360deg) scale(0.8,0.8); opacity: 0.8; } }
這個例子,我們要實現一個更炫的加載提示器,這次我們要做的是基于SVG的動畫效果,要理解這部分內容,你需要會svg相關的基礎知識,具體的效果如下,感覺就像”頭部“的那個東西在牽動線條轉圈圈,是不是很酷:
首先進行基本的繪制
我們先用svg繪制一個基本的圈,示例的代碼如下:
<svg class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> <!-- 1 --> <circle class="path spinner-border" cx="33" cy="33" r="31" stroke="url(#gradient)"></circle> <!-- 2 --> <linearGradient id="gradient"> <!-- 3 --> <stop offset="50%" stop-color="#000" stop-opacity="1"></stop> <stop offset="65%" stop-color="#000" stop-opacity=".5"></stop> <stop offset="100%" stop-color="#000" stop-opacity="0"></stop> </linearGradient> <circle class="path spinner-dot" cx="37" cy="3" r="2"></circle> <!-- 4 --> </svg>
上述代碼我們完成了以下內容:
接下來我們來定義css部分,將畫布定義成180*180,示例代碼如下:
.spinner { margin: 10px; width: 180px; height: 180px; }
然后我們來定義線圈和實心的小圓的css屬性:
.spinner-dot { stroke: #000; stroke-width: 1; fill: #000; } .spinner-border { fill: transparent; stroke-width: 2; width: 100%; height: 100%; } .path { stroke-dasharray: 170; stroke-dashoffset: 20; }
上述代碼有幾個屬性需要解釋下:
關于stroke-dasharray,stroke-dashoffset的介紹建議大家看張鑫旭老師的這篇博文《純CSS實現帥氣的SVG路徑描邊動畫效果》 www.zhangxinxu.com/wordpress/2…
通過上述代碼,我們靜態的線圈繪制好了,效果如下所示:
定義動畫,讓線圈轉動起來
讓線圈動起來,其實就是讓其一直選擇360度而已,我們讓其2秒轉一圈,示例代碼如下:
.spinner { // ... animation: rotate 2s linear infinite; } @keyframes rotate { to { transform: rotate(360deg); } }
讓牽動線圈運動的小實心圓更有趣,感覺就像一個牽動發動機的“頭”,讓其傾斜擺動,示例代碼如下:
.spinner-dot { // ... animation: skew 2s linear infinite alternate; } @keyframes skew { from { transform: skewX(10deg) } to { transform: skewX(40deg) } }
最終完成的代碼
就這樣我們實行了一個個酷酷的的,轉動線圈的效果,完整的css代碼如下:
.spinner { margin: 10px; animation: rotate 2s linear infinite; width: 180px; height: 180px; } .spinner-dot { stroke: #000; stroke-width: 1; fill: #000; animation: skew 2s linear infinite alternate; } .spinner-border { fill: transparent; stroke-width: 2; width: 100%; height: 100%; } .path { stroke-dasharray: 170; stroke-dashoffset: 20; } @keyframes rotate { to { transform: rotate(360deg); } } @keyframes skew { from { transform: skewX(10deg) } to { transform: skewX(40deg) } }
這個動畫效果也是我們常見的,類似一些網站的圖片,我們鼠標懸停在上面,圖片進行了翻轉,就好像一個卡片,翻轉到其背面,顯示了背面的內容,實現后的效果如下所示:
靜態頁面布局
首先我們先完成圖片卡片的基本布局,示例代碼如下:
<section class="container"> <figure class="photo"> <img src="http://m.jungjaehyung.com/uploadfile/2024/1012/20241012124735684.jpg" class="front side"> <figcaption class="back side"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </figcaption> </figure> <figure class="photo"> <img src="http://m.jungjaehyung.com/uploadfile/2024/1012/20241012124736257.jpg" class="front side"> <figcaption class="back side"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </figcaption> </figure> <figure class="photo"> <img src="http://m.jungjaehyung.com/uploadfile/2024/1012/20241012124737829.jpg" class="front side"> <figcaption class="back side"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </figcaption> </figure> </section>
上述代碼我們有三張圖片,并且我們定義了圖片背面的文字內容。
接下來我們來定義容器的樣式,讓三張圖片在頁面居中:
.container { margin: 10px auto; }
然后我們定義每張圖片在容器中左浮動,排成一行,并定義圖片的寬與高:
.photo { width: 22vw; height: 20vw; min-width: 130px; min-height: 100px; float: left; margin: 0 20px; }
接著我們定義圖片的填充方式為cover:
.photo img { object-fit: cover; }
最后我們定義圖片文字介紹的樣式:
.side { width: 100%; height: 100%; }
完成后的效果如下:
接著我們繼續將文字介紹內容移到圖片的頂部:
.photo { // ... position: relative; } .side { // ... position: absolute; }
完成后的效果如下所示:
讓文字到背面去
現在開始使用css的魔法屬性,將圖片放置到3D空間去,將其3d變換,給人一種透視的感覺,我們使用transform-style這個屬性,示例代碼如下:
.photo { // ... transform-style: preserve-3d; }
然后修改side樣式,定義文字內容為背面,且背面屬性不可見,這里使用了css的backface-visibility屬性:
.side { // ... backface-visibility: hidden; }
然后定義back相關的樣式,先讓背面翻轉過去,在y軸上旋轉180度。
.back { transform: rotateY(180deg); text-align: center; background-color: #e0e0e0; }
這樣我們的文字描述部分在背面被隱藏了。
定義懸停動畫
接下來,我們定義鼠標懸停翻轉卡片的功能,示例代碼如下:
.photo:hover { transform: rotateY(180deg); }
為了讓動畫效果不這么生硬,我們需要增加過渡的動畫屬性,代碼完善如下:
.photo { // ... transition: transform 1s ease-in-out; }
最終完成后的代碼
好了,最后一個例子我們也完成了,是不是很有趣,最終完整的css代碼如下:
.container { margin: 10px auto; } .photo { width: 22vw; height: 20vw; min-width: 130px; min-height: 100px; float: left; margin: 0 20px; position: relative; transform-style: preserve-3d; transition: transform 1s ease-in-out; } .photo:hover { transform: rotateY(180deg); } .photo img { object-fit: cover; } .side { width: 100%; height: 100%; position: absolute; backface-visibility: hidden; } .back { transform: rotateY(180deg); text-align: center; background-color: #e0e0e0; }
毫無疑問,CSS3為我們提供了強大的動畫功能,甚至不需要任何JS我們就可以于創建有趣和美麗的動畫效果。但是,重要的是要合理使用它們而不是濫用它們。請記住,您的網站是為用戶而不是為自己服務的(在大多數情況下,無論如何)。因此,應該利用CSS動畫為用戶提供更好的用戶體驗,而不是耍酷。
在本文中,我們已經了解了如何將CSS的Transforms變換屬性運用到真實的項目中。通過本文,我們已經了解了如何在頁面上垂直對齊元素,對話框氣泡,彈跳和旋轉的加載動畫,以及如何實現翻轉動畫。當然,也許你學會了其中的技巧,但是創造炫酷的動畫,唯一的瓶頸限制就是你的想象力。
更多精彩內容,請微信關注“前端達人”公眾號!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。