html css svg word text

SVG:框線文字動畫

王淳藝 Celia Wang 2022/10/17 13:45:39
1071

會動的文字總是可以抓住使用者的目光!看似複雜卻很簡單的css動畫,讓我們開始吧~

----

說到SVG,就需要先了解他的屬性,以下舉一個例子:

<svg width="1092" height="220">
    <text x="150" y="200" fill="#fff" stroke="#333" id="text-logo" stroke-width="2" font-size="95">Hello World</text>
</svg>

這邊我們定義了這個svg的寬度是1092px,高度是220px;

並且由於今天的主題是製作文字,因此使用了 text 的標籤,以下將介紹其中添加的文字定義:

1. x="150" y="200" :這串文字的位置,以座標軸的左上角(0,0)為基準,位於(0,0)向右150px、向下200px處。

2. fill="#fff" stroke="#333" stroke-width="2" :這串文字的填滿顏色為#fff,框線顏色為#333,且框線為2px粗,因此可營造文字為鏤空的感覺。

3. font-size="95" :這串文字的字級大小為95px。

 

以上的屬性定義可讓我們得到以下的文字樣式:

----

接著介紹在此次的動畫中最重要的 stroke,以下先來解釋相關屬性的運用:

1. stroke-dasharray是把stroke線條做成了虛線的效果,線段會被拆成線段、空白、線段、空白,效果就像下面這樣:

以上以 stroke-dasharray: 60; 舉例,原本完整的線段被拆成60pxline空60pxspace

 

2. stroke-dashoffset 是把虛線往左做推移的動作,

 

  • 推移後,dasharray還是會保持循環
  • dashoffset的值不會大於dasharray
  • 如果dashoffset 等於 dasharray,線段起始點會是空白

這邊以加上 stroke-dashoffset: 40; 為例,原本的虛線會從最左邊開始,再往左被offset掉40px:

 

3. 由上述的例子可以知道,如果stroke-dashoffset = stroke-dasharray ,則第一段就會看起來是空白的:

而當stroke-dasharray跟stroke-dashoffset的值相等、且數值非常非常大時,就能夠將整個線段隱藏!

今天的動畫就是利用此特性,來創造出線條由0慢慢長出來的感覺。

----

因此最後一個步驟我們來添加css樣式:

#text-logo {
  font-family: 'Shrikhand', cursive;
  stroke-dashoffset: 1114px;
  stroke-dasharray: 1114px;
  -moz-animation: draw 8s forwards ease-in;
  -webkit-animation: draw 8s forwards ease-in;
  animation: draw 8s forwards ease-in;
  background-clip: text;
}

@keyframes draw {
  100% {
    stroke-dashoffset: 0;
  }
}

1. 將字體改成了'Shrikhand', cursive,使之變為有襯線字體,整體的質感大升級。

2. 添加了最重要的 stroke-dashoffset 、 stroke-dasharray 屬性,兩者數值非常大且相等,因此我們知道一開始文字線段是隱藏的狀態。

3. 添加讓文字出現的動畫:

    --->動畫名稱叫'draw'、持續8秒、動畫結束後停在最後的狀態、動畫效果為ease-in

     ---> 動畫進行過程中,stroke-dashoffset 從1114px(全部遮蓋)慢慢變為0(全部顯現),因此文字就會從全部遮蓋慢慢顯現出來。

 

這樣就大功告成了,是不是非常簡單呢!只要了解stroke的特性,單純利用css就能夠完成這麼酷炫的動畫,非常的方便呢:)

以下就來欣賞完整的動畫效果吧~

-----

文章參考:

https://codepen.io/simonchen/pen/gQJBJQ

https://www.casper.tw/svg/2014/06/15/svg-css-stroke-animation/

王淳藝 Celia Wang