要過年了,使用CSS實現一個喜慶的燈籠動畫效果!

2022-01-10 22:00:31
要過年了,下面本篇文章帶大家用CSS畫了個燈籠,並新增動畫效果,實現燈籠左右搖擺的效果,希望對大家有所幫助!

過年了~ 過年了~ 過年了~

辭舊迎新過年啦 張燈結綵春節啦~

金雞起舞送福啦 新的一年福來啦~

文章開頭幾句歌詞,頓時顯得喜慶了不,我們的燈籠是下面這個樣子的。

1.gif

animation屬性

畫燈籠我們肯定不能畫一個靜態的燈籠,我們先來複習一下CSS中的animation屬性,該是是一個簡寫屬性,由animation-nameanimation-duration, animation-timing-functionanimation-delayanimation-iteration-countanimation-directionanimation-fill-modeanimation-play-state 屬性組成。這裡我們就不展開講解了,具體可以到MDN中學習。

我們先來看一下下面這個範例:

animation: swing 3s infinite ease-in-out;

在上面的例子中使用了一個名為swing的動畫序列,動畫序列通過@keyframes建立,執行時間3s,動畫迴圈執行,最後ease-in-out表示動畫執行的節奏。

實現思路

  • 為一個矩形新增border-radius使其,形成一個燈籠的外形。

  • 為矩形新增::before::after來形成燈籠的頂部和頭部

  • 畫一個燈籠線。

  • 在 矩形內部新增兩個比較細的矩形,通過新增 border-radius 來形成燈籠的線條。

  • 設定燈籠的動畫效果

  • 新增燈穗的樣式

接下來我們就分步驟實現。

繪製燈籠外形

首先我們定義HTML結構,程式碼如下:

<!-- 燈籠容器 -->
<div class="lantern-con">
  <!-- 提著燈籠的線 -->
  <div class="lantern-line"></div>
  <!-- 燈籠主要區域 -->
  <div class="lantern-light">
  </div>
</div>

然後我們畫一個橢圓,然後通過::before::after,繪製上下的兩個燈籠蓋,CSS如下:

/* 燈籠容器 */
.lantern-con {
  position: fixed;
  left: 160px;
}

/* 燈籠中間紅色區域 */
.lantern-light {
  position: relative;
  width: 120px;
  height: 90px;
  background-color: red;
  margin: 30px;
  border-radius: 50%;
  box-shadow: -5px 5px 50px 4px #fa6c00;
  /* 設定旋轉點 */
  transform-origin: top center;
  animation: swing 3s infinite ease-in-out;
}

/* 燈籠頂部和底部的樣式 */
.lantern-light::before,
.lantern-light::after {
  content: '';
  position: absolute;
  border: 1px solid #dc8f03;
  width: 60px;
  height: 12px;
  /* 背景漸變 */
  background: linear-gradient(
    to right,
    #dc8f03,
    #ffa500,
    #dc8f03,
    #ffa500,
    #dc8f03
  );
  left: 30px;
}

/* 頂部位置 */
.lantern-light::before {
  top: -7px;
  border-top-left-radius: 5px;
  border-top-right-radius: 5px;
}

/* 底部位置 */
.lantern-light::after {
  bottom: -7px;
  border-bottom-left-radius: 5px;
  border-bottom-right-radius: 5px;
}

/* 提著燈籠的線的樣式 */
.lantern-line {
  width: 2px;
  height: 50px;
  background-color: #dc8f03;
  position: absolute;
  left: 88px;
}
/* 燈籠的動畫效果 */
@keyframes swing {
  0% {
    transform: rotate(-6deg);
  }

  50% {
    transform: rotate(6deg);
  }

  100% {
    transform: rotate(-6deg);
  }
}

現在就實現了一個比較基礎燈籠外形,效果如下:

2.png

燈籠內部線條

燈籠的內部線條是通過兩個矩形實現了,通過border-radius屬性將其設定為橢圓,然後繪製邊,呈現燈籠線條。

<div class="lantern-light">
  <!-- 燈籠中間的線條 -->
  <div class="lantern-circle">
    <div class="lantern-rect">
      <!-- 燈籠中間的文字內容 -->
      <div class="lantern-text">燈籠</div>
    </div>
  </div>
</div>

對應的CSS如下:

/* 燈籠中間的線條 */
.lantern-circle,
.lantern-rect {
  height: 90px;
  border-radius: 50%;
  border: 2px solid #dc8f03;
  background-color: rgba(216, 0, 15, 0.1);
}

/* 外層 */
.lantern-circle {
  width: 100px;
  margin: 12px 8px 8px 10px;
}

/* 內層 */
.lantern-rect {
  margin: -2px 8px 8px 26px;
  width: 45px;
}

/* 文字樣式 */
.lantern-text {
  font-size: 28px;
  font-weight: bold;
  text-align: center;
  color: #dc8f03;
  margin-top: 4px;
}

效果如下:

2.gif

燈籠穗

現在我們來繪製一下燈籠穗,這個東西比較簡單,最主要的是新增一個動畫效果,其HTML結構如下:

<!-- 燈籠主要區域 -->
<div class="lantern-light">
  <!-- more code -->
  <!-- 燈籠穗 -->
  <div class="lantern-tassel-top">
    <div class="lantern-tassel-middle"></div>
    <div class="lantern-tassel-bottom"></div>
  </div>
</div>

CSS如下:

/* 燈穗 */
.lantern-tassel-top {
  width: 5px;
  height: 20px;
  background-color: #ffa500;
  border-radius: 0 0 5px 5px;
  position: relative;
  margin: -5px 0 0 59px;
  /* 讓燈穗也有一個動畫效果 */
  animation: swing 3s infinite ease-in-out;
}

.lantern-tassel-middle,
.lantern-tassel-bottom {
  position: absolute;
  width: 10px;
  left: -2px;
}

.lantern-tassel-middle {
  border-radius: 50%;
  top: 14px;
  height: 10px;
  background-color: #dc8f03;
  z-index: 2;
}

.lantern-tassel-bottom {
  background-color: #ffa500;
  border-bottom-left-radius: 5px;
  height: 35px;
  top: 18px;
  z-index: 1;
}

到這我們就把這個燈籠畫完了。

3.gif

(學習視訊分享:)

以上就是要過年了,使用CSS實現一個喜慶的燈籠動畫效果!的詳細內容,更多請關注TW511.COM其它相關文章!