按下右側的「點擊預覽」按鈕能夠在當前頁面預覽,點擊連接能夠全屏預覽。css
https://codepen.io/comehope/pen/rKPLMWhtml
此視頻是能夠交互的,你能夠隨時暫停視頻,編輯視頻中的代碼。前端
請用 chrome, safari, edge 打開觀看。git
https://scrimba.com/p/pEgDAM/c6NzPfKgithub
每日前端實戰系列的所有源代碼請從 github 下載:chrome
https://github.com/comehope/front-end-daily-challengesdom
定義 dom,容器中包含機體、出水口、咖啡杯、按鈕和咖啡:flex
<div class="coffee-machine"> <span class="body"></span> <span class="spout"></span> <span class="cup"></span> <span class="button"></span> <span class="coffee"></span> </div>
居中顯示:動畫
body { margin: 0; height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(to right bottom, sandybrown, darkred); }
定義容器尺寸:spa
.coffee-machine { width: 15em; height: 15em; background-color: white; font-size: 20px; border-radius: 50%; border: 2em solid white; }
畫出機體的外框:
.coffee-machine { position: relative; display: flex; justify-content: center; } .body { position: absolute; width: 8em; height: 12em; background-color: sandybrown; border-radius: 1.2em; top: 1.5em; border-right: 0.6em solid peru; }
用僞元素畫出機體的中間部分:
.body::after { content: ''; position: absolute; width: 8em; height: 8em; background-color: darkslategray; top: 2em; border-right: 0.6em solid black; }
畫出出水口:
.spout { position: absolute; width: 3em; height: 1em; background-color: white; top: 3.5em; border-radius: 0.5em; border-right: 0.5em solid silver; }
畫出咖啡杯的杯體:
.cup { position: absolute; width: 3em; height: 2em; background-color: white; bottom: 3.5em; border-radius: 0 0 1.4em 1.4em; border-right: 0.5em solid silver; }
用僞元素畫出咖啡杯的把手:
.cup::after { content: ''; position: absolute; width: 0.6em; height: 0.6em; border: 0.3em solid silver; border-radius: 50%; right: -1.2em; top: 0.2em; }
畫出按鈕:
.button { position: absolute; width: 1.2em; height: 1.2em; background-color: tomato; border-radius: 50%; bottom: 2em; right: 4.5em; }
畫出咖啡:
.coffee::before, .coffee::after { content: ''; position: absolute; width: 0.7em; height: 5em; background-color: chocolate; top: 4.5em; left: calc((15em - 0.7em) / 2); }
接下來潤色一下。
爲咖啡機增長光影:
.coffee-machine { z-index: 1; } .coffee-machine::before, .coffee-machine::after { content: ''; position: absolute; width: 2em; height: 2em; border: 0.3em solid transparent; z-index: 2; border-radius: 50%; border-left-color: white; left: 3.8em; } .coffee-machine::before { top: 1.8em; transform: rotate(40deg); } .coffee-machine::after { bottom: 1.8em; transform: rotate(-40deg); }
定義咖啡流動的前半段動畫,即咖啡從出水口流到杯中:
.coffee::before { animation: 2s linear infinite; animation-name: pouring-before; transform-origin: top; } @keyframes pouring-before { 0%, 20% { transform: scaleY(0); } 30%, 100% { transform: scaleY(1); } 70%, 100% { visibility: hidden; } }
定義咖啡流動的後半段動畫,即出水口中止流出咖啡,剩餘咖啡流到杯中:
.coffee::after { animation: 2s linear infinite; animation-name: pouring-after; transform-origin: bottom; } @keyframes pouring-after { 0%, 70% { visibility: hidden; transform: scaleY(1); } 80%, 100% { transform: scaleY(0); } }
大功告成!