渐进增强 (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

开启你的职业生涯

完成课程获得认证

开始学习
广告