当前位置: 首页 > Web前端 > HTML5

巧用 CSS 变量,实现动画函数复用,制作高级感拉满的网格动画

时间:2023-04-05 22:24:03 HTML5

宸у鍒╃敤CSS鍙橀噺瀹炵幇鍔ㄧ敾鍔熻兘鐨勫鐢紝璁╃綉鏍煎姩鐢诲厖婊¢珮绾ф劅CSS鑷畾涔夊彉閲忥紙CSSVariable锛夛紝涔嬪墠涔熷彨CSSCustomAttributes锛岀敤娉曞涓嬶細//澹版槑涓€涓彉閲忥細:root{--bgColor:#000;}杩欓噷鎴戜滑浣跨敤涓婇潰鐨?12锛岀粨鏋勫寲鐨?root{}浼被涓殑浼被鍦ㄥ叏灞€:root{}浼被涓畾涔変簡涓€涓悕涓?-bgColor鐨凜SS鍙橀噺銆傚畾涔夊畬鎴愬悗锛屽氨鍙互浣跨敤浜嗐€傚亣璁炬垜鎯宠缃竴涓猟iv鐨勮儗鏅壊涓洪粦鑹诧細.main{background:var(--bgColor);}杩欓噷锛屾垜浠渶瑕佸湪鍙橀噺浣跨敤鍓嶅畾涔夌殑鍦版柟锛岄€氳繃var(瀹氫箟鐨勫彉閲忓悕)鏉ヨ皟鐢ㄣ€傚湪@keyframes涓娇鐢–SS鍙橀噺OK锛屽洖鍒版垜浠殑涓婚銆傚阀濡欎娇鐢–SS鍙橀噺锛屽疄鐜板姩鐢诲姛鑳藉鐢ㄣ€傚亣璁炬垜浠幇鍦ㄦ湁澶氫釜鍏冪礌锛岄渶瑕佸疄鐜颁竴涓綅绉诲姩鐢伙紝浠嶢浣嶇疆鍒癇浣嶇疆銆侫浣嶇疆鐩稿悓锛孊浣嶇疆涓嶅悓锛屽儚杩欐牱锛氶€氬父鎯呭喌涓嬶紝鍥犱负绔偣涓嶅悓锛屾垜浠彲鑳介渶瑕佸疄鐜?涓笉鍚岀殑@keyframes鍍忚繖鏍凤細

