
這次我們來玩點有趣的東西!我們的 SVG 特輯靈感來自台灣國旗,設計比例可是參考了維基百科上的資料哦。
而且,我們不只是做個靜態國旗,還加入了炫酷的動態效果,讓整個設計充滿與眾不同
接下來,我會一步步拆解這個程式碼,詳細告訴你每個 SVG 標籤和屬性都是怎麼回事,輕鬆帶你了解如何用 SVG 打造動態國旗

SVG(可縮放向量圖形,Scalable Vector Graphics)是一種基於 XML 的圖片格式,專門用來描述二維圖形。它和傳統的位圖圖片(如 PNG、JPEG)不同,因為 SVG 是矢量的,不管你放大到多大,它都不會失真。
這使得它特別適合用在需要響應式設計、不同屏幕尺寸的場景中,比如圖表、地圖、圖示、logo 等。
接下來,我們將一步步展示如何用 SVG 實現一個具有臺灣國旗元素的設計,並讓太陽進行旋轉動畫。


<template>
  <div class="h-screen flex justify-center items-center bg-purple-100">
   <div class="relative">
    <svg
      width="300"
      height="200"
      viewBox="0 0 600 400"
      preserveAspectRatio="xMidYMid meet"
      xmlns="http://www.w3.org/2000/svg"
    >
      <!-- Red background -->
      <rect width="600" height="400" fill="#de2110" />
      <!-- Blue square -->
      <rect width="300" height="200" fill="#000099" />
      <!-- White sun -->
      <svg x="50" y="-8" width="220" height="220" viewBox="-110 -110 220 220">
        <g class="rotate">
          <!-- 添加旋轉效果的 class -->
          <!-- 白色太陽中心圓 -->
          <circle r="35" fill="white" />
          <!-- 太陽光芒 -->
          <g>
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(0)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(30)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(60)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(90)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(120)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(150)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(180)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(210)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(240)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(270)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(300)" />
            <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(330)" />
          </g>
        </g>
      </svg>
    </svg>
  </div>
</div>
</template>
這個國旗的設計核心概念,是利用 SVG 的簡單標籤來創建一個比例精準的台灣國旗,並且設計一點點別出心裁的動態效果,使它看起來很有活力。
首先,我們用 rect 標籤來畫出紅色的背景,這是國旗的大部分區域。接著,再用另一個 rect 標籤畫出藍色的正方形區域,這個區域位於國旗的左上角。最後,我們使用 circle 和 path 來繪製白色太陽及其12道光芒,象徵光明和活力。
為了讓國旗更加生動,我們使用 CSS 定義的 rotate 動畫,讓太陽隨時間旋轉,模擬一個持續發光發熱的效果。這樣不僅增強了設計的趣味性,也讓整個視覺效果更動態、更具吸引力。

我們的 SVG 項目是以台灣國旗為基礎設計的,首先要做的就是創建一個紅色的背景,這是國旗的主要顏色。
<svg width="300" height="200" viewBox="0 0 600 400" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg">
  <!-- Red background -->
  <rect width="600" height="400" fill="#de2110" />
<rect>:這個標籤用來繪製矩形,我們將其作為國旗的紅色背景。
width="600" 和 height="400":這表示矩形的寬度為 600 單位,高度為 400 單位,這樣可以填滿整個 SVG 畫布,對應國旗的比例。fill="#de2110":這個屬性設定矩形的填充顏色,這裡我們使用了 # de2110,這是台灣國旗的紅色。
這步驟可以理解為,先鋪設整個旗幟的底色,紅色部分是國旗的主要基礎。

接下來,我們要在紅色背景的左上角加入一個藍色正方形,這是台灣國旗的特色元素之一。
<!-- Blue square -->
<rect width="300" height="200" fill="#000099" />
<rect> 標籤來畫藍色的正方形。
width="300" 和 height="200":這表示矩形的寬度為 300 單位,高度為 200 單位,對應國旗的藍色區域。fill="#000099":這是填充顏色的屬性,這裡設置為 #000099,這是藍色。這個部分主要是放置藍色的區塊,對應國旗左上角的藍色部分。

國旗上的白色太陽是非常重要的元素,我們使用 <circle> 和 <path> 標籤來實現這個效果,先畫出太陽的中心圓,再畫光芒。
<!-- White sun -->
<svg x="50" y="-8" width="220" height="220" viewBox="-110 -110 220 220">
  <g class="rotate">
    <!-- 太陽的中心圓 -->
    <circle r="35" fill="white" />
    <!-- 太陽光芒 -->
    <g>
      <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(0)" />
      <path d="M0,-72L8,-40L-8,-40Z" fill="white" transform="rotate(30)" />
      ...
    </g>
  </g>
