CSS3 方塊不間斷彈跳效果

admin發表於2019-01-14

分享一段程式碼例項,它利用CSS3實現了方塊不斷的彈跳效果。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style>
html,body {
  margin: 0;
  background: #bbd149;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}
.box {
  height: 50px;
  width: 50px;
  position: relative;
}
.box::before {
  content: '';
  height: 8px;
  width: 50px;
  background: #000;
  opacity: .2;
  border-radius: 50%;
  position: absolute;
  top: 67px;
  left: 0;
  animation: shadow .5s linear infinite;
}
.box::after {
  border-radius: 5px;
  background: #fff;
  animation: rotate .5s linear infinite;
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  width: 50px;
  height: 50px;
}
@keyframes shadow {
  0%, 100% {
    transform: scaleX(1);
  }
  50% {
    transform: scaleX(1.2);
  }
}
@keyframes rotate {
  0% {
    transform: translateY(0) rotate(0deg);
  }
  25% {
    transform: translateY(10px) rotate(22.5deg);
  }
  50% {
    transform: translateY(20px) scale(1.1, 0.9) rotate(45deg);
    border-bottom-right-radius: 50px;
  }
  75% {
    transform: translateY(10px) rotate(67.5deg);
  }
  100% {
    transform: translateY(0) rotate(90deg);
  }
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>

程式碼實現了預期效果,下面介紹一下它的實現過程。

一.程式碼註釋:

[CSS] 純文字檢視 複製程式碼
html,body {
  margin: 0;
  background: #bbd149;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}

採用彈性佈局,這樣的話,並且設定它內部專案水平垂直居中。

[CSS] 純文字檢視 複製程式碼
.box {
  height: 50px;
  width: 50px;
  position: relative;
}

底部陰影和頂部跳動元素的容器。

並且採用相對定位,那麼它的定位子元素位移就以它為參考物件。

[CSS] 純文字檢視 複製程式碼
.box::before {
  content: '';
  height: 8px;
  width: 50px;
  background: #000;
  opacity: .2;
  border-radius: 50%;
  position: absolute;
  top: 67px;
  left: 0;
  animation: shadow .5s linear infinite;
}

通過偽元素選擇器新增底部陰影。

高度和寬度分別8px和50px,尺寸符合視覺效果。

然後通過動畫設定其尺寸不斷的增加和縮小,實現了頂部元素不斷變化投影跟隨變化的視覺效果。

[CSS] 純文字檢視 複製程式碼
.box::after {
  border-radius: 5px;
  background: #fff;
  animation: rotate .5s linear infinite;
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  width: 50px;
  height: 50px;
}

通過偽元素選擇器新增上面跳動的元素。

與底部陰影一樣的道理,只不過動畫執行過程有所區別而已。

[CSS] 純文字檢視 複製程式碼
@keyframes shadow {
  0%, 100% {
    transform: scaleX(1);
  }
  50% {
    transform: scaleX(1.2);
  }
}

設定元素由原來寬度放倒原來的1.2被寬度,再還原到原來寬度。

[CSS] 純文字檢視 複製程式碼
50% {
    transform: translateY(20px) scale(1.1, 0.9) rotate(45deg);
    border-bottom-right-radius: 50px;
  }

模擬元素觸碰的時候,由於壓力導致寬度變大,高度變小,右下部為圓角效果。

二.相關閱讀:

(1).display: flex參閱display:flex彈性佈局一章節。

(2).相對定位參閱CSS position:relative 相對定位一章節。

(3).絕對定位參閱CSS position:absolute 絕對定位一章節。

(4).border-radius參閱CSS3 border-radius一章節。

(5).animation參閱CSS3 animation一章節。

(6).::after參閱CSS E::after 偽物件選擇器一章節。

(7).@keyframes參閱CSS3 @keyframes一章節。

(8).transform參閱CSS3 transform一章節。

相關文章