li:nth-child(1){animation:move12slinear;}li:nth-child(2){animation:move22slinear;}li:nth-child(3){animation:move32slinear;}@keyframesmove1{60%,100%{transform:translate(150px);}}@keyframesmove2{60%,100%{transform:translate(120px);}}@keyframesmove3{60%,100%{transform:translate(200px);}}杩欐浠g爜鏈夐棶棰樺悧锛熶笉銆備絾鏄紝鎴戜滑鍙互浣跨敤CSS鍙橀噺浣垮叾鏇寸畝娲併€傝鎴戜滑杞崲涓€涓婡keyframes浠g爜锛屾妸鍥哄畾浣嶇Щ鍊煎彉鎴愪竴涓彉閲忥細@keyframesmove{60%,100%{transform:translate(var(--dis));}}鐢变簬CSS鍙橀噺鏄湁浣滅敤鍩熺殑锛屾垜浠彲浠ラ€氳繃CSS鍙橀噺涓烘瘡涓€涓猯i瀹氫箟涓嶅悓鐨?-dis鍙橀噺锛屽儚杩欐牱锛歭i:nth-child(1){--dis:150px;}li:nth-child(2){--dis:120px;}li:nth-child(3){--dis:200px;}杩欐牱锛岃櫧鐒跺姩鐢荤殑缁堢偣涓嶅悓锛屼絾鏄垜浠娇鐢–SS鍙橀噺鏉ュ鐢ㄧ浉鍚岀殑@keyframes浣滅敤锛氶€氳繃鍐呰仈鏍峰紡灞炴€т紶鍏ヨ嚜瀹氫箟鍙橀噺闄や簡鍦?style>涓紶鍏ヤ笉鍚岀殑鑷畾涔夊彉閲忓锛屾垜浠繕鍙互閫氳繃鍐呰仈鏍峰紡灞炴€т紶鍏ヨ嚜瀹氫箟鍙橀噺銆傝鎴戜滑鍐嶆杞崲鎴戜滑鐨凘keyframes锛欯keyframesmove{60%,100%{transform:translate(var(--end));鑳屾櫙锛歷ar锛?-棰滆壊锛夛紱}}杩欐鎴戜滑涓嶉渶瑕侀€氳繃锛歯th-鈥嬧€媍hild()鏉ヤ慨鏀规瘡涓€涓猯i鐨凜SS锛岃€屾槸閫氳繃HTML鍏冪礌鐨勫唴鑱攕tyle灞炴€э紝鍍忚繖鏍凤細
鏄殑锛屾瘡涓猯i鍏冪礌鐨凘keyframes鍙互璇诲彇姣忎釜li鐨勬牱寮忎腑瀹氫箟鐨勪笉鍚孋SS鍙橀噺銆傝繖鏍凤紝鎴戜滑鍙互寰楀埌濡備笅鏁堟灉锛氬畬鏁翠唬鐮佸彲浠ョ偣鍑昏繖閲岋細CodePenDemo--宸у鍒╃敤CSS鍙橀噺瀹炵幇鍔ㄧ敾鍔熻兘鐨勫鐢ㄥ緢涔呬互鍓嶏紝鎴戜滑瀹炵幇浜嗚繖鏍蜂竴涓姩鐢绘晥鏋滐細杩欎釜鍔ㄧ敾鏁堟灉鐨勫疄鐜版柟娉曟槸锛氱埗鍏冪礌瀹炵幇涓€涓猺otateZ(360deg)鐨勫寑閫熷姩鐢伙紝瀛愬厓绱犲疄鐜颁竴涓弽鍚憆otateZ(-360deg)鐨勫寑閫熷姩鐢绘坊鍔犱竴涓猺otateX(40deg)鐨勫姩鐢荤埗鍏冪礌銆傜敱浜庣埗瀹瑰櫒鍜屽瓙瀹瑰櫒鍚屾椂鍚戠浉鍙嶇殑鏂瑰悜鏃嬭浆锛屾墍浠ュ瓙鍏冪礌瀹為檯涓婄湅璧锋潵鍜屾病鏈夋棆杞竴鏍枫€備絾鏄敱浜庢垜浠坊鍔犱簡鍙︿竴涓猺otateX(40deg)鍔ㄧ敾锛屽畠鐪嬭捣鏉ュ儚杩欎釜3D鏁堟灉銆備箣鍓嶏紝鎴戜滑鐨勪唬鐮佹槸杩欐牱鐨勶細
.rotate{鍔ㄧ敾锛氭棆杞?s绾挎€ф棤闄愶紱}.reverseRotate{鍔ㄧ敾锛歳everseRotate5s绾挎€ф棤闄愶紱}@keyframesrotate{0%{transform:rotateX(0deg)rotateZ(0deg);}50%{鍙樻崲锛歳otateX(40deg)rotateZ(180deg);}100%{鍙樻崲:rotateX(0deg)rotateZ(deg);}}@keyframesreverseRotate{0%{鍙樻崲锛歳otateZ(0deg);}100%{鍙樻崲锛歳otateZ(-360deg);}}鍙互鐪嬪埌锛屾垜浠疄鐜颁簡涓や釜Animationeffect锛欯keyframesrotate{}鐖跺鍣ㄧ殑鏃嬭浆鍔ㄧ敾@keyframesreverseRotate{}瀛愬鍣ㄧ殑鏃嬭浆鍔ㄧ敾鍏跺疄杩欓噷鐢ㄤ粖澶╃殑鎶€宸э紝鎴戜滑鍙互缁撳悎灏嗕袱涓姩鐢诲悎浜屼负涓€骞朵娇鐢–SS鑷畾涔夊彉閲忔潵鎺у埗銆傛敼閫犲悗鏇寸畝娲佺殑CSS浠g爜濡備笅锛?rotate{--degZ:360deg;--degZMiddle:180deg;--degX:30deg;鍔ㄧ敾锛氭棆杞?s绾挎€ф棤闄愶紱}.reverseRotate{--degZ:-360deg;--degZMiddle:-180deg;--degX:0;鍔ㄧ敾锛氭棆杞?s绾挎€ф棤闄愶紱}@keyframesrotate{0%{transform:rotateX(0deg)rotateZ(0deg);}50%{鍙樻崲锛歳otateX(var(--degX))rotateZ(var(--degZMiddle));}100%{鍙樻崲锛歳otateX(0deg)rotateZ(var(--degZ));}}鏄殑锛屾垜浠彲浠ュ緱鍒板悓鏍风殑鏁堟灉锛佸畬鏁翠唬鐮佸彲浠ョ偣鍑昏繖閲岋細CodePenDEMO--Css鍔ㄧ敾姝e弽鏃嬭浆鍙栨秷鍥剧墖闅忓鍣ㄦ棆杞笅闈紝鎴戜滑鏉ヨ瘯璇曚竴涓湁瓒g殑鍔ㄧ敾鏁堟灉锛屽浘鐗囬殢瀹瑰櫒鏃嬭浆鏃嬭浆銆傚湪涓婇潰鐨勫熀纭€涓婏紝濡傛灉鎴戜滑鎶婂瓙鍏冪礌鏀规垚鍥剧墖锛屾暣涓晥鏋滀細鏇存湁瓒c€傝鎴戜滑鏇存敼涓€鐐逛唬鐮侊細
銆傛棆杞紝.reverseRotate{瀹藉害锛?0vh;楂樺害锛?0vh锛泒.reverseRotate{浣嶇疆锛氱粷瀵癸紱椤堕儴锛?0%锛涘乏锛?0%锛涜浆鎹細缈昏瘧锛?50%锛?50%锛夛紱杈规锛?px瀹炲績#999锛涙孩鍑猴細闅愯棌锛泒.rotate{浣嶇疆锛氱粷瀵癸紱椤堕儴锛?0%锛涘乏锛?0%锛涜浆鎹細缈昏瘧锛?50%锛?50%锛夛紱瀹藉害锛?00%锛涢珮搴︼細100%锛泒.rotate{--degZ锛?60deg锛涘姩鐢伙細鏃嬭浆5s绾挎€ф棤闄愶紱}.reverseRotate{--degZ:-deg;鍔ㄧ敾锛氭棆杞?s绾挎€ф棤闄愶紱}@keyframesrotate{0%{transform:translate(-50%,-50%)rotateZ(0deg);}100%{鍙樻崲锛氬钩绉伙紙-50%锛?50%锛塺otateZ锛坴ar锛?-degZ锛夛級锛泒}鍦ㄨ繖閲岋紝鎴戜滑鍋氫簡浠€涔堬紵鍒犻櫎浜?D鏁堟灉骞朵负澶栭儴瀹瑰櫒娣诲姞浜嗚竟妗嗐€傚唴閮ㄥ浘鍍忓熀浜庣埗瀹瑰櫒鐨勭粷瀵瑰畾浣嶃€傚唴閮ㄥ鍣ㄥ拰澶栭儴瀹瑰櫒姘村钩鍜屽瀭鐩村眳涓€傚唴瀹瑰櫒鍜屽瀹瑰櫒浠ュ弽鍚?60掳鍔ㄧ敾鏃嬭浆銆傝繖鏍锋垜浠彲浠ョ湅鍒拌櫧鐒跺唴澶栧鍣ㄥ悓鏃跺弽鏂瑰悜鏃嬭浆360掳鍔ㄧ敾锛屼絾閲岄潰鐨勭敾闈㈠叾瀹炴槸闈欐鐨勶紒鏁堟灉濡備笅锛氱敱浜庡唴閮ㄥ浘鐗囩殑澶у皬鏄埗瀹瑰櫒鐨?00%锛屽湪鏃嬭浆鐨勮繃绋嬩腑锛岀埗瀹瑰櫒鏄剧劧涓嶄細鍖呰9浣忔暣涓浘鐗囥€傝繖鏄竴涓緢濂界殑瑙e喅鏂规銆傛垜浠彧闇€瑕佸皢鍥剧墖鐨勫昂瀵歌皟澶т竴鐐瑰嵆鍙細//...鍏朵粬浠g爜淇濇寔涓嶅彉銆俽otate{width:150%;楂樺害锛?50%锛泒.rotate{--degZ锛?60deg锛涘姩鐢伙細鏃嬭浆5s绾挎€ф棤闄愶紱}閫氬父鎯呭喌涓嬶紝瀵逛簬鏂瑰舰瀹瑰櫒锛屽皢鍐呴儴鍥剧墖璁剧疆涓?41%鍗冲彲婊¤冻鐖跺鍣ㄦ棆杞繃绋嬶紝骞朵笖鍙互涓€鐩村寘瑁瑰浘鐗囨晥鏋溿€傞偅涔堬紝鎴戜滑灏卞彲浠ュ緱鍒拌繖鏍蜂竴涓晥鏋滐細瀹屾暣浠g爜锛屽彲浠ユ埑杩欓噷锛欳odePenDemo--Css鍔ㄧ敾姝e弽鏃嬭浆鍙栨秷Grid甯冨眬甯︽鍙嶆棆杞姩鐢诲綋鐒朵笂闈㈠彧鏈変竴涓鍣ㄦ椂锛屾暣涓姩鐢绘晥鏋滀笉澶熼渿鎾笺€傚鏋滄垜浠兘鎶婅繖涓晥鏋滆瀺鍏ュ埌鏁翠釜甯冨眬鐨勫姩鐢讳腑锛屾暣涓晥鏋滃氨浼氬畬鍏ㄤ笉涓€鏍蜂簡銆傚湪鏂囩珷RotatinggallerywithCSSscroll-drivenanimations涓紝浣滆€呮彁渚涗簡涓€涓潪甯稿阀濡欑殑鎯虫硶锛屽皢Grid甯冨眬鍔ㄧ敾涓庝笂杩板姩鐢绘晥鏋滃阀濡欑粨鍚堛€傞鍏堬紝鎴戜滑浣跨敤Grid甯冨眬鏉ュ疄鐜拌繖鏍蜂竴涓畝鍗曠殑缃戞牸甯冨眬缁撴瀯锛?divclass="container">
.container{瀹藉害锛?0vmin锛涢珮搴︼細60vmin锛涙樉绀猴細缃戞牸锛涚綉鏍兼ā鏉垮垪锛?fr1fr1fr锛涚綉鏍兼ā鏉胯锛?fr1fr1fr锛涢棿闅欙細4px锛涚綉鏍兼ā鏉垮尯鍩燂細鈥淓BB鈥?EAC""DDC";}.container>div{border:3pxsolid#431312;border-radius:5px;}.A{grid-area:A;}.B{grid-area:B;}.C{grid-area:C;}.D{grid-area:D;}.E{grid-area:E;}鏁堟灉濡備笅锛氭帴涓嬫潵鎴戜滑瑕佸仛鐨勫氨鏄粨鍚堜互涓婄煡璇嗙偣锛屽鍣ㄥ悜涓婃粴鍔紝鍥剧墖鍚戝悗婊氬姩锛岃繘琛屼竴浜泃ranfrom鍙樻崲銆傛湁浜嗕笂闈㈢殑閾哄灚锛屼笅闈㈢殑鏂颁唬鐮佸氨寰堝ソ鐞嗚В浜嗭細.container>divimg{--scale:1;--鏃嬭浆锛?360搴︼紱浣嶇疆锛氱粷瀵癸紱椤堕儴锛?0%锛涘乏锛?0%锛涜浆鎹細缈昏瘧锛?50%锛?50%锛夛紱瀹藉害锛?60%锛涢珮搴︼細260%锛涢€傚悎瀵硅薄锛氳鐩栵紱瀵硅薄浣嶇疆锛氫腑蹇冿紱}銆俢ontainer,.container>divimg{animation:10sscale-upbothease-in-out鏃犻檺浜ゆ浛;}@keyframesscale-up{0%{transform:translate(-50%,-50%)scale(var(--姣斾緥锛夛級鏃嬭浆锛?搴︼級锛泒100%{transform:translate(-50%,-50%)scale(1)rotate(var(--rotation));}}杩欐牱锛屾垜浠氨鑾峰緱浜嗗叏鏍兼棆杞姩鐢荤殑楂樼骇鎰燂細娉ㄦ剰锛岃繖閲屾垜浠繕鏄€氳繃CSS鑷畾涔夊彉閲忓湪涓嶅悓鍏冪礌涔嬮棿澶嶇敤浜嗙浉鍚岀殑鍔ㄧ敾@keyframes鍑芥暟銆傚畬鏁翠唬鐮佸彲浠ョ偣鍑昏繖閲岋細CodePenDemo--缃戞牸鍥剧墖鏃嬭浆鍔ㄧ敾&浣跨敤CSS鍙橀噺澶嶇敤鍔ㄧ敾鍔熻兘鏈€鍚庯紝鏈枃鍒版缁撴潫锛屽笇鏈涙湰鏂囧浣犳湁鎵€甯姪:)鎯砱et鏈€鏈夎叮鐨凜SS璧勮锛屼笉瑕侀敊杩囨垜鐨勫叕浼楀彿鈥斺€攊CSS鍓嶇瓒i椈馃槃鏇村绮惧僵CSS鎶€鏈枃绔犳眹鎬诲湪鎴戠殑Github鈥斺€攊CSS锛屾寔缁洿鏂颁腑锛屾杩庣偣涓槦璁㈤槄鏀惰棌澶广€傛湁浠€涔堥棶棰樻垨鑰呭缓璁彲浠ュ浜ゆ祦銆傚師鍒涙枃绔犳枃绗旀湁闄愶紝鐭ヨ瘑鍖箯銆傚鏋滄枃绔犱腑鏈変换浣曚笉鍑嗙‘鐨勫湴鏂癸紝璇峰憡璇夋垜銆?/p>