1. 程式人生 > >純CSS打造邊框亮點移動效果

純CSS打造邊框亮點移動效果

引言

在足球和籃球比賽的電視轉播中,記分版在剛彈出時,通常會在左下角和右上角出現兩個亮點,並沿著記分版邊緣移動一段距離,最後消失。這種動畫效果可以幫助觀眾更加關注相對單調的記分版。

最近正好在研究CSS動畫,一直在嘗試使用涉及@keyframes的純CSS來做出這個效果,終於成功實現了。

HTML程式碼

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>邊框動畫</title>
<style type="text/css">
.shine
{ position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 300px; height: 60px; margin: auto; background-color: #333; box-shadow: inset 0 0 2px 5px #8B7500; border-radius: 2px; color: #FFD700; } .shine::before, .shine::after { position: absolute; top: 2
px
; bottom: 0; left: 2px; right: 0; content: ''; z-index: -1; margin: 0; box-shadow: 0 0 3px 2px #FFD700; width: 5px; height: 5px; background-color: #FFD700; border-radius: 50%; }
.shine::before { animation:leftShine 6s linear; -moz-animation:leftShine 6s linear; /* Firefox */ -webkit-animation
:leftShine 6s linear
; /* Safari and Chrome */ -o-animation:leftShine 6s linear; /* Opera */ }
.shine::after { animation:rightShine 6s linear; -moz-animation:rightShine 6s linear; /* Firefox */ -webkit-animation:rightShine 6s linear; /* Safari and Chrome */ -o-animation:rightShine 6s linear; /* Opera */ } /* Animation for shine point on left */ @keyframes leftShine { 0% {top: 57px; left: 27px;} 25% {top: 57px; left: -2px;} 75% {top: -2px; left: -2px;} 100% {top: -2px; left: 27px;} } /* Firefox */ @-moz-keyframes leftShine { 0% {top: 57px; left: 27px;} 25% {top: 57px; left: -2px;} 75% {top: -2px; left: -2px;} 100% {top: -2px; left: 27px;} } /* Safari 和 Chrome */ @-webkit-keyframes leftShine { 0% {top: 57px; left: 27px;} 25% {top: 57px; left: -2px;} 75% {top: -2px; left: -2px;} 100% {top: -2px; left: 27px;} } /* Opera */ @-o-keyframes leftShine { 0% {top: 57px; left: 27px;} 25% {top: 57px; left: -2px;} 75% {top: -2px; left: -2px;} 100% {top: -2px; left: 27px;} } /* Animation for shine point on right */ @keyframes rightShine { 0% {top: -2px; left: 268px;} 25% {top: -2px; left: 297px;} 75% {top: 57px; left: 297px;} 100% {top: 57px; left: 268px;} } /* Firefox */ @-moz-keyframes rightShine { 0% {top: -2px; left: 268px;} 25% {top: -2px; left: 297px;} 75% {top: 57px; left: 297px;} 100% {top: 57px; left: 268px;} } /* Safari 和 Chrome */ @-webkit-keyframes rightShine { 0% {top: -2px; left: 268px;} 25% {top: -2px; left: 297px;} 75% {top: 57px; left: 297px;} 100% {top: 57px; left: 268px;} } /* Opera */ @-o-keyframes rightShine { 0% {top: -2px; left: 268px;} 25% {top: -2px; left: 297px;} 75% {top: 57px; left: 297px;} 100% {top: 57px; left: 268px;} }
</style> </head> <body> <div class="shine"></div> </body> </html>

CSS說明

上述程式碼只涉及很簡單的html,絕大部分是CSS的內容。
- 使用.shine::before和.shine::after來分別處理左下角和右上角兩個亮點的移動
- 設定好亮點的背景色,並設定border-radius:50%來將其改為圓點,採用box-shadow樣式加入模糊來模擬光線散射效果
- 通過leftShine和rightShine兩個keyframes效果來分別指定左右兩個點的動畫路徑,具體說明請自行參閱w3cschool

效果展示

  • 初始階段
    初始階段,亮點沿順時針方向移動
  • 中途階段
    中途階段,亮點進入側邊
  • 即將完成
    即將完成階段,亮點已經繞完了側邊
  • 最終完成
    動畫最終完成後,亮點消失