6. 錨點與超連結 (Anchors and Hyperlinks)

超連結連接網頁、檔案及文件內的位置。在 HTML 中,具有 href 屬性的 <a> 元素會建立超連結。

<a href="courses.html">查看我們的課程</a>

在這個例子中:

  • <a> 是錨點元素。
  • href 指定目的地。
  • 查看我們的課程 是連結文字。

使用連結前往目的地,使用按鈕執行操作。

6.1 基本連結結構

<p>
  報名前,請閱讀我們的<a href="course-guide.html">課程指南</a>。
</p>

<a> 和 </a> 之間的文字通常可以點擊,也可以透過鍵盤操作。

沒有 href 的 <a> 不是一般超連結:

<a>課程指南</a>

它不會自動具備一般連結的導覽及鍵盤行為。

不要以沒有目的地的錨點元素代替按鈕。

6.2 絕對與相對 URL

絕對 URL

絕對 URL 包含通訊協定及目的地主機:

<a href="https://www.gov.hk/">瀏覽香港政府一站通</a>

連結至其他網站,或需要完整目的地 URL 時,可以使用這種形式。

在可用的情況下,優先使用 HTTPS。

相對 URL

相對 URL 會根據文件的基底 URL 解析;一般而言,這就是文件本身的 URL。

<a href="courses.html">課程</a>
<a href="guides/html.html">HTML 指南</a>
<a href="../index.html">上一層資料夾的首頁</a>

例如:

website/
├── index.html
├── courses.html
└── guides/
    └── html.html

從 index.html 出發:

<a href="guides/html.html">HTML 指南</a>

從 guides/html.html 出發:

<a href="../courses.html">課程</a>

../ 表示移至上一層資料夾。

根目錄相對 URL

以 / 開始的路徑,會從目前來源的根目錄開始:

<a href="/courses.html">課程</a>

如果網站部署在子目錄內,這種路徑可能會指向該子目錄之外。

對初學者的專案而言,文件相對路徑通常較容易在不同資料夾及託管環境之間移動。

6.3 連結至同一頁面的位置

為目的地元素設定唯一的 id:

<a href="#entry-requirements">跳至入讀要求</a>

<h2 id="entry-requirements">入讀要求</h2>
<p>不需要具備程式編寫經驗。</p>

以 # 開始的部分稱為片段識別碼(fragment identifier)。

你也可以連結至另一個網頁內的位置:

<a href="courses.html#entry-requirements">
  查看課程入讀要求
</a>

請注意:

  • 目的地的 id 必須與片段識別碼相符。
  • 每個 id 必須在所屬文件內保持唯一。
  • 片段連結通常會捲動至目的地。
  • 鍵盤焦點行為可能有所不同;捲動畫面不一定等於移動焦點。

應在目的地元素上使用 id,而不是沿用舊式的 <a name="…"> 寫法。

6.4 撰寫有意義的連結文字

連結文字應協助讀者了解目的地。

較不清晰:

<p>查看時間表,請<a href="timetable.html">按此</a>。</p>

較好的做法:

<p><a href="timetable.html">查看課程時間表</a>。</p>

螢幕閱讀器使用者可能會透過連結清單導覽,因此具描述性的文字特別有用。

避免只依賴:

  • 「按此」。
  • 「更多」。
  • 沒有說明的圖示。
  • title 屬性提供的工具提示。

如果連結指向檔案,可以標明檔案類型,並在已知的情況下提供大小:

<a href="documents/course-guide.pdf">
  下載課程指南(PDF)
</a>

這段文字描述預期的資源,但文字本身不會強制瀏覽器下載檔案。

6.5 在新分頁或視窗開啟

連結預設通常會在目前的瀏覽環境中開啟。

若要要求在新分頁或視窗開啟:

<a
  href="https://www.gov.hk/"
  target="_blank"
  rel="noopener"
>
  瀏覽香港政府一站通(在新分頁或視窗開啟)
</a>

實際開啟為分頁還是視窗,由瀏覽器及使用者設定決定。

安全與私隱

  • noopener 防止新開啟的頁面取得指向原頁面的 opener 參照。
  • noreferrer 不傳送來源頁面資訊,同時也包含 noopener 的效果。

現代瀏覽器一般會為具有 target="_blank" 的錨點連結套用 noopener 行為,但明確寫出屬性能讓意圖更清晰。

如果合法用途需要來源頁面資訊,不要自動加入 noreferrer。

避免將所有連結都設為在新分頁開啟。 除非有清楚理由,否則讓使用者自行選擇;要求開啟新的瀏覽環境時,也應事先提示。

