如何用純 CSS 為母親節創作一顆畫素畫風格的愛心
阿新 • • 發佈:2018-11-21
效果預覽
線上演示按下右側的“點選預覽”按鈕可以在當前頁面預覽,點選連結可以全屏預覽。
https://codepen.io/comehope/pen/LmrZVX
可互動視訊教程
此視訊是可以互動的,你可以隨時暫停視訊,編輯視訊中的程式碼。
請用 chrome, safari, edge 開啟觀看。
https://scrimba.com/p/pEgDAM/cPd9asV
原始碼下載
本地下載請從 github 下載。
https://github.com/comehope/f...
程式碼解讀
定義 dom,描繪出 8 行 9 列的心形畫素圖案,其中 <dot> 是指要填充顏色的畫素點:
<div class="heart"> <!-- line 1 --> <span></span> <dot></dot> <dot></dot> <span></span> <span></span> <span></span> <dot></dot> <dot></dot> <span></span> <!-- line 2 --> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <span></span> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <!-- line 3 --> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <!-- line 4 --> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <!-- line 5 --> <span></span> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <span></span> <!-- line 6 --> <span></span> <span></span> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <dot></dot> <span></span> <span></span> <!-- line 7 --> <span></span> <span></span> <span></span> <dot></dot> <dot></dot> <dot></dot> <span></span> <span></span> <span></span> <!-- line 8 --> <span></span> <span></span> <span></span> <span></span> <dot></dot> <span></span> <span></span> <span></span> <span></span> </div>
居中顯示:
html,body{
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(silver, white);
}
設定心形的樣式:
.heart { display: grid; grid-template-columns: repeat(9, 1fr); grid-gap: 2px; } .heart > * { width: 1em; height: 1em; border-radius: 0.1em; font-size: 30px; } .heart dot{ background: red; }
定義淡入淡出動畫:
.heart dot{
filter: opacity(0);
animation: animation 5s ease-out infinite;
}
@keyframes animation{
0%{
filter: opacity(0);
transform: translateY(-10em);
}
25%{
filter: opacity(1);
transform: translateY(0);
}
75%{
filter: opacity(1);
transform: translateY(0);
}
100%{
filter: opacity(0);
transform: translateY(10em);
}
}
最後,讓各畫素點按不同時間入場,增強動畫效果:
.heart dot:nth-of-type(2n) {
animation-delay: 0.2s;
}
.heart dot:nth-of-type(3n) {
animation-delay: 0.3s;
}
.heart dot:nth-of-type(4n) {
animation-delay: 0.4s;
}
.heart dot:nth-of-type(5n) {
animation-delay: 0.5s;
}
.heart dot:nth-of-type(6n) {
animation-delay: 0.6s;
}
.heart dot:nth-of-type(7n) {
animation-delay: 0.7s;
}
.heart dot:nth-of-type(8n) {
animation-delay: 0.8s;
}
.heart dot:nth-of-type(9n) {
animation-delay: 0.9s;
}
.heart dot:nth-of-type(10n) {
animation-delay: 1.0s;
}
.heart dot:nth-of-type(11n) {
animation-delay: 1.1s;
}
大功告成!
知識點
- grid-template-columns https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns
- grid-gap https://developer.mozilla.org/en-US/docs/Web/CSS/grid-gap
- :nth-of-type() https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-of-type
- animation-delay https://developer.mozilla.org/en-US/docs/Web/CSS/animation-delay
- translateY() https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/translateY
- filter https://developer.mozilla.org/en-US/docs/Web/CSS/filter