ä½¿ç¨ CSS åç«
CSS åç«è½å¤ å° CSS 樣å¼çµæ å¾ä¸åçæ è½å ´è³å¦ä¸åçæ ãåç«ç±å ©åçµä»¶çµæï¼ä¸åæè¿° CSS åç«ç樣å¼ï¼ä»¥åä¸çµæç¤ºåç«æ¨£å¼éå§èçµæçæ çééµå½±æ ¼ï¼å ¶ä¸ä¹å¯è½å å«ä¸éçéç¶é»ã
ç¸è¼æ¼å³çµ±çè ³æ¬é© ååç«æè¡ï¼CSS åç«æä¸å主è¦åªå¢ï¼
- å°æ¼åºæ¬åç«ä¾èªªï¼å®åå¾å®¹æä½¿ç¨ï¼ä½ çè³ä¸éè¦äºè§£ JavaScript å°±è½å»ºç«å®åã
- å³ä½¿å¨ç³»çµ±è² è¼ä¸ççæ æ³ä¸ï¼åç«ä¹è½é æ¢å·è¡ãç°¡å®çåç«å¨ JavaScript ä¸å¸¸å¸¸è¡¨ç¾ä¸ä½³ãç¹ªè£½å¼æå¯ä»¥ä½¿ç¨è·³æ ¼åå ¶ä»æè¡ï¼ä¾ç¡å¯è½å°ä¿ææè½æµæ¢ã
- è®çè¦½å¨æ§å¶åç«åºåï¼è½è®çè¦½å¨æä½³åæè½èæçï¼ä¾å¦ï¼éä½å¨ç®åä¸å¯è¦çåé ä¸å·è¡åç«çæ´æ°é »çã
çµæ åç«
è¦å»ºç«ä¸å CSS åç«åºåï¼ä½ éè¦çºæ³å ä¸åç«çå
ç´ è¨å® animation å±¬æ§æå
¶å屬æ§ãéè½è®ä½ çµæ
åç«åºåæå¦ä½é²è¡çæéè¨å®ãæçºæéåå
¶ä»ç´°ç¯ãéä¸¦ä¸æçµæ
åç«ç實éå¤è§ï¼åç«å¤è§æ¯éé @keyframes At è¦åä¾å®ç¾©çï¼è©³è¦ä¸æ¹ç使ç¨ééµå½±æ ¼å®ç¾©åç«åºåã
animation 屬æ§çå屬æ§å¦ä¸ï¼
animation-composition-
æå®ç¶å¤ååç«åæå½±é¿åä¸å±¬æ§æï¼è¦ä½¿ç¨çåææä½ãæ¤å±¬æ§ä¸å±¬æ¼
animation簡寫屬æ§çä¸é¨åã animation-delay-
æå®å ç´ è¼å ¥èåç«åºåéå§ä¹éç延鲿éï¼ä»¥ååç«æè©²å¾é éå§ï¼éæ¯å¾åç«çä¸ééå§ã
animation-direction-
æå®åç«çç¬¬ä¸æ¬¡è¿ä»£æè©²æ¯åå鿝åå¾ï¼ä»¥åå¾çºçè¿ä»£æè©²å¨æ¯æ¬¡å·è¡åºåæäº¤æ¿æ¹åï¼éæ¯éè¨å°èµ·é»ä¸¦éè¤ã
animation-duration-
æå®åç«å®æä¸å鱿çæéé·åº¦ã
animation-fill-mode-
æå®åç«å¨å·è¡åå¾å¦ä½å°æ¨£å¼æç¨æ¼å ¶ç®æ¨ã
å註ï¼å¨åç«ç forwards å¡«å æ¨¡å¼ä¸ï¼å ä¸åç«ç屬æ§è¡çºå°±å被å å«å¨ä¸åè¨å®å¥½ç
will-change屬æ§å¼ä¸ã妿å¨åç«æé建ç«äºæ°çå çä¸ä¸æï¼ç®æ¨å ç´ å¨åç«çµæå¾æä¿ç該å çä¸ä¸æã animation-iteration-count-
æå®åç«æéè¤ç次æ¸ã
animation-name-
æå®æè¿°åç«ééµå½±æ ¼ç
@keyframesAt è¦åå稱ã animation-play-state-
æå®è¦æ«åéæ¯ææ¾åç«åºåã
animation-timeline-
æå®ç¨ä¾æ§å¶ CSS åç«é²åº¦çæé軸ã
animation-timing-function-
éé建ç«å é度æ²ç·ï¼æå®åç«å¦ä½å¨ééµå½±æ ¼ä¹éè½å ´ã
使ç¨ééµå½±æ ¼å®ç¾©åç«åºå
å¨ä½ çµæ
好åç«çæéè¨å®å¾ï¼ä½ éè¦å®ç¾©åç«çå¤è§ãéå¯ä»¥ééä½¿ç¨ @keyframes At è¦å建ç«ä¸æå¤åééµå½±æ ¼ä¾å®æãæ¯åééµå½±æ ¼æè¿°äºè¢«å ä¸åç«çå
ç´ å¨åç«åºåçç¹å®æéé»æè©²å¦ä½ç®ç¹ªã
ç±æ¼åç«çæéè¨å®æ¯å¨çµæ
åç«ç CSS 樣å¼ä¸å®ç¾©çï¼ééµå½±æ ¼ä½¿ç¨ç¾åæ¯ä¾æç¤ºå®åå¨åç«åºåä¸ç¼ççæéé»ã0% 表示åç«åºåç第ä¸åæå»ï¼è 100% 表示åç«çæçµçæ
ãå çºéå
©åæéé»é常éè¦ï¼æä»¥å®åæç¹æ®çå¥åï¼from å toãå
©è
齿¯å¯é¸çãå¦ææ²ææå® from/0% æ to/100%ï¼çè¦½å¨æä½¿ç¨ææå±¬æ§çè¨ç®å¼ä¾éå§æçµæåç«ã
ä½ å¯ä»¥é¸ææ§å°å å«é¡å¤çééµå½±æ ¼ï¼ä»¥æè¿°åç«éå§èçµæä¹éçä¸éæ¥é©ã
ä½¿ç¨ animation 簡寫
animation ç°¡å¯«å±¬æ§æå©æ¼ç¯ç空éãèä¾ä¾èªªï¼æå卿¬æä¸ä½¿ç¨éçä¸äºè¦åï¼
p {
animation-duration: 3s;
animation-name: slide-in;
animation-iteration-count: infinite;
animation-direction: alternate;
}
â¦å¯ä»¥ä½¿ç¨ animation 簡寫ä¾å代ã
p {
animation: 3s infinite alternate slide-in;
}
è¦äºè§£æ´å¤éæ¼ä½¿ç¨ animation 簡寫æå¯ä»¥æå®ä¸ååç«å±¬æ§å¼çé åºï¼è«åè¦ animation åèé é¢ã
è¨å®å¤ååç«å±¬æ§å¼
CSS åç«ç宿´å±¬æ§å¯ä»¥æ¥åå¤å以éèåéçå¼ãç¶ä½ æ³è¦å¨å®ä¸è¦å䏿ç¨å¤ååç«ï¼ä¸¦çºæ¯ååç«è¨å®ä¸åçæçºæéãè¿ä»£æ¬¡æ¸çæï¼å¯ä»¥ä½¿ç¨æ¤åè½ãè®æåçä¸äºå¿«éçç¯ä¾ä¾è§£éä¸åçæåçµåã
å¨ç¬¬ä¸åç¯ä¾ä¸ï¼æä¸åæçºæéåä¸åè¿ä»£æ¬¡æ¸çå¼ãå æ¤ï¼æ¯ååç«é½æè¢«ææ´¾ä¸åèåç«å稱ä½ç½®ç¸åçæçºæéåè¿ä»£æ¬¡æ¸å¼ãfadeInOut åç«è¢«ææ´¾äº 2.5s çæçºæéå 2 çè¿ä»£æ¬¡æ¸ï¼è bounce åç«åè¢«ææ´¾äº 1s çæçºæéå 5 çè¿ä»£æ¬¡æ¸ã
animation-name: fadeInOut, moveLeft300px, bounce;
animation-duration: 2.5s, 5s, 1s;
animation-iteration-count: 2, 1, 5;
å¨ç¬¬äºåç¯ä¾ä¸ï¼è¨å®äºä¸ååç«å稱ï¼ä½åªæä¸åæçºæéåè¿ä»£æ¬¡æ¸ãå¨éç¨®æ æ³ä¸ï¼ææä¸ååç«é½æè¢«è³¦äºç¸åçæçºæéåè¿ä»£æ¬¡æ¸ã
animation-name: fadeInOut, moveLeft300px, bounce;
animation-duration: 3s;
animation-iteration-count: 1;
å¨ç¬¬ä¸åç¯ä¾ä¸ï¼æå®äºä¸ååç«ï¼ä½åªæå
©åæçºæéåè¿ä»£æ¬¡æ¸ãå¨é種æ
æ³ä¸ï¼å¦æå表ä¸çå¼ä¸è¶³ä»¥çµ¦æ¯ååç«åé
ä¸åç¨ç«çå¼ï¼å¼çåé
æå¾å¯ç¨å表ç第ä¸åé
ç®å¾ªç°å°æå¾ä¸åé
ç®ï¼ç¶å¾å循ç°å第ä¸åé
ç®ãæä»¥ï¼fadeInOut ç²å¾ 2.5s çæçºæéï¼moveLeft300px ç²å¾ 5s çæçºæéï¼éæ¯æçºæéå¼å表ä¸çæå¾ä¸åå¼ãç¾å¨æçºæéå¼çåé
éè¨çºç¬¬ä¸åå¼ï¼å æ¤ï¼bounce ç²å¾ 2.5s çæçºæéãè¿ä»£æ¬¡æ¸çå¼ï¼ä»¥åä½ æå®çä»»ä½å
¶ä»å±¬æ§å¼ï¼å°ä»¥ç¸åçæ¹å¼è¢«åé
ã
animation-name: fadeInOut, moveLeft300px, bounce;
animation-duration: 2.5s, 5s;
animation-iteration-count: 2, 1;
妿åç«æ¸éååç«å±¬æ§å¼çæ¸éä¸å¹é
çæ
æ³åéä¾ï¼æ¯å¦èªªæäºå animation-duration å¼å°æä¸å animation-name å¼ï¼é£éº¼å¤é¤ææªä½¿ç¨çåç«å±¬æ§å¼ï¼å¨é種æ
æ³ä¸æ¯å
©å animation-duration å¼ï¼å°ä¸ææç¨æ¼ä»»ä½åç«ï¼ä¸¦è¢«å¿½ç¥ã
ç¯ä¾
>è®æåæ»éç覽å¨è¦çª
éååºæ¬ç¯ä¾ä½¿ç¨ translate å scale è½å ´å±¬æ§ä¾çº <p> å
ç´ è¨å®æ¨£å¼ï¼ä½¿æåå¾ç覽å¨è¦çªçå³å´éç·£å¤æ»å
¥ã
p {
animation-duration: 3s;
animation-name: slide-in;
}
@keyframes slide-in {
from {
translate: 150vw 0;
scale: 200% 1;
}
to {
translate: 0 0;
scale: 100% 1;
}
}
å¨éåç¯ä¾ä¸ï¼<p> å
ç´ çæ¨£å¼æå®äºåç«å¾éå§å°çµææè±è²» 3 ç§ï¼éæ¯éé animation-duration 屬æ§è¨å®çï¼èå®ç¾©åç«åºåééµå½±æ ¼ç @keyframes At è¦ååç¨±çº slide-inã
å¨é種æ
æ³ä¸ï¼æååªæå
©åééµå½±æ ¼ã第ä¸åç¼çå¨ 0%ï¼ä½¿ç¨å¥å fromï¼ãå¨éè£¡ï¼æåå°å
ç´ ç translate 屬æ§è¨å®çº 150vwï¼ä¹å°±æ¯è¶
åºå
å«å
ç´ å³å´éç·£å¾é çå°æ¹ï¼ï¼ä¸¦å°å
ç´ ç scale è¨å®çº 200%ï¼æå
¶é è¨è¡å
§å°ºå¯¸çå
©åï¼ï¼éæä½¿æ®µè½ç寬度è®çºå
¶ <body> å
å«åå¡çå
©åãéå°è´åç«ç第ä¸åå½±æ ¼æå°æ¨é¡ç¹ªè£½å¨ç覽å¨è¦çªçå³å´éç·£ä¹å¤ã
第äºåééµå½±æ ¼ç¼çå¨ 100%ï¼ä½¿ç¨å¥å toï¼ãtranslate 屬æ§è¢«è¨å®çº 0%ï¼å
ç´ ç scale 被è¨å®çº 1ï¼ä¹å°±æ¯ 100%ãéæä½¿æ¨é¡å¨å
¶é è¨çæ
ä¸çµæåç«ï¼ç·è²¼èå
§å®¹ååçå·¦å´éç·£ã
<p>
æ¯æ¯è²åæéºçµ²æ²é»å°å°æäºä¸æå
ï¼æå¾æ¯æ¯è²å¾å´è£¡æ¿åºæ°´ç
管ï¼ç¨ä¸ç¨®æ
µæ¶ãçå¦çè²é³å°å¥¹èªªè©±ã
</p>
å註ï¼éæ°è¼å ¥é é¢ä»¥æ¥çåç«ã
æ°å¢å¦ä¸åééµå½±æ ¼åç«
è®æåå¨åä¸åç¯ä¾çåç«ä¸å å
¥å¦ä¸åééµå½±æ ¼ãåè¨æå叿æéºçµ²çååå¨å¾å³å左移åæè®æç²ç´
è²ä¸¦æ¾å¤§ï¼ç¶å¾å縮åå
¶åå§å¤§å°åé¡è²ãéç¶æåå¯ä»¥æ¹è® font-sizeï¼ä½æ¹è®ä»»ä½å½±é¿ç模åç屬æ§é½æå°æè½ç¢çè² é¢å½±é¿ãåè代ä¹çæ¯ï¼æåå°å¥¹çååç¨ <span> å
裹起ä¾ï¼ç¶å¾åå¥å°å
¶é²è¡ç¸®æ¾åä¸è²ãééè¦æ°å¢ç¬¬äºååªå½±é¿ <span> çåç«ï¼
@keyframes grow-shrink {
25%,
75% {
scale: 100%;
}
50% {
scale: 200%;
color: magenta;
}
}
ç¾å¨å®æ´çç¨å¼ç¢¼å¦ä¸ï¼
p {
animation-duration: 3s;
animation-name: slide-in;
}
p span {
display: inline-block;
animation-duration: 3s;
animation-name: grow-shrink;
}
@keyframes slide-in {
from {
translate: 150vw 0;
scale: 200% 1;
}
to {
translate: 0 0;
scale: 100% 1;
}
}
@keyframes grow-shrink {
25%,
75% {
scale: 100%;
}
50% {
scale: 200%;
color: magenta;
}
}
æåå¨ãæéºçµ²ãå¨åå ä¸äºä¸å <span>ï¼
<p>
æ¯æ¯è²å<span>æéºçµ²</span>æ²é»å°å°æäºä¸æå
ï¼æå¾æ¯æ¯è²å¾å´è£¡æ¿åºæ°´ç
管ï¼ç¨ä¸ç¨®æ
µæ¶ãçå¦çè²é³å°å¥¹èªªè©±ã
</p>
éå訴ç覽å¨ï¼å¨åç«çå 25% åå¾ 25% æéï¼ååæè©²æ¯æ£å¸¸çï¼ä½å¨ä¸éé¨åï¼å®æè®æç²ç´
è²ï¼åæè¢«æ¾å¤§å縮å°ãæåå° span ç display 屬æ§è¨å®çº inline-blockï¼å çº transform 屬æ§ä¸æå½±é¿éæ¿æè¡å
§ç´å
§å®¹ã
å註ï¼éæ°è¼å ¥é é¢ä»¥æ¥çåç«ã
éè¤åç«
è¦è®åç«éè¤ææ¾ï¼å¯ä»¥ä½¿ç¨ animation-iteration-count 屬æ§ä¾æç¤ºåç«éè¤ç次æ¸ãå¨é種æ
æ³ä¸ï¼è®æåä½¿ç¨ infinite ä¾è®åç«ç¡ééè¤ï¼
p {
animation-duration: 3s;
animation-name: slide-in;
animation-iteration-count: infinite;
}
è®åç«ä¾åç§»å
鿍£åè®å®éè¤äºï¼ä½æ¯æ¬¡éå§åç«æé½è·³åèµ·é»ï¼éå¾å¥æªãæåçæ£æ³è¦çæ¯å®å¨è¢å¹ä¸ä¾åç§»åãéå¯ä»¥ééå° animation-direction è¨å®çº alternate ä¾è¼é¬å¯¦ç¾ï¼
p {
animation-duration: 3s;
animation-name: slide-in;
animation-iteration-count: infinite;
animation-direction: alternate;
}
使ç¨åç«äºä»¶
ä½ å¯ä»¥éé使ç¨åç«äºä»¶ä¾ç²å¾å°åç«çé¡å¤æ§å¶ââ以åéæ¼å®åçæç¨è¨æ¯ãéäºäºä»¶ç± AnimationEvent ç©ä»¶è¡¨ç¤ºï¼å¯ç¨æ¼åµæ¸¬åç«ä½æéå§ãçµæä»¥åéå§æ°çè¿ä»£ãæ¯åäºä»¶é½å
å«å®ç¼ççæé以å觸ç¼äºä»¶çåç«å稱ã
æåå°ä¿®æ¹æ»åæåçç¯ä¾ï¼ä»¥ä¾¿å¨æ¯ååç«äºä»¶ç¼çæè¼¸åºä¸äºè¨æ¯ï¼é樣æåå°±å¯ä»¥ççå®åæ¯å¦ä½éä½çã
æåå
å«äºèåä¸åç¯ä¾ç¸åçééµå½±æ ¼åç«ãéååç«å°æçº 3 ç§ï¼åçºãslide-inãï¼éè¤ 3 次ï¼ä¸¦ä¸æ¯æ¬¡é½ä»¥äº¤æ¿çæ¹åç§»åãå¨ @keyframes ä¸ï¼ç¸®æ¾åä½ç§»æ²¿è x 軸被æä½ï¼ä»¥ä½¿å
ç´ å¨è¢å¹ä¸æ»åã
.slide-in {
animation-duration: 3s;
animation-name: slide-in;
animation-iteration-count: 3;
animation-direction: alternate;
}
æ°å¢åç«äºä»¶ç£è½å¨
æåå°ä½¿ç¨ JavaScript ç¨å¼ç¢¼ä¾ç£è½ææä¸ç¨®å¯è½çåç«äºä»¶ãéæ®µç¨å¼ç¢¼çµæ äºæåçäºä»¶ç£è½å¨ï¼æå卿件馿¬¡è¼å ¥æå¼å«å®ä¾é²è¡è¨å®ã
const element = document.getElementById("watch-me");
element.addEventListener("animationstart", listener, false);
element.addEventListener("animationend", listener, false);
element.addEventListener("animationiteration", listener, false);
element.className = "slide-in";
鿝éå¸¸æ¨æºçç¨å¼ç¢¼ï¼ä½ å¯ä»¥å¨ eventTarget.addEventListener() çæä»¶ä¸æ¾å°éæ¼å®å¦ä½éä½çè©³ç´°è¨æ¯ãéæ®µç¨å¼ç¢¼åçæå¾ä¸ä»¶äºæ¯å°æåè¦å ä¸åç«çå
ç´ ç class è¨å®çºãslide-inãï¼æå鿍£åæ¯çºäºåååç«ã
çºä»éº¼ï¼å çº animationstart äºä»¶å¨åç«ä¸éå§å°±è§¸ç¼ï¼è卿åçä¾åä¸ï¼éç¼ç卿åçç¨å¼ç¢¼å·è¡ä¹åãæä»¥æåå°å¨äºå¾ééå°å
ç´ ç class è¨å®çºå ä¸åç«ç樣å¼ä¾èªå·±åååç«ã
æ¥æ¶äºä»¶
äºä»¶æè¢«å³éå° listener() å½å¼ï¼å¦ä¸æç¤ºã
function listener(event) {
const l = document.createElement("li");
switch (event.type) {
case "animationstart":
l.textContent = `å·²éå§ï¼ç¶éæéçº ${event.elapsedTime}`;
break;
case "animationend":
l.textContent = `å·²çµæï¼ç¶éæéçº ${event.elapsedTime}`;
break;
case "animationiteration":
l.textContent = `æ°ç循ç°éå§æ¼æé ${event.elapsedTime}`;
break;
}
document.getElementById("output").appendChild(l);
}
éæ®µç¨å¼ç¢¼ä¹é常簡å®ã宿¥ç event.type ä¾ç¢ºå®ç¼çäºåªç¨®åç«äºä»¶ï¼ç¶å¾å¨æåç¨ä¾è¨ééäºäºä»¶ç <ul>ï¼ç¡åºå表ï¼ä¸æ°å¢ä¸åé©ç¶ç註è¨ã
ç¶ä¸åé½å®æå¾ï¼è¼¸åºçµæçèµ·ä¾å鿍£ï¼
- å·²éå§ï¼ç¶éæéçº 0
- æ°ç循ç°éå§æ¼æé 3.01200008392334
- æ°ç循ç°éå§æ¼æé 6.00600004196167
- å·²çµæï¼ç¶éæéçº 9.234000205993652
è«æ³¨æï¼éäºæéé常æ¥è¿ï¼ä½ä¸¦ä¸å®å
¨æ¯æ ¹æåç«çµæ
æå»ºç«çæéè¨å®æé æçãå¦è«æ³¨æï¼å¨åç«çæå¾ä¸æ¬¡è¿ä»£ä¹å¾ï¼ä¸æç¼é animationiteration äºä»¶ï¼èæ¯ç¼é animationend äºä»¶ã
çºäºå®æ´èµ·è¦ï¼é裡æ¯ç¨ä¾é¡¯ç¤ºé é¢å §å®¹ç HTMLï¼å æ¬è ³æ¬æå ¥æéæ¥æ¶äºä»¶è¨æ¯çå表ï¼
<h1 id="watch-me">çæç§»å</h1>
<p>
éåç¯ä¾å±ç¤ºäºå¦ä½ä½¿ç¨ CSS åç«è® <code>H1</code>
å
ç´ å¨é é¢ä¸ç§»åã
</p>
<p>
æ¤å¤ï¼æå卿¯æ¬¡åç«äºä»¶è§¸ç¼æé½æè¼¸åºä¸äºæåï¼éæ¨£ä½ å°±å¯ä»¥çå°å®åç實ééä½ã
</p>
<ul id="output"></ul>
é裡æ¯å³æç輸åºçµæã
å註ï¼éæ°è¼å ¥é é¢ä»¥æ¥çåç«ã
çº display è content-visibility å ä¸åç«
éåç¯ä¾å±ç¤ºäº display å content-visibility å¦ä½å ä¸åç«ãé種è¡çºå°æ¼å»ºç«é²å
¥ï¼é¢éåç«å¾æç¨ï¼ä¾å¦ä½ æ³è¦ç¨ display: none å¾ DOM ä¸ç§»é¤ä¸å容å¨ï¼ä½å¸æå®è½ç¨ opacity å¹³æ»å°æ·¡åºï¼è䏿¯ç«å³æ¶å¤±ã
æ¯æ´ççè¦½å¨æä½¿ç¨é¢æ£åç«é¡åçè®é«ä¾çº display å content-visibility å ä¸åç«ãéé常æå³è屬æ§å°å¨å
©åå¼ä¹éåç«çä¸éï¼50%ï¼ç¿»è½ã
ç¶èï¼æä¸åä¾å¤ï¼é£å°±æ¯ç¶å¾ display: none æ content-visibility: hidden åç«å°ä¸åå¯è¦å¼æãå¨é種æ
æ³ä¸ï¼ç覽å¨å°å¨å
©åå¼ä¹éç¿»è½ï¼ä»¥ä¾¿è¢«å ä¸åç«çå
§å®¹å¨æ´ååç«æçºæéå
§é½æ¯å¯è¦çã
èä¾ä¾èªªï¼
- ç¶
displayå¾noneåç«å°blockï¼æå ¶ä»å¯è¦çdisplayå¼ï¼æï¼è©²å¼å°å¨åç«æçºæéç0%èç¿»è½çºblockï¼ä½¿å ¶å¨æ´åéç¨ä¸é½å¯è¦ã - ç¶
displayå¾blockï¼æå ¶ä»å¯è¦çdisplayå¼ï¼åç«å°noneæï¼è©²å¼å°å¨åç«æçºæéç100%èç¿»è½çºnoneï¼ä½¿å ¶å¨æ´åéç¨ä¸é½å¯è¦ã
HTML
HTML å
å«å
©å <p> å
ç´ ï¼ä¸éæä¸å <div>ï¼æåæå°å
¶ display å¾ none åç«å° blockã
<p>
å¨è¢å¹ä¸ä»»ä½å°æ¹é»æææä»»ä½éµï¼ä»¥åæ
<code><div></code> ç顯示èé±èã
</p>
<div>
鿝ä¸å <code><div></code> å
ç´ ï¼å®å¨
<code>display: none; opacity: 0</code> å
<code>display: block; opacity: 1</code> ä¹éå ä¸åç«ãå¾é
·å§ï¼
</div>
<p>
鿝å¦ä¸å段è½ï¼ç¨ä¾é¡¯ç¤º <code>display: none;</code> æ£å¨è¢«æç¨åç§»é¤æ¼ä¸é¢ç
<code><div></code>ãå¦æåªæ¯æ¹è®å®ç <code>opacity</code>ï¼å®å°ç¸½æ¯ä½æ
DOM ä¸ç空éã
</p>
CSS
html {
height: 100vh;
}
div {
font-size: 1.6rem;
padding: 20px;
border: 3px solid red;
border-radius: 20px;
width: 480px;
opacity: 0;
display: none;
}
/* åç« class */
div.fade-in {
display: block;
animation: fade-in 0.7s ease-in forwards;
}
div.fade-out {
animation: fade-out 0.7s ease-out forwards;
}
/* åç«ééµå½±æ ¼ */
@keyframes fade-in {
0% {
opacity: 0;
display: none;
}
100% {
opacity: 1;
display: block;
}
}
@keyframes fade-out {
0% {
opacity: 1;
display: block;
}
100% {
opacity: 0;
display: none;
}
}
注æå¨ééµå½±æ ¼åç«ä¸å
å«äº display 屬æ§ã
JavaScript
æå¾ï¼æåå å
¥ä¸äº JavaScript ä¾è¨å®äºä»¶ç£è½å¨ä»¥è§¸ç¼åç«ãå
·é«ä¾èªªï¼ç¶æå叿 <div> åºç¾æï¼æåçºå
¶æ°å¢ fade-in classï¼ç¶å¸æå®æ¶å¤±æï¼åæ°å¢ fade-out classã
const divElem = document.querySelector("div");
const htmlElem = document.querySelector(":root");
htmlElem.addEventListener("click", showHide);
document.addEventListener("keydown", showHide);
function showHide() {
if (divElem.classList[0] === "fade-in") {
divElem.classList.remove("fade-in");
divElem.classList.add("fade-out");
} else {
divElem.classList.remove("fade-out");
divElem.classList.add("fade-in");
}
}
çµæ
ç¨å¼ç¢¼ç®ç¹ªå¦ä¸ï¼