昨天講到元素的變形,而今天的 Transition 就是使用在元素改變時的過場動畫效果,比如顏色、形狀等,它可以指定需要的是哪一種動畫,但威爾豬一般都只有使用 all 而已,沒錯,它就已包含了全部效果。Tailwind 預設有
transition-none、transition-all、transition、transition-colors、transition-opacity、transition-shadow、transition-transform,其中使用 transition 就已包含了 background-color、border-color、color、fill、stroke、opacity、box-shadow、transform。不過威爾豬實測,不用特別寫 transition,只使用了過場動畫的持續秒數,Tailwind 依然可以運作,和上一篇講的 transform 一樣,接下來我們看看怎麼使用過場動畫吧。
這是用來計算過場動畫效果的持續時間。這邊會用毫秒數來當基準,相信看倌們都知道,1 秒等於 1000 毫秒,使用方式為:duration-{毫秒數},Tailwind 預設秒數為下表:
| class | transition-duration | 
|---|---|
| duration-75 | 75ms | 
| duration-100 | 100ms | 
| duration-150 | 150ms | 
| duration-200 | 200ms | 
| duration-300 | 300ms | 
| duration-500 | 500ms | 
| duration-700 | 700ms | 
| duration-1000 | 1000ms | 
當然我們覺得秒數不足也可以額外添加,這邊我們會使用到 theme.extend.transitionDuration 來做新增,範例如下:
// tailwind.config.js
  module.exports = {
    ...
    theme: {
      ... ,
      extend: {
        transitionDuration: {
         '400': '400ms',
         '600': '600ms',
         '800': '800ms',
         '1500': '1500ms',
         '2000': '2000ms',
        }
      },
      ...
    },
    ...
  }
如果沒有使用 Transition,會讓動畫效果變得生硬。
這是用來控制過場動畫的緩和曲線,進出點時的快慢設置,等同於 cubic-bezier,Tailwind 這邊幫我們預設了:ease-linear (線性)、ease-in (緩進快出)、ease-out (快進緩出)、ease-in-out (緩進緩出,中間較快)。
當預設的緩和曲線不滿足時,我們也可以自行設定,這邊我們會使用到 theme.extend.transitionTimingFunction 來做新增,範例如下:
// tailwind.config.js
  module.exports = {
    ...
    theme: {
      ... ,
      extend: {
        transitionTimingFunction: {
         'in-cubic': 'cubic-bezier(0.95, 0.05, 0.795, 0.035)',
         'out-cubic': 'cubic-bezier(0.19, 1, 0.22, 1)',
        }
      },
      ...
    },
    ...
  }
如果同學們對這有興趣,可以到 cubic-bezier 上自行調整參數,並將數值貼過來重新命名即可。
如果不想要過場動畫馬上被執行,則可以使用這 Utility,來控制元素延遲過場動畫。這邊Tailwind 預設和 Duration 使用一模一樣的毫秒數,如下表:
| class | transition-delay | 
|---|---|
| delay-75 | 75ms | 
| delay-100 | 100ms | 
| delay-150 | 150ms | 
| delay-200 | 200ms | 
| delay-300 | 300ms | 
| delay-500 | 500ms | 
| delay-700 | 700ms | 
| delay-1000 | 1000ms | 
當然想額外添加秒數也是和 Duration 方式一樣,這邊我們會使用到 theme.extend.transitionDelay 來做新增,威爾豬就不特地做範例了。
而 Tailwind 官方也預設了 4 種動畫效果讓我們使用,威爾豬覺得滿實用的,我們來看看有哪些:
這會讓元素不斷地旋轉,威爾豬做一個 Loading 的小 icon,可以參考以下範例:
<svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
    <circle class="opacity-25" cx="12" cy="12" r="10" stroke="#a855f7" stroke-width="4"></circle>
    <path class="opacity-100" fill="#a855f7" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>

這邊可以看 DEMO。
讓元素像雷達或水波紋一樣縮放和消失,常用在通知或需要引導使用者點擊時。威爾豬做一個小範例樣式:
<span class="flex justify-center items-center">
    <span class="animate-ping absolute h-6 w-6 rounded-full bg-red-400 opacity-50"></span>
    <span class="relative rounded-full h-5 w-5 bg-red-500"></span>
</span>

這邊可以看 DEMO。
讓元素上下跳動,常用在畫面可向下捲動時。威爾豬做一個小範例:
<span class="flex justify-center">
    <span class="relative rounded-full h-10 w-7 border-2 border-purple-500"></span>
    <span class="animate-bounce absolute h-3 w-1 rounded-full mt-2 bg-purple-500"></span>
</span>

這邊可以看 DEMO。
讓元素淡入和淡出,有呼吸燈的感覺,有點像 Ant Design 的 Skeleton 顯示動畫效果。威爾豬做一個小範例:
<div class="max-w-sm w-full">
    <div class="animate-pulse flex space-x-4">
        <div class="flex-1 space-y-4">
            <div class="h-4 bg-gray-200 rounded w-2/4"></div>
            <div class="space-y-2">
                <div class="h-4 bg-gray-200 rounded"></div>
                <div class="h-4 bg-gray-200 rounded"></div>
                <div class="h-4 bg-gray-200 rounded w-3/4"></div>
            </div>
        </div>
    </div>
</div>

這邊可以看 DEMO。
以上就是這兩天動畫效果的內容,Tailwind 預設的動畫是不是很實用,咱們明天見。