搜尋

純 CSS 超連結底線動畫效果

通常在設計網頁的超連結時,不外乎都是使用文字顏色或背景色,進而搭配 transition 製作簡單的轉場,但如果熟練運用 CSS,就能做出更與眾不同的效果,這篇教學會使用 CSS 製作多種底線效果,除了有基本的變色和轉場,也會使用漸層色、動畫、SVG 製作別具特色的超連結底線動畫效果。

快速導覽:

CSS 教學 - 純 CSS 超連結底線動畫效果

常見的超連結效果

下方列出幾種常見的超連結底線效果,分別是變色、轉場 transition、改變底線樣式與使用邊框效果,其中比較需要注意的是使用邊框作為底線,由於顯示類型為 inline 的元素無法控制高度,就無法控制底部邊框的位置,所以需要改為 inline-block 顯示類型,才能精準控制邊框位置

參考::hoverCSS 轉場 transitiontext-decoration 文字裝飾border-* 單一邊框

線上展示:https://codepen.io/oxxo/pen/MYWYmeV

<!-- HTML 程式碼 -->
<a href="#">STEAM 教育學習網</a> ( 預設 )
<br>
<a href="#" class="link-1">STEAM 教育學習網</a> ( hover )
<br>
<a href="#" class="link-2">STEAM 教育學習網</a> ( hover + transition: 0.5s )
<br>
<a href="#" class="link-3">STEAM 教育學習網</a> ( hover + 底線波浪狀 )
<br>
<a href="#" class="link-4">STEAM 教育學習網</a> ( hover + 邊框偽裝底線 )
<br>

<!-- CSS 程式碼 -->
<style>
  body {line-height: 2;}
  a[class] {color: blue;}       /* 有 class 的超連結文字為藍色 */
  a[class]:hover {color: red;}  /* 有 class 的超連結 hover 時文字為紅色 */

  .link-2 {transition: .5s;}    /* 轉場持續 0.5 秒 */

  .link-3:hover {text-decoration-style: wavy;}  /* 底線為波浪狀 */

  .link-4 {
    display:inline-block;           /* 改成 inline-block 顯示類型,才能控制底線位置 */
    text-decoration: none;          /* 隱藏底線 */
    line-height: 1;                 /* 調整行高,讓底部邊框靠近文字 */
    border-bottom: 2px solid blue;  /* 底部邊框樣式 */
  }
  .link-4:hover {border-bottom: 2px dotted red;} /* hover 時改變邊框顏色 */
</style>

CSS 教學 - 純 CSS 超連結底線動畫效果 - 常見的超連結效果

使用漸層色,製作超連結底線效果

除了常見的超連結底線效果,也可以使用「漸層色」代替底線,不過因為漸層色「不支援轉場和動畫」,需要搭配 CSS 自訂屬性「@property」才能實現漸層色的動畫效果,下方範例開啟後,會使用漸層色的「轉場」和「動畫」產生有趣的底線效果。

參考:CSS 漸層色CSS 漸層色的轉場與動畫CSS @property 自訂屬性值CSS 動畫 animation

線上展示:https://codepen.io/oxxo/pen/azbzWZX

<!-- HTML 程式碼 -->
<a href="#" class="link-5">STEAM 教育學習網</a> ( hover + 漸層色偽裝底線 + 轉場 )</body>
<br>
<a href="#" class="link-6">STEAM 教育學習網</a> ( hover + 漸層色背景動畫 )</body>