6.6 電郵與電話連結

電郵連結

<a href="mailto:[email protected]">
  傳送電郵至查詢團隊
</a>

這會要求瀏覽器或作業系統開啟電郵處理程式,不會自動傳送電郵。

你也可以加入主旨:

<a href="mailto:[email protected]?subject=Course%20enquiry">
  以電郵查詢課程
</a>

參數值需要適當的 URL 編碼。如果在 HTML 中寫入多個查詢參數,應使用 &amp; 分隔它們。

電話連結

<a href="tel:+85212345678">致電 +852 1234 5678</a>

如果裝置有可用的電話處理程式,這會要求開啟它。

在適合的情況下,目的地應使用國際格式電話號碼。上述號碼只是格式示例。

公開寫在 HTML 中的電郵地址,訪客可以看見,也可能被自動化工具收集。

6.7 連結至檔案與要求下載

一般連結可以指向檔案:

<a href="documents/checklist.pdf">開啟 HTML 檢查清單(PDF)</a>

瀏覽器可能會顯示或下載檔案,取決於檔案類型、回應標頭及使用者設定。

download 屬性會要求下載行為:

<a href="documents/checklist.pdf" download>
  下載 HTML 檢查清單(PDF)
</a>

你也可以提供建議檔案名稱:

<a
  href="documents/checklist.pdf"
  download="html-checklist.pdf"
>
  下載 HTML 檢查清單(PDF)
</a>

重要限制:

  • download 一般適用於同源 URL,以及 blob: 或 data: URL。
  • 瀏覽器政策及伺服器回應標頭可能影響結果。
  • 建議檔案名稱不保證會被採用。
  • 這個屬性不會建立檔案;目的地檔案必須存在。

6.8 使用圖片作為連結

圖片可以成為連結的內容:

<a href="index.html">
  <img src="images/logo.png" alt="海港學習中心首頁">
</a>

當圖片是連結的唯一內容時,alt 文字應說明連結的用途。

如果連結已包含具描述性的文字,而圖片只是裝飾,應使用空白替代文字:

<a href="index.html">
  <img src="images/logo.png" alt="">
  海港學習中心首頁
</a>

不要在錨點元素內放入另一個連結或按鈕,也應避免放入表單控制項等其他互動元素。

6.9 連結與按鈕的分別

預期行為使用元素
前往另一個網頁<a href="…">
跳至某個章節<a href="#…">
開啟連結文件<a href="…">
提交表單<button type="submit">
顯示或隱藏面板<button type="button">
執行應用程式操作通常使用 <button>

避免以下模擬操作的連結:

<!-- 一般操作應避免這些寫法。 -->
<a href="#" onclick="showDetails()">顯示詳情</a>
<a href="javascript:showDetails()">顯示詳情</a>

href="#" 是真正的片段參照,可能會令網頁跳至頂部。

javascript: URL 將導覽與可執行程式碼混合,可能造成安全及內容安全政策方面的問題。

這類操作應改用按鈕,並透過 JavaScript 事件監聽器處理。

6.10 語言與連結資訊

連結會繼承周圍的語言設定。

香港英文網頁可以使用:

<html lang="en-HK">

中文連結文字可以設定自己的語言:

<a href="zh/course-guide.html" lang="zh-Hant-HK">
  繁體中文課程指南
</a>

你也可以提供目的地語言的提示:

<a
  href="zh/course-guide.html"
  lang="zh-Hant-HK"
  hreflang="zh-Hant-HK"
>
  繁體中文課程指南
</a>
屬性描述對象
lang連結本身內容的語言
hreflang連結資源的語言

hreflang 不會翻譯目的地,也不保證提示一定正確。

一般英文可以使用 lang="en"。如果網頁主要使用香港繁體中文,應在 <html> 設定 lang="zh-Hant-HK"。

6.11 設定無障礙連結樣式

連結應能與周圍文字區分,不要只依靠顏色。

