如何语义标记电子商务网站中的实用工具栏和主导航?
How to semantically mark up an utility bar and main navigation in a e-commerce website?
这是我为电子商务网站的页眉编写的标记。我不确定它在语义上是否正确——尤其是实用程序栏。我应该将 role
-navigation
添加到帐户、心愿单页面链接的容器 div
中,还是应该在 nav
元素或 [=15] 中=]?
另外请让我知道我可以做些什么来使这个设计(不能改变设计的顺序 - 客户希望这样)对辅助技术更易于访问和友好。
<header>
<div role="navigation" aria-labelledby="utility-nav" class="utility-nav">
<h2 class="visuallyhidden" id="utility-nav">Account and store pages</h2>
<div class="align-right">
<a href="#">my account</a>
<a href="#">find a store</a>
<a href="#">credit center</a>
<a href="#">track order</a>
<a href="#">wishlist</a>
</div>
</div> <!-- utility bar -->
<div id="logo-search">
<!-- logo -->
<!-- search -->
<!-- mini cart/shopping bag -->
</div> <!-- logo, search, shopping bag container -->
<nav id="top-nav">
<a href="#">Women</a>
<a href="#">Men</a>
<a href="#">Juniors</a>
<a href="#">Baby</a>
<!-- etc -->
</nav> <!-- top nav -->
</header> <!-- header -->
而不是 <div role="navigation">
只需使用 <nav>
。页面上可以有多个 <nav>
元素,即使 <header>
也是如此。虽然 <nav>
通常保留用于主要的导航块(这意味着实际上您会在一个页面上最多显示两个或三个),但我认为这两个都符合您的示例。
考虑将您的链接放在一个列表中,因为它会向屏幕 reader 用户宣布项目的数量。
此外,我怀疑您的 visuallyhidden
class 是为了向除屏幕 reader 之外的所有用户隐藏 <h2>
。将其与 aria-labelledby
配对会导致它被宣布两次。拥有 <h2>
还可以在屏幕 reader 内的标题导航中创建不必要的停靠点。考虑完全放弃 <h2>
并改用 aria-label
。这样你就不需要在视觉上隐藏它,你仍然可以为你的屏幕 reader 用户提供上下文。
此时,您可能还想对主导航执行此操作(或不执行此操作,具体取决于用户测试以及它使页面变得多冗长)。
因此,稍微调整一下您的示例:
<header>
<nav aria-label="Account and store pages" class="utility-nav">
<ul class="align-right">
<li><a href="#">my account</a></li>
<li><a href="#">find a store</a></li>
<li><a href="#">credit center</a></li>
<li><a href="#">track order</a></li>
<li><a href="#">wishlist</a></li>
</ul>
</nav> <!-- utility bar -->
[…]
<nav aria-label="Primary navigation" id="top-nav">
<ul>
<li><a href="#">Women</a></li>
<li><a href="#">Men</a></li>
<li><a href="#">Juniors</a></li>
<li><a href="#">Baby</a></li>
<!-- etc -->
</ul>
</nav>
</header>
如果可以,请考虑下载 free screen reader NVDA(如果您的雇主有现金则捐赠)并通过您构建的页面 运行 它。
这是我为电子商务网站的页眉编写的标记。我不确定它在语义上是否正确——尤其是实用程序栏。我应该将 role
-navigation
添加到帐户、心愿单页面链接的容器 div
中,还是应该在 nav
元素或 [=15] 中=]?
另外请让我知道我可以做些什么来使这个设计(不能改变设计的顺序 - 客户希望这样)对辅助技术更易于访问和友好。
<header>
<div role="navigation" aria-labelledby="utility-nav" class="utility-nav">
<h2 class="visuallyhidden" id="utility-nav">Account and store pages</h2>
<div class="align-right">
<a href="#">my account</a>
<a href="#">find a store</a>
<a href="#">credit center</a>
<a href="#">track order</a>
<a href="#">wishlist</a>
</div>
</div> <!-- utility bar -->
<div id="logo-search">
<!-- logo -->
<!-- search -->
<!-- mini cart/shopping bag -->
</div> <!-- logo, search, shopping bag container -->
<nav id="top-nav">
<a href="#">Women</a>
<a href="#">Men</a>
<a href="#">Juniors</a>
<a href="#">Baby</a>
<!-- etc -->
</nav> <!-- top nav -->
</header> <!-- header -->
而不是 <div role="navigation">
只需使用 <nav>
。页面上可以有多个 <nav>
元素,即使 <header>
也是如此。虽然 <nav>
通常保留用于主要的导航块(这意味着实际上您会在一个页面上最多显示两个或三个),但我认为这两个都符合您的示例。
考虑将您的链接放在一个列表中,因为它会向屏幕 reader 用户宣布项目的数量。
此外,我怀疑您的 visuallyhidden
class 是为了向除屏幕 reader 之外的所有用户隐藏 <h2>
。将其与 aria-labelledby
配对会导致它被宣布两次。拥有 <h2>
还可以在屏幕 reader 内的标题导航中创建不必要的停靠点。考虑完全放弃 <h2>
并改用 aria-label
。这样你就不需要在视觉上隐藏它,你仍然可以为你的屏幕 reader 用户提供上下文。
此时,您可能还想对主导航执行此操作(或不执行此操作,具体取决于用户测试以及它使页面变得多冗长)。
因此,稍微调整一下您的示例:
<header>
<nav aria-label="Account and store pages" class="utility-nav">
<ul class="align-right">
<li><a href="#">my account</a></li>
<li><a href="#">find a store</a></li>
<li><a href="#">credit center</a></li>
<li><a href="#">track order</a></li>
<li><a href="#">wishlist</a></li>
</ul>
</nav> <!-- utility bar -->
[…]
<nav aria-label="Primary navigation" id="top-nav">
<ul>
<li><a href="#">Women</a></li>
<li><a href="#">Men</a></li>
<li><a href="#">Juniors</a></li>
<li><a href="#">Baby</a></li>
<!-- etc -->
</ul>
</nav>
</header>
如果可以,请考虑下载 free screen reader NVDA(如果您的雇主有现金则捐赠)并通过您构建的页面 运行 它。