</svg>
<svg>:我們嵌套了一個新的 <svg> 來創建太陽區域,並使用了 x 和 y 屬性來確定它的相對位置。
x="50" 和 y="-8":表示太陽相對於藍色正方形的位置偏移。viewBox="-110 -110 220 220":定義了太陽的繪製範圍,讓我們可以在這個範圍內繪製。<circle>:用來畫太陽的核心部分。
r="35":定義圓的半徑為 35 單位,這就是白色太陽的中心部分。fill="white":表示填充顏色是白色。<path>:使用這個標籤來畫出每一束太陽的光芒。d 屬性描述了這些光芒的形狀和路徑。
d="M0,-72L8,-40L-8,-40Z":這段路徑繪製了一個三角形,代表太陽的光芒。transform="rotate(30)":這裡的 transform 屬性用來旋轉光芒,讓每一束光均勻分佈在太陽周圍。這樣,我們就完成了靜態的太陽設計。

為了讓太陽看起來更加動態,我們添加了旋轉動畫。這裡使用了 CSS 的 @keyframes 和 animation 來實現。
<style>
  /* 定義旋轉動畫 */
  .rotate {
    animation: spin 5s linear infinite; /* 5秒旋轉一圈,無限次數 */
  }
  @keyframes spin {
    from {
      transform: rotate(0deg);
    }
    to {
      transform: rotate(360deg);
    }
  }
</style>
.rotate class:這個 CSS class 是我們應用在 <g> 標籤上的,它讓太陽的光芒整體旋轉起來。
animation: spin 5s linear infinite:這行設定了旋轉動畫。5 秒內完成一圈,並且是無限次數循環。@keyframes spin:定義了旋轉的動畫過程。從 0deg 開始,到 360deg 完成一次完整旋轉。
在這次的國旗實作中,我們為國旗添加了一個光澤效果,讓整個國旗看起來更具動感和視覺吸引力。這個光澤效果通過 CSS 中的漸變和動畫實現,模擬了光從旗面上閃過的效果,並且會不斷循環,讓整個畫面更加生動。

background-image 來創建光澤效果,這裡的漸變 (gradient) 是兩層線性漸變組成的。第一層從旗幟的左邊到右邊,從透明過渡到半透明的白色,再回到透明,這就模擬了光澤的效果。  .flagwave {
      position: absolute;
      top: 0;
      width: 100%;
      height: 100%;
      z-index: 2;
      background-image: -webkit-gradient(
          linear,
          0% 30%,
          50% top,
          color-stop(0%, rgba(255, 255, 255, 0)),
          color-stop(40%, rgba(255, 255, 255, 0)),
          color-stop(90%, rgba(255, 255, 255, 0.3)),
          color-stop(100%, rgba(255, 255, 255, 0))
        ),
        -webkit-gradient(linear, 50% 30%, 100% top, color-stop(0%, rgba(224, 225, 225, 0)), color-stop(25%, rgba(225, 225, 225, 0.3)), color-stop(50%, rgba(224, 225, 225, 0)), color-stop(80%, rgba(224, 225, 225, 0.3)), color-stop(100%, rgba(224, 225, 225, 0)));
      background-size: 200%;
      background-position: right;
      animation: flagwave 10s linear infinite;
    }
動畫效果:光澤效果的關鍵是通過 CSS 的 @keyframes 來控制漸變的位置。我們將 background-position 從一開始的負值(-400px)逐漸移動到正值(800px),模擬出光從旗幟的左側掃過的效果。
@keyframes flagwave {
  0% {
    background-position: -400px 0px, -400px 0px;
  }
  100% {
    background-position: 800px 0px, 800px 0px;
  }
}
設置容器與絕對定位:光澤效果的元素 .flagwave 需要覆蓋在 SVG 國旗的上層,我們通過 position: absolute 讓它處於旗幟上方,並與國旗完全重疊。同時,國旗的外層容器使用了 position: relative 來確保這個光澤效果正確定位在旗幟之上。
.flag-container {
  position: relative;
  width: 300px; /* 旗幟的寬度 */
  height: 200px; /* 旗幟的高度 */
}
.flagwave {
  position: absolute;
  top: 0;
  width: 100%;
  height: 100%;
  z-index: 2;
}
動態持續效果:我們將動畫設置為 infinite,讓光澤效果無限循環,持續保持國旗的光亮感,提升了整體的視覺效果。
這個光澤效果為我們的國旗設計增添了一種流動感,讓整個國旗變得更加提升了質感,也讓頁面更加吸睛。
這種效果在網頁中可以應用到任何背景上,不僅限於國旗的設計。

這次的國旗 SVG 實作不僅展現了設計的創意,更提醒我們,簡單的元素加上一點創意,就能創造出令人驚豔的效果。
除了加上了太陽旋轉的小動畫,還有整面光澤感,可以讓整個畫面都靈動了起來!
簡簡單單的幾個屬性,就能讓你的設計驚艷全場。
相信自己的想法,勇敢嘗試,每一小步都能帶你走向更大的突破!٩(^ᴗ^)۶✧✧