a {
  color: #005ea8;
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

a:hover {
  text-decoration-thickness: 0.15em;
}

a:focus-visible {
  outline: 3px solid #005ea8;
  outline-offset: 4px;
}

保留清晰可見的鍵盤焦點提示。不要移除外框,除非提供有效的替代樣式。

也應確保連結文字與背景之間有足夠對比。

6.12 完整範例:包含頁內連結的課程指南

以下中文版網頁使用頁內連結,因此不需要其他檔案或 JavaScript,導覽便可以運作。

主要語言設定為香港繁體中文,英文摘要則有自己的語言設定。

id: hong-kong-html-anchors-hyperlinks
name: 錨點與超連結 — 課程指南
type: html
content: |-
  <!doctype html>
  <html lang="zh-Hant-HK">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>課程指南 | 錨點與超連結</title>
    <style>
      * {
        box-sizing: border-box;
      }

      body {
        margin: 0;
        color: #222;
        background: #f5f7fa;
        font-family: system-ui, sans-serif;
        line-height: 1.8;
      }

      main {
        max-width: 46rem;
        margin-inline: auto;
        padding: 2rem 1rem;
      }

      h1,
      h2 {
        color: #005ea8;
        line-height: 1.4;
      }

      h1 {
        margin-block: 0 1rem;
      }

      h2 {
        margin-block: 0 1rem;
      }

      p {
        margin-block: 0 1rem;
      }

      nav,
      section {
        margin-block: 1.5rem;
        padding: 1.25rem;
        border: 1px solid #767676;
        border-radius: 0.5rem;
        background: white;
      }

      section > :last-child {
        margin-block-end: 0;
      }

      a {
        color: #005ea8;
        text-decoration: underline;
        text-underline-offset: 0.2em;
      }

      a:hover {
        text-decoration-thickness: 0.15em;
      }

      a:focus-visible {
        outline: 3px solid #005ea8;
        outline-offset: 4px;
      }

      [id] {
        scroll-margin-block-start: 1rem;
      }

      .welcome {
        padding: 1rem;
        border-inline-start: 4px solid #005ea8;
        background: #eaf2f8;
      }
    </style>
  </head>
  <body>
    <main>
      <h1 id="top">HTML 課程指南</h1>
      <p>使用以下連結,探索本頁內容。</p>

      <p class="welcome">
        你可以使用以下連結,跳到本頁的不同部分。
      </p>

      <nav aria-label="本頁目錄">
        <ul>
          <li><a href="#overview">課程概覽</a></li>
          <li><a href="#requirements">入讀要求</a></li>
          <li>
            <a href="#english-summary" lang="en-HK">
              English summary
            </a>
          </li>
        </ul>
      </nav>

      <section>
        <h2 id="overview">課程概覽</h2>
        <p>
          學習使用標題、段落、清單及超連結,
          建立網頁結構。
        </p>
        <p>
          繼續查看<a href="#requirements">入讀要求</a>。
        </p>
      </section>

      <section>
        <h2 id="requirements">入讀要求</h2>
        <p>不需要具備網頁開發經驗。</p>
        <ul>
          <li>純文字或程式碼編輯器</li>
          <li>現代網頁瀏覽器</li>
          <li>基本檔案及資料夾管理能力</li>
        </ul>
        <p><a href="#top">返回網頁主標題</a></p>
      </section>

      <section lang="en-HK">
        <h2 id="english-summary">English Summary</h2>
        <p>
          This course introduces basic HTML structure,
          including headings, paragraphs, lists, and hyperlinks.
        </p>
        <p>
          Hyperlinks lead to other pages, documents,
          or specific locations within the same page.
        </p>
        <p><a href="#top">Return to the page heading</a></p>
      </section>
    </main>
  </body>
  </html>

在這個範例中:

  • 每個連結目的地都是已存在且唯一的 id。
  • 連結文字描述目的地。
  • 英文章節有局部語言設定。
  • 連結保留底線,並提供清晰的焦點提示。
  • 原生片段導覽不需要 JavaScript。

6.13 常見錯誤

錯誤較好的做法
遺漏 href為真正的超連結提供目的地
所有連結都使用「按此」撰寫具描述性的連結文字
使用連結執行顯示或隱藏操作使用按鈕
使用 href="#" 作為操作佔位符選擇真正的目的地或使用按鈕
寫錯相對路徑從目前文件的位置檢查路徑
連結至不存在或重複的 id使用已存在且唯一的目的地
所有連結都在新分頁開啟預設使用目前的瀏覽環境
假設 download 一定會強制下載考慮來源、伺服器及瀏覽器行為
圖片連結沒有實用的 alt 文字描述連結用途
移除所有焦點提示提供可見的鍵盤焦點樣式
在連結內放入按鈕或其他連結將互動元素分開

本章總結: 使用 <a href="…"> 建立超連結,選擇正確的 URL 形式,並撰寫有意義的連結文字。連結用來導覽,按鈕用來執行操作;同時應保留清晰的視覺辨識及鍵盤無障礙功能。

Scroll to Top