如何用純 CSS 繪製一顆閃閃發光的璀璨鑽石
阿新 • • 發佈:2018-11-20
效果預覽
按下右側的“點選預覽”按鈕在當前頁面預覽,點選連結全屏預覽。
線上演示https://codepen.io/zhang-ou/pen/qYqwQp
可互動視訊教程
此視訊是可以互動的,你可以隨時暫停視訊,編輯視訊中的程式碼。
請用 chrome, safari, edge 開啟觀看。
原始碼下載
本地下載請從 github 下載。
https://github.com/comehope/front-end-daily-challenges/tree/master/006-blue-dazzling-diamond
程式碼解讀
定義 dom,容器中包含一個元素:
<div class="diamond">
<span></span>
</div>
居中顯示:
html,
body {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
畫出第一組刻面的形狀:
.diamond { display: grid; } .diamond span { border-width: 50px; border-style: solid; }
為第一組刻面上色,因為後面還要用到這些色值,所以定義了變數:
:root {
--color1: deepskyblue;
--color2: steelblue;
--color3: royalblue;
--color4: dodgerblue;
}
.diamond span {
border-color: var(--color1) var(--color2) var(--color3) var(--color4);
}
dom容器 中再增加3組刻面:
<div class="diamond"> <span></span> <span></span> <span></span> <span></span> </div>
把4組刻面先組成田字格,再轉換成鑽石形狀:
.diamond {
grid-template-columns: 1fr 1fr;
transform: rotate(45deg);
}
.diamond span:first-child {
border-color: transparent var(--color2) var(--color3) transparent;
}
定義動畫效果:
@keyframes animate {
0% {
border-color: var(--color1) var(--color2) var(--color3) var(--color4);
}
25% {
border-color: var(--color4) var(--color1) var(--color2) var(--color3);
}
50% {
border-color: var(--color3) var(--color4) var(--color1) var(--color2);
}
75% {
border-color: var(--color2) var(--color3) var(--color4) var(--color1);
}
100% {
border-color: var(--color1) var(--color2) var(--color3) var(--color4);
}
}
最後,把動畫效果應用到除第1組以外的刻面上:
.diamond span:not(:first-child) {
animation: animate 2s linear infinite;
}
大功告成!
知識點
- variables https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables
- border-width https://developer.mozilla.org/en-US/docs/Web/CSS/border-width
- border-color https://developer.mozilla.org/en-US/docs/Web/CSS/border-color
- grid-template-column https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns
- rotate() https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate