漸進增強 (Progressive Enhancement)


在當今的Web開發領域,建立一個在不同裝置和平臺上都能良好執行的網站至關重要。這就是漸進增強發揮作用的地方。漸進增強是一種Web設計理念,它專注於構建一個基本的、功能性的網站或應用程式,該應用程式可在所有裝置和瀏覽器上執行,然後逐步增強更強大裝置和瀏覽器的網站功能。

在本教程中,我們將討論什麼是漸進增強,為什麼它很重要,以及如何在我們的Web設計過程中實現它。

漸進增強的核心原則

我們應該遵循的漸進增強的核心原則是:

  • 構建可訪問性 − 我們必須確保所有基本內容和功能對所有Web瀏覽器都是可訪問的,無論其功能如何。

  • 使用簡潔且語義化的標記 − 我們應該保持HTML標記的簡潔和語義化,為我們網站的內容提供清晰易懂的結構。

  • 使用外部CSS和JavaScript進行增強 − 我們可以使用外部CSS和JavaScript檔案為功能更強大的裝置和瀏覽器提供增強的佈局、樣式和行為。

  • 尊重終端使用者的偏好 − 我們必須尊重使用者Web瀏覽器的偏好和設定,例如字型大小和配色方案,以提供個性化和可訪問的使用者體驗。

  • 關注靈活性 − 我們應該構建靈活且適應性強的網站,確保它可以輕鬆更新和適應新興的技術和裝置。

使用漸進增強的益處

以下是使用漸進增強方法進行Web開發的一些益處:

  • 改進的使用者體驗

  • 更好的可訪問性

  • 搜尋引擎最佳化

  • 更輕鬆的維護和更新

  • 具有成本效益的開發

  • 面向未來

實施漸進增強的步驟

使用者可以按照以下步驟在其Web設計過程中實施漸進增強。

步驟1:確定網站的核心內容和功能

第一步是確定網站應向所有使用者提供哪些核心內容和功能,無論其裝置或瀏覽器如何。

步驟2:建立網站的基本功能版本

確定核心內容和功能後,使用簡潔且語義化的HTML標記建立網站的基本功能版本。此版本應可訪問所有裝置和瀏覽器。

步驟3:使用CSS和JavaScript增強網站

建立網站的基本版本後,使用外部CSS和JavaScript檔案增強網站的佈局、樣式和行為。應以不影響網站基本功能和可訪問性的方式新增這些增強功能。

步驟4:跨不同裝置和瀏覽器測試網站

跨不同裝置和瀏覽器測試網站,以確保它在所有平臺上都是可訪問且功能正常的。這將有助於識別網站設計或功能方面的任何問題或限制。

步驟5:隨著時間的推移監控和更新網站

隨著新技術和裝置的出現,重要的是要監控和更新網站,以確保它仍然對所有使用者都是可訪問且功能正常的。定期更新和維護將有助於確保網站繼續在所有裝置和平臺上提供無縫的使用者體驗。

示例

在這個例子中,我們將使用漸進增強的原則構建導航選單。

我們從導航選單的基本HTML標記開始,該標記由一個包含指向網站不同頁面的連結的無序列表組成。這為所有使用者提供了一個簡單且可訪問的導航選單。

接下來,我們使用CSS增強導航選單,以提供更具視覺吸引力的設計。我們為連結的懸停和活動狀態添加了不同的樣式,這改善了功能更強大的瀏覽器的使用者體驗。

之後,我們使用JavaScript嚮導航選單新增下拉選單,允許使用者直接從選單訪問子頁面。這為功能更強大的裝置和瀏覽器的使用者提供了更具吸引力的使用者體驗。

最後,我們確保導航選單對所有使用者都是可訪問的,包括殘疾人士或輔助技術使用者。我們向選單添加了鍵盤導航,允許使用者使用“Tab”鍵導航選單。

透過遵循這些漸進增強的原則,我們可以構建一個導航選單,為所有使用者提供簡單且易於訪問的使用者體驗,同時還為功能更強大的裝置和瀏覽器的使用者提供增強的功能和設計。

<html>
<head>
   <style>
      nav ul {
         list-style: none;
         margin: 0;
         padding: 0;
         background-color: #333;
      }
      nav li {
         display: inline-block;
         margin-right: 10px;
      }
      nav a {
         display: block;
         padding: 10px;
         color: #fff;
         text-decoration: none;
      }
      nav a:hover {
         background-color: #555;
      }
      nav ul ul {
         position: absolute;
         top: 10px;
         background-color: #333;
         display: none;
      }
      nav ul ul li {
         display: block;
         width: 100%;
      }
      nav ul ul a {
         padding: 10px;
      }
      nav ul li:hover>ul {
         display: block;
      }
   </style>
</head>
<body>
   <nav>
      <ul>
         <li> <a href="#"> Home </a> </li>
         <li> <a href="#"> About Us </a> </li>
         <li> <a href="#"> Services </a>
            <ul>
               <li> <a href="#"> Service 1 </a> </li>
               <li> <a href="#"> Service 2 </a> </li>
               <li> <a href="#"> Service 3 </a> </li>
            </ul>
         </li>
         <li> <a href="#"> Contact Us </a> </li>
      </ul>
   </nav>
   <script>
      // keyboard navigation 
      document.addEventListener('keydown', function(event) {
         let nav = document.querySelector('nav');
         let focusableElements = nav.querySelectorAll('a[href], button');
         let focusedElement = document.activeElement;
         if (event.keyCode === 9) {
            if (event.shiftKey) {
               if (focusedElement === focusableElements[0]) {
                  focusableElements[focusableElements.length - 1].focus();
                  event.preventDefault();
               }
            } else {
               if (focusedElement === focusableElements[focusableElements.length - 1]) {
                  focusableElements[0].focus();
                  event.preventDefault();
               }
            }
         }
      });
      // dropdown menus for more capable browsers 
      if ('querySelector' in document && 'addEventListener' in window) {
         let nav = document.querySelector('nav');
         if (nav) {
            let navLinks = nav.querySelectorAll('li > a');
            for (let i = 0; i < navLinks.length; i++) {
               let subMenu = navLinks[i].parentNode.querySelector('ul');
               if (subMenu) {
                  navLinks[i].addEventListener('click', function(event) {
                     event.preventDefault();
                     this.parentNode.classList.toggle('open');
                  });
                  navLinks[i].addEventListener('keydown', function(event) {
                     if (event.keyCode === 13) {
                        event.preventDefault();
                        this.parentNode.classList.toggle('open');
                     }
                  });
                  subMenu.addEventListener('keydown', function(event) {
                     if (event.keyCode === 9 && event.shiftKey) {
                        if (document.activeElement === this.querySelector('a:first-child')) {
                           event.preventDefault();
                           navLinks[navLinks.indexOf(this.parentNode.querySelector('a'))].focus();
                        }
                     }
                  });
                  subMenu.addEventListener('keydown', function(event) {
                     if (event.keyCode === 9 && !event.shiftKey) {
                        if (document.activeElement === this.querySelector('a:last-child')) {
                           event.preventDefault();
                           navLinks[navLinks.indexOf(this.parentNode.querySelector('a'))].focus();
                        }
                     }
                  });
               }
            }
         }
      }
   </script>
</body>
</html> 

總的來說,漸進增強是一種寶貴的Web設計方法,有助於確保我們網站的可訪問性、靈活性和未來相容性。透過遵循漸進增強的核心原則,我們可以建立在不同裝置和平臺上都能良好執行的網站,併為所有使用者提供無縫的使用者體驗。

更新於:2023年5月5日

瀏覽量:157

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.