css動畫之 360首頁四字移動效果

童鞋們能夠點這兒看效果哦~css

無心中打開了360首頁,想找找有什麼優秀的網站(好比7k7k4399小遊戲之類的)。咳咳~~~ 忽然看到一個好看的玩意:html


從事前端以後會有兩個毛病,一個是編輯完一句話以後習慣ctrl+s前端


-------------------------------------------------------------git

emmmmm 又來了。 另外一個就是看到瀏覽器上有什麼奇怪的玩意,喜歡 右擊--檢查 ing......github


┗|`O′|┛ 嗷~~,看起來他是用 JS 寫的呀~(誰說的,jq天下第一)。瀏覽器

因而,我這毛病又出來了,這麼簡單的動畫不能用css 寫嘛?bash

---- 說幹就幹。
字體

大渣好,我係渣渣輝!動畫

<div id="box">
  <div class="font">貪</div>
  <div class="font">玩</div>
  <div class="font">藍</div>
  <div class="font">月</div>
</div>

#box {
  position: relative;
  font-size: 150px;
  width: 400px;
  height: 400px;
  margin: 50px auto;
  border: 5px solid #ffb787;
  border-radius: 5%;
  overflow: hidden;
}

#box .font {
  line-height: 200px;
  text-align: center;
  width: 200px;
  height: 200px;
  color: red;
  float: left;
}複製代碼


咦~~就是這麼敢單,還沒怎麼寫就「感受」快完成了!網站

來吧 背景不就是個紅色方塊嘛。

<div id="box">
  <div class="bg"></div>
  <!-- 加個紅背景 -->
  <div class="font">貪</div>
  <div class="font">玩</div>
  <div class="font">藍</div>
  <div class="font">月</div>
</div>複製代碼


?????

原本覺得就這麼簡單實現了,忽然發現和最終效果有誤差啊!

仔細看了一下


在紅色背景和文字的交界處,紅色背景內的文字是白色的!!

頭疼了一段時間想了想,白色背景紅字是一個頁面,而紅色背景白色字體是另外一個頁面。

這個紅色背景的壓在白色背景的上面!!!

而動畫的實現,是依靠四個角的盒子的widthheight的改變!

好吧是我想的太簡單 (+_+)?   好的 ,不慌、不慌 如今思路明確了,我們開擼!

<div id="box">
  <div class="font">貪</div>
  <div class="font">玩</div>
  <div class="font">藍</div>
  <div class="font">月</div>
  <div class="po1">
    <div>貪</div>
  </div>
  <div class="po2">
    <div>玩</div>
  </div>
  <div class="po3">
    <div>藍</div>
  </div>
  <div class="po4">
    <div>月</div>
  </div>
</div>複製代碼

html部分 ,我加上了四個盒子 po1,po2,po3,po4。分別給這四個盒子設置overflow:hidden經過控制他們的寬高,來實現隱藏顯示內部的字,而且都給他們定位到中間,默認高寬爲0。

.po1,
.po2,
.po3,
.po4 {
  overflow: hidden;
  position: absolute;
  background: red;
  width: 0;
  height: 0;
}
.po1 {
  right: 200px;
  bottom: 200px;
}
.po2 {
  left: 200px;
  bottom: 200px;
}
.po3 {
  right: 200px;
  top: 200px;
}
.po4 {
  left: 200px;
  top: 200px;
}

.po1 div,
.po2 div,
.po3 div,
.po4 div {
  position: absolute;
  width: 200px;
  text-align: center;
  color: #fff;
}
.po1 div {
  bottom: 0;
  right: 0;
}
.po2 div {
  bottom: 0;
  left: 0;
}
.po3 div {
  right: 0;
  top: 0;
}
.po4 div {
  top: 0;
  left: 0;
}


複製代碼

好的 如今四個盒子都被定位在盒子最中間了。

先加一個動畫試試把!

@keyframes w-h {
  0% {    height: 0;    width: 200px;  }
  50% {    height: 200px;    width: 200px;  }
  100% {    height: 200px;    width: 0;  }
}

.po1 {
  animation: w-h 2s infinite linear;
}
.po2 {
  animation: w-h 2s infinite linear;
}
.po3 {
  animation: w-h 2s infinite linear;
}
.po4 {
  animation: w-h 2s infinite linear;
}複製代碼


看起來有點意思啦~

如今我們再調整一下動畫的幀 ,和四個盒子的動畫延遲時間和方現:

@keyframes w-h {
  0% {    height: 0;    width: 200px;  }
  25% {    height: 200px;    width: 200px;  }
  50% {    height: 200px;    width: 0;  }
}

.po1 {  animation: w-h 2s 0.5s infinite linear;}
.po2 {  animation: w-h 2s infinite linear reverse; /* reverse 反向動畫 */}
.po3 {  animation: w-h 2s 1s infinite linear reverse;}
.po4 {  animation: w-h 2s 1.5s infinite linear;}複製代碼

效果:


哈哈,終於實現了呢,看來有些東西,真的是看起來簡單,寫起來才知道坑點呢。