1. 程式人生 > >如何用純 CSS 繪製一顆閃閃發光的璀璨鑽石

如何用純 CSS 繪製一顆閃閃發光的璀璨鑽石

效果預覽

按下右側的“點選預覽”按鈕在當前頁面預覽,點選連結全屏預覽。

線上演示

https://codepen.io/zhang-ou/pen/qYqwQp

可互動視訊教程

此視訊是可以互動的,你可以隨時暫停視訊,編輯視訊中的程式碼。

請用 chrome, safari, edge 開啟觀看。

https://scrimba.com/c/cp24VfV

原始碼下載

本地下載

請從 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;
}

大功告成!

知識點

原文地址:https://segmentfault.com/a/1190000014652116