提问者:小点点

可访问性和JavaScript:加载动态内容还是显示和隐藏?


我对前端代码中的可访问性标准比较陌生。

我的问题是:

  • 为了实现可访问性,首先加载所有HTML内容并通过“hidden”属性显示/隐藏它是否更好?
  • 或者我可以动态加载内容并用适当的属性填充它吗?
  • 如果是,您建议我向内容添加哪些属性以通知用户内容已更新和/或更改?

例如:
我有一个带有一些按钮/选项卡的navbar,这些按钮/选项卡可以加载适当的内容。我可以加载所有内容,然后显示/隐藏is,类似于下面:

 <nav>
  <div class="tabs" role="tablist">
    <button
      id="tab-1"
      role="tab"
      aria-controls="tab-content-1"
      aria-selected="true"
      <!-- onClick={show/hide associated content} -->
    >
      Tab-1
    </button>
    <button
      id="tab-2"
      role="tab"
      aria-controls="tab-content-2"
      aria-selected="false"
      <!-- onClick={show/hide associated content} -->
    >
      Tab-2
    </button>
  </nav>

  <div>
    <!-- Content for Tab/Button #1, preloaded and hidden/shown from button click -->
    <section
      id="tab-content-1"
      role="tab-content"
      aria-labelledby="tab-1"
      hidden
      >
      Tab Content-1
    </section>
    <!-- Content for Tab/Button #2, preloaded and hidden/shown from button click -->
    <section
      id="tab-content-2"
      role="tab-content"
      aria-labelledby="tab-2"
      hidden
    >
      Tab Content-2
    </section>
</div>

或者我可以通过tab/button点击动态加载内容

<nav>
  <div class="tabs" role="tablist">
    <button
      id="tab-1"
      role="tab"
      aria-controls="tab-content-1"
      aria-selected="true"
     <!-- onClick={load appropriate content and HTML } -->
    >
      Tab-1
    </button>
    <button
      id="tab-2"
      role="tab"
      aria-controls="tab-content-2"
      aria-selected="false"
      <!-- onClick={load appropriate content and HTML } -->
    >
      Tab-2
    </button>
  </nav>

  <div>
    <!-- Dynamically load the associated Tab Content via Javascript Here
    <section
      id="" => dynamically set 'id'
      role="" => dynamically set 'role'
      aria-labelledby="=" => dynamically set 'arria-labelledby'
      >
      // Dynamically set Content
    </section>
    -->
</div>

共1个答案

匿名用户

首先,您应该使用CSS display:none而不是aria-hidden来隐藏内容。属性aria-hidden应该只在非常特定的情况下使用。我建议你在什么时候应该和不应该使用咏叹调隐藏,以及为什么会这样。许多问题已经很好地涵盖了这个话题。

回到您最初的问题,仅就可访问性而言,如果内容只是使其可见或加载,则不会有太大改变。

使用aria-live区域告诉内容正在加载,以防加载可能需要一段时间。但是,不要将aria-live用于更新的/新的内容本身,特别是如果它很长和/或包含可聚焦的元素。

决定您应该显示/隐藏还是动态加载基本上不是一个可访问性的问题。它更多地取决于初始加载时间和后续加载时间,以及您期望的响应级别。