<!-- CSS 程式碼 -->
<style>
  body {line-height: 2;}
  a[class] {color: blue;}        /* 有 class 的超連結文字為藍色 */
  a[class]:hover {color: red;}  /* 有 class 的超連結 hover 時文字為紅色 */

  /* 建立自訂屬性 --c,類型為顏色 */
  @property --c {
    syntax: "<color>";
    inherits: true;
    initial-value: blue;
  }
  /* 建立自訂屬性 --y,類型為長度 */
  @property --y {
    syntax: "<length>";
    inherits: true;
    initial-value: 2px;
  }

  .link-5 {
    line-height: 1.3;
    display:inline-block;                   /* 改成 inline-block 顯示類型,才能控制尺寸 */
    text-decoration: none;                  /* 隱藏底線 */
    transition: all .5s, --c .5s, --y .5s;  /* 將自訂屬性套用轉場效果 */
    /* 背景漸層色中使用自訂屬性 */
    background: linear-gradient(0deg, 
      var(--c) 0, 
      var(--c) 2px, 
      #0000 var(--y), 
      #0000 100%);
  }
  /* hover 時改變自訂屬性 */
  .link-5:hover {
    --c: red;
    --y: 15px;
  }

  /* 建立自訂屬性 --dx,類型為長度 */
  @property --dx {
    syntax: "<length>";
    inherits: true;
    initial-value: 0;
  }
  .link-6 {
    line-height: 1.3;
    display: inline-block;   /* 改成 inline-block 顯示類型,才能控制尺寸 */
  }
  .link-6:hover {
    text-decoration: none;   /* 隱藏底線 */
    /* 漸層色中使用自訂屬性 */
    background: repeating-linear-gradient(
        to right,
        pink calc(var(--dx)),  pink calc(10px + var(--dx)),
        #0000 calc(10px + var(--dx)), #0000 calc(20px + var(--dx)));
    /* 執行動畫 */
    animation: oxxo 1s linear infinite;
  }
  /* 動畫中改變自訂屬性 */
  @keyframes oxxo {
    0% {--dx: 0;}
    100% {--dx: 20px;}
  }
</style>

CSS 教學 - 純 CSS 超連結底線動畫效果 - 使用漸層色製作超連結底線效果

使用 SVG,製作超連結底線動畫

如果熟悉 SVG,就能運用 SVG 作為背景圖,這種做法就不會受限於顯示類型或自訂屬性,只需要簡單的程式碼就能產生非常有特色的底線動畫,下方範例會用兩組 SVG 做出不同的超連結底線動畫效果。

參考:背景圖片 ( 定位、定位點、尺寸 )CSS 動畫 animation

線上展示:https://codepen.io/oxxo/pen/YPzPVGP

<!-- HTML 程式碼 -->
<a href="#" class="link-7">STEAM 教育學習網</a> ( hover + SVG 波浪背景圖 + 動畫 )</body>
<br>
<a href="#" class="link-8">STEAM 教育學習網</a> ( hover + SVG 虛線背景圖 + 動畫 )</body>

<!-- CSS 程式碼 -->
<style>
  body {line-height: 2;}
  a[class] {color: blue;}        /* 有 class 的超連結文字為藍色 */
  a[class]:hover {color: red;}  /* 有 class 的超連結 hover 時文字為紅色 */

  .link-7:hover {
    text-decoration: none;
    /* 使用 SVG 圖片作為背景圖 */
    background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 5"><path fill="none" stroke-width="1.5" stroke="%23f00" d="M0,0.5c4.1,0,4.1,4,8.2,4s4.1-4,8.2-4"/></svg>');
    background-repeat: repeat-x;   /* x 方向重複 */
    background-position: 0 100%;   /* 位置放在下方 */
    background-size: 16px auto;    /* 尺寸寬度數值與 viewBox 相同 */
    animation: oxxo1 1s linear infinite;   /* 執行動畫 */
  }
  @keyframes oxxo1 {
    0% {background-position: 0 100%;}
    100% {background-position: 16px 100%;}
  }

  .link-8:hover {
    text-decoration: none;
    /* 使用 SVG 圖片作為背景圖 */
    background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 5"><path fill="none" stroke-width="1.5" stroke="%23f00" d="M0,3h5"/></svg>');
    background-repeat: repeat-x;   /* x 方向重複 */
    background-position: 0 100%;   /* 位置放在下方 */
    background-size: 10px auto;    /* 尺寸寬度數值與 viewBox 相同 */
    animation: oxxo2 1s linear infinite;   /* 執行動畫 */
  }
  @keyframes oxxo2 {
    0% {background-position: 0 100%;}
    100% {background-position: 10px 100%;}
  }
</style>

CSS 教學 - 純 CSS 超連結底線動畫效果 - 使用 SVG,製作超連結底線動畫

小結

雖然對於大部分的網頁來說,超連結的效果並不是重點,但如果可以運用一點點的程式碼,就能替網頁加入一些小小的驚喜,也是滿有意思的。

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則 CSS 常用樣式屬性

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 使用巢狀結構語法 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

全域關鍵字與文字數值 長度與角度單位 位置名稱與時間單位 特殊樣式屬性 ( all、appearance)

規則與定義

變數 ( Variables ) 媒體查詢 ( @media ) 容器查詢 ( @container ) 自訂屬性值 ( @property ) 匯入樣式 ( @import ) 分層優先順序 ( @layer ) 定義字型 ( @font-face ) 計數規則 ( @counter-style ) 列印網頁 ( @page )

函式類型

數學計算 文字與清單計數 形狀與線段 路徑 ( path ) 生成內容與引號

顏色與濾鏡

顏色單位 色彩模型 漸層色 影像濾鏡 ( filter ) 背景濾鏡 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字與段落

設定字型 ( font-family ) 使用外部字型 文字尺寸 文字樣式 ( 常用 ) 文字樣式 ( 其他實用 ) 文字樣式 ( 特殊用途 ) 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 文字自動分欄

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬度與高度 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 ( border-radius ) 影像邊框 ( border-image ) 輪廓 ( outline ) 內容溢出與裁切 ( overflow ) 內容範圍 ( contain ) 可見性與透明度

背景與陰影

背景顏色 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 ( shape-* ) 定位 ( position ) 邏輯屬性 ( logical properties ) 水平置中技巧 垂直置中技巧

Flex 彈性排版

Flexbox 彈性盒子 Flex 對齊方式 Flex 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 自訂動畫路徑 ( offset ) 動畫觸發事件 多重動畫的權重與順序 動畫進度控制 ( timeline )

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask ) 物件填滿方式與定位 轉換函式 ( transform ) 平移、旋轉與縮放 3D 轉換與透視

視窗與使用者行為

捲軸樣式 ( scrollbar ) 拉霸、滑桿樣式 ( slider ) 滑鼠游標圖示 ( cursor ) 滑鼠事件 ( pointer-events ) 使用者選取 ( user-select ) 捲動行為 ( scroll、overscroll ) 列印換頁 ( break-* )

範例效果

CSS 圓餅圖 CSS 跑馬燈 Google 載入動畫 漸層色的轉場與動畫 電子時鐘數字 不規則形狀動畫 3D 正多面體 超連結底線動畫效果 噁心黏黏球效果 CSS 視差滾動效果 捲軸控制放射形選單 捲軸改變文字背景色 CSS 頁面捲